51Testing软件测试论坛

标题: LoadRunner模拟100个不同用户登录,这100个用户是如何和数据库进行交互? [打印本页]

作者: woshiwuying    时间: 2008-6-16 09:52
标题: LoadRunner模拟100个不同用户登录,这100个用户是如何和数据库进行交互?
一直不明白LoadRnner是如何和数据库进行交互的,我在测试时,发现我的脚本错误的用户名和密码,都能正常执行。在负载的时候也能正常运行,明明是错误的用户名和密码为什么还能模拟出很多个用户同时登录,都能Pass。不明白为什么?loadruner的工作原理是什么呢?
我怎么总觉得用loadruner测试有很多不确定的因素。
作者: wj19860614    时间: 2008-6-16 10:24
有道理值得提出疑问
作者: steelchen134    时间: 2008-6-16 10:28
我也遇到过,疑惑!不解!
作者: Zee    时间: 2008-6-16 10:35
你有没有看到你的日志里有warning的信息?你有没有看到你回放时的reponse?
作者: Zee    时间: 2008-6-16 10:36
LR并不判断业务逻辑的正确性。
作者: huruihai    时间: 2008-6-16 10:43
事务是否执行成功,是根据服务器是否有正确的回应,而与业务逻辑本身没有关系
比如说测试登录
参数化登录脚本后,第一组用户名、密码是正确的,第二组是错误的,在回放脚本时,每个事物的状态都是PASS,而实际第二次登陆是失败的,loadrunner在判断是否成功时是根据发出的请求是否得到服务器的回应,哪怕是错误的回应,loadrunner也认为事物是通过的,除非请求没有相应!
作者: qicyt1812    时间: 2008-6-16 11:12
做个检查点就知道是否成功了,或者查看response,返回值是什么就知道了,再或者输出一个返回值看看
int i=0;
i=web_submit_data("login.pl",
                "Action=http://127.0.0.1:2080/mercuryWebTours/login.pl",
                "Method=POST",
                "TargetFrame=body",
                "RecContentType=text/html",
                "Referer=http://127.0.0.1:2080/mercuryWebTours/nav.pl?in=home",
                "Snapshot=t2.inf",
                "Mode=HTML",
                ITEMDATA,
                "Name=userSession", "Value={WCSParam_Diff1}", ENDITEM,
                "Name=username", "Value={username}", ENDITEM,
                "Name=password", "Value=tester1", ENDITEM,
                "Name=JSFormSubmit", "Value=off", ENDITEM,
                "Name=login.x", "Value=17", ENDITEM,
                "Name=login.y", "Value=4", ENDITEM,
                LAST);

lr_output_message("===返回值:%d==",i);

如果i=0表示成功,i=1则表示失败了

再或者:
int httpcode=0;
web_submit_data("login.pl",
                "Action=http://127.0.0.1:2080/mercuryWebTours/login.pl",
                "Method=POST",
                "TargetFrame=body",
                "RecContentType=text/html",
                "Referer=http://127.0.0.1:2080/mercuryWebTours/nav.pl?in=home",
                "Snapshot=t2.inf",
                "Mode=HTML",
                ITEMDATA,
                "Name=userSession", "Value={WCSParam_Diff1}", ENDITEM,
                "Name=username", "Value={username}", ENDITEM,
                "Name=password", "Value=tester1", ENDITEM,
                "Name=JSFormSubmit", "Value=off", ENDITEM,
                "Name=login.x", "Value=17", ENDITEM,
                "Name=login.y", "Value=4", ENDITEM,
                LAST);
   httpCode = web_get_int_property(HTTP_INFO_RETURN_CODE); //紧随web_submit_data()函数后面,获取该函数的http返回值
   
   lr_output_message("===httpcode返回值:%d==",httpCode );

如果返回200,则表示通过,返回其他的,可根据具体返回值的意思来判定。
作者: qicyt1812    时间: 2008-6-16 11:17
tooles->General Options->display->show browser during display勾选上,就可以看到回放过程中到底成功还是失败了
作者: wudi_0211    时间: 2008-6-16 11:39
标题: kding
正在学习,顶了
作者: woshiwuying    时间: 2008-6-16 11:39
标题: 回复 5# 的帖子
恩,是的。LR并不判断业务逻辑的正确性。可是要确定服务器的性能,必须确定多少个用户可以同时访问该系统。要比较真实的模拟很多用户同时访问该系统,就必须让不同的用户成功登录。而不是简单的一个请求一个响应
作者: woshiwuying    时间: 2008-6-16 11:45
标题: 回复 6# 的帖子
那仅仅靠通过事务的通过率,能判断服务器的性能吗?
可是这些事务它只是通过了,并不表明就是正确的呀。要模拟的是用户的真实操作,这里面有错误的数据算是真实的吗
作者: woshiwuying    时间: 2008-6-16 11:55
标题: 回复 6# 的帖子
性能测试 和 业务逻辑 没有关系吗?
性能测试,测试的就是服务器对请求的响应吗,如果服务器有响应那么就算事务通过吗
作者: qicyt1812    时间: 2008-6-17 11:23
应该是正确的响应才算是事务通过吧,服务器的响应也可能有失败的返回,这个时候,事务不符合要求就失败了吧。
作者: lily86    时间: 2008-7-16 15:33
学习了
作者: stone-石头    时间: 2008-7-16 16:11
道理一大堆,我得好好消化一下了
作者: zw_zjf    时间: 2008-11-27 10:43
感谢,学习中
作者: cnncnn    时间: 2009-6-18 15:16
标题: 回复 4# 的帖子
在吗?能不能帮帮忙啊?
作者: navy2008    时间: 2009-6-18 17:53
赞同7#说法,在脚本中添加个检查点来进行一下判断,判断是否真的成功登陆了。
作者: ttyttt    时间: 2009-6-18 18:11
lr是根据服务器返回的http200代码来判断事务的成功的,如果返回的是200则认为是事务通过,(除非你加了脚本判断检查),譬如发一个请求到web服务器,而web服务器再根据请求去数据库中查询,如果这个时候请求未从数据库中查询,那么web服务器可能就会返回一个默认错误页面,但这个返回对于lr来说,http代码也是200,会认为是事务成功的。所以说它只能判断web服务的返回,但不能够判断返回的正确性。通常是需要加上检查点。

[ 本帖最后由 ttyttt 于 2009-6-18 18:13 编辑 ]
作者: zjviolet    时间: 2009-8-13 15:59
检查点 怎么加啊
作者: wistaria    时间: 2009-8-13 17:49
学习了
回复 20#,insert->new step ->web checks
作者: yours-123    时间: 2009-8-14 15:01
Loadruuner LR中,事务成功的判断标准是只要LR收到服务器的响应信息就会认为事务已经执行成功了。但是想要知道事务是否成功,第一种方法,在程序里面添加日志,进行统计。第二种方法,如果你发送的请求返回值涵盖了某些文字,则可以用check/image的方式检查,在脚本里增加web_reg_find或web_find函数来检查返回结果页面是否有这些文字。

   最简单的例子:

    1. web_find("web_find",

    "What=name",

LAST);

     这个函数放在页面出来之后,即web_submit_data函数之后,Run time setting里面的Preference要把第一项,Enable Image and text check 勾上。

    2. web_reg_find("Text=name",
       LAST);

    这个函数放在页面出来之前。也不用做设置。
作者: bingdu520    时间: 2009-8-14 15:32
标题: 回复 7# 的帖子
做个检查点就知道是否成功了,或者查看response,返回值是什么就知道了,再或者输出一个返回值看看
int i=0;
i=web_submit_data("login.pl",
                "Action=http://127.0.0.1:2080/mercuryWebTours/login.pl",
                "Method=POST",
                "TargetFrame=body",
                "RecContentType=text/html",
                "Referer=http://127.0.0.1:2080/mercuryWebTours/nav.pl?in=home",
                "Snapshot=t2.inf",
                "Mode=HTML",
                ITEMDATA,
                "Name=userSession", "Value={WCSParam_Diff1}", ENDITEM,
                "Name=username", "Value={username}", ENDITEM,
                "Name=password", "Value=tester1", ENDITEM,
                "Name=JSFormSubmit", "Value=off", ENDITEM,
                "Name=login.x", "Value=17", ENDITEM,
                "Name=login.y", "Value=4", ENDITEM,
                LAST);

lr_output_message("===返回值:%d==",i);

如果i=0表示成功,i=1则表示失败了

再或者:
int httpcode=0;
web_submit_data("login.pl",
                "Action=http://127.0.0.1:2080/mercuryWebTours/login.pl",
                "Method=POST",
                "TargetFrame=body",
                "RecContentType=text/html",
                "Referer=http://127.0.0.1:2080/mercuryWebTours/nav.pl?in=home",
                "Snapshot=t2.inf",
                "Mode=HTML",
                ITEMDATA,
                "Name=userSession", "Value={WCSParam_Diff1}", ENDITEM,
                "Name=username", "Value={username}", ENDITEM,
                "Name=password", "Value=tester1", ENDITEM,
                "Name=JSFormSubmit", "Value=off", ENDITEM,
                "Name=login.x", "Value=17", ENDITEM,
                "Name=login.y", "Value=4", ENDITEM,
                LAST);
   httpCode = web_get_int_property(HTTP_INFO_RETURN_CODE); //紧随web_submit_data()函数后面,获取该函数的http返回值
   
   lr_output_message("===httpcode返回值:%d==",httpCode );

如果返回200,则表示通过,返回其他的,可根据具体返回值的意思来判定。
这段代码加在vugen的哪个部分
作者: sogohu    时间: 2009-8-16 02:59
添加检查点不够。
作者: yangzhi984    时间: 2009-8-16 20:50
录脚本时选择判断登陆成功的标志位,然后点击设置检查点图标就可以了。你可以把鼠标点到录制脚本的工具栏上看提示
作者: alexanty    时间: 2009-9-3 23:41
response
作者: xiaoy035    时间: 2009-9-4 21:47
?
作者: C组十三    时间: 2009-9-4 23:56
标题: 回复 7# 的帖子
受启发了
不过实际应用中,应该增加更多的代码来保存返回结果
或者可以自己定义一个结构体或链表,把整个脚本的结果有序的写入一个文件中
看文件就知道结果是对还是错了
但是负载机的结果不知道是否能写入文件
初步想法,不知有没有人实现过
作者: kuangquanshui    时间: 2009-9-7 09:33
又学习了
作者: xiaomer    时间: 2009-9-7 16:08
难道得不到返回页面的html代码么?




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2