chenjinlin 发表于 2009-4-26 14:03:33

loadrunner测试中遇到的困饶很久的问题?

请教:Loadrunner 困饶很久的问题,一直不能理解. 使用的是8.1.
测试用例:打开首页登陆,输入用户名和密码.退出登陆. 要求测试并发多少用户登陆时,登陆成功的响应时间不超过6秒.
在 vuser 中录制脚本 , action 中录制打开首页,在登陆事物前插入集合点,后面是登陆事物的脚本,未做退出操作.
参数化登陆用户名,密码都是1.参数选择TEXT,50多个数据.
这里参数更新方法和数据分配该选什么?
sequential random unique
each iteration occurrence once
该如何组合.我选的是: uniqueoccurrence
脚本没有设置迭代.
场景设置:50个VUSER,选择:ramp up (run until completion)
选择,initalize all Vusers before Run
配置集合点:选择policy 选择:Release when 100% of running Vuser arrive at the rendezcous
请帮我看下,如果就上面这个用例,就是同时并发X个用户登陆系统,测试响应时间不超过6秒.该如何设置,对于参数化和Vuser 的场景设置感到一头雾水.
我的想法是:模拟X个不同用户,打开首页后,X个不同用户,同时登陆系统。查看登陆事物成功的响应时间是否超过6秒。这样该如何设置运行时和场景设置才能达到我的目的.
例如:参数化的时候如果选择的是sequential +occurrence 同时加载 X个vuser 和选 unique+occurrence 是否都可以满足我的需求.我参数里的数据有50个值,我测试时最大的虚拟用户也只加到过50.这两各的区别就是如果选后一种,我的参数值的个数,要足够多就行吧. 高手给点播一下.怎么样才能搞清楚数据分配和更新方式与场景加载设置的关系.现在我思维很乱.
录制脚本如下:
Action()
{
        web_add_auto_header("Accept-Language",
                "zh-cn");
        // Parameter {WCSParam_Diff1} created by Correlation Studio
        web_reg_save_param("WCSParam_Diff1",
                "LB=jsessionid=",
                "RB=\"",
                "Ord=1",
                "RelFrameId=1",
                "Search=Body",
                "IgnoreRedirections=Yes",
                LAST);
        web_url("acegilogin.jsp",
                "URL=http://10.1.35.51:7001/acegilogin.jsp",
                "Resource=0",
                "RecContentType=text/html",
                "Referer=",
                "Snapshot=t1.inf",
                "Mode=HTML",
                EXTRARES,
                "URL=/styles/ie.css", ENDITEM,
                "URL=/styles/shenzhen/scpr.gif", ENDITEM,
                LAST);
        lr_rendezvous("登陆");
        lr_start_transaction("登陆");
        web_submit_form("j_acegi_security_check;jsessionid={WCSParam_Diff1}",
                "Snapshot=t2.inf",
                ITEMDATA,
                "Name=j_username", "Value={j_username}", ENDITEM,
                "Name=j_password", "Value=1", ENDITEM,
                "Name=submit", "Value=登录", ENDITEM,
                EXTRARES,               
                "URL=/styles/shenzhen/simpleClock.swf", "Referer=http://10.1.35.51:7001/presentation/index.do", ENDITEM,
                "URL=/styles/shenzhen/clock3.swf", "Referer=http://10.1.35.51:7001/presentation/index.do", ENDITEM,
                "URL=/styles/presentation/tabR.gif", "Referer=http://10.1.35.51:7001/presentation/toolbar.do", ENDITEM,
                "URL=/styles/presentation/tabL.gif", "Referer=http://10.1.35.51:7001/presentation/toolbar.do", ENDITEM,
                "URL=/styles/front/toolbar.gif", "Referer=http://10.1.35.51:7001/presentation/toolbar.do", ENDITEM,
                "URL=/styles/site/print.gif", "Referer=http://10.1.35.51:7001/presentation/task.do", ENDITEM,
                "URL=/styles/site/normalize.gif", "Referer=http://10.1.35.51:7001/presentation/task.do", ENDITEM,
                LAST);
        web_custom_request("clock.jsp",
                "URL=http://10.1.35.51:7001/commons/clock.jsp?tstmp=1240570837078",
                "Method=POST",
                "Resource=0",
                "RecContentType=text/html",
                "Referer=http://10.1.35.51:7001/styles/shenzhen/simpleClock.swf",
                "Snapshot=t3.inf",
                "Mode=HTML",
                "Body=onLoad=%5Btype%20Function%5D&action=post",
                LAST);
        web_url("anytools.jsp",
                "URL=http://10.1.35.51:7001/scripts/anytools.jsp",
                "Resource=0",
                "RecContentType=text/html",
                "Referer=http://10.1.35.51:7001/presentation/task.do",
                "Snapshot=t4.inf",
                "Mode=HTML",
                LAST);
        web_url("blank.jsp",
                "URL=http://10.1.35.51:7001/blank.jsp",
                "Resource=0",
                "RecContentType=text/html",
                "Referer=http://10.1.35.51:7001/presentation/index.do",
                "Snapshot=t5.inf",
                "Mode=HTML",
                EXTRARES,
                "URL=/styles/catalog/body.gif", "Referer=http://10.1.35.51:7001/presentation/catalog.do?method=list", ENDITEM,
                "URL=/styles/catalog/groupBar.gif", "Referer=http://10.1.35.51:7001/presentation/catalog.do?method=list", ENDITEM,
                "URL=/styles/catalog/folderClosed.gif", "Referer=http://10.1.35.51:7001/presentation/catalog.do?method=list", ENDITEM,
                LAST);

        web_url("blank.jsp_2",
                "URL=http://10.1.35.51:7001/blank.jsp",
                "Resource=0",
                "RecContentType=text/html",
                "Referer=http://10.1.35.51:7001/presentation/index.do",
                "Mode=HTML",
                LAST);

        web_url("blank.jsp_3",
                "URL=http://10.1.35.51:7001/blank.jsp",
                "Resource=0",
                "RecContentType=text/html",
                "Referer=http://10.1.35.51:7001/presentation/index.do",
                "Snapshot=t6.inf",
                "Mode=HTML",
                LAST);

        lr_end_transaction("登陆", LR_AUTO);

        return 0;
}

云层 发表于 2009-4-26 17:28:50

:L 我没看懂。。。

Lennon 发表于 2009-4-26 18:46:44

嘿嘿
你应该是有这么两个问题
1、参数更新方式和数据分配方式你弄不明白该怎么选。你选择的是unique occurrence。这么选是错的。这个选择的意思是每次用到参数时更新,并且每次使用的参数不重复(两个选择都错)。这里选 random iteration 比较好。意思是每个迭代一次更新,每次随机选择一个。这些都是什么意思?网上搜一下。讲的全面的很多。最好的办法是自己做一下试验,这样
lr_errir_message(lr_eval_string(randomiteration “{randomiteration}”))。每种组合一个参数。然后在vugen里面和control里面都尝试一下,你就清楚了。
2、你的第二个问题是如何设置场景才能准确的得出多少用户登陆时,登陆成功的响应时间不超过6秒。rampup的方式可以。但不是run until complete。这个的意思是一个用户做完一次就不做。这里要让他持续运行一段时间。做以下几个改变
a 去掉集合点。那个在这里没有什么用
b 50用户每隔一几秒加一个。加完后持续运行个20分钟
开始运行后
登陆的tps会慢慢上升。然后保持平缓。
如果在50用户都加完了才开始平缓。那么你需要增加虚拟用户的数量。当然你可以一开始就多加点。
如果50个还没有用完,平缓的登录的 tps就开始下降了,说明系统完蛋了。可能现在你还不关注他为什么完蛋。
反正这个时候拿你应该知道了登录的tps平缓在什么值上了。

接下来的问题就需要结合给你提需求的人的认识了。或者是你的认识
tps平缓了,说明系统的瓶颈到了,比如cpu资源被用的差不多了。他(你)如果觉得资源的限制是一种浪费的话,那么这个tps就是接下去用的tps。如果他(你)觉得cpu占用率不应该超过70%的话(假设现在的瓶颈是cpu),那么你就取tps的70%。以此类推。

接下来我们有了一个tps,比方说x。从这个值推往我们的用户数。
目标是6s。那么并发用户数就是6x。

当然你也可以完全不管上面的内容。让他运行,完了看响应时间小于6秒时的并发用户数。

laishiming 发表于 2009-4-26 21:32:38

选择一种数据格式。在“属性” 中有以下几
个选项:
◆Each Occurrence:在运行时, 每遇到一次该参数, 便会取一个新的值
◆Each iteration:运行时, 在每一次循环中都取相同的值
◆Once:运行时, 在每次循环中, 该参数只取一次值

你可以选择参数的类型选择FILE,选择下一行类型为Unique,更新值的时间为Once,每个虚拟用户取的登录账户就不一样,而每次迭代使用的是相同的账户

laishiming 发表于 2009-4-26 21:34:06

你只是做登陆那块的测试的话,还需要录制下退出的操作,并把登陆及退出操作放到Action中

chenjinlin 发表于 2009-4-30 00:52:52

请lennon更细致的解释下?

参数更新方式和数据分配方式你弄不明白该怎么选。你选择的是unique occurrence。这么选是错的。这个选择的意思是每次用到参数时更新,并且每次使用的参数不重复(两个选择都错)。这里选 random iteration 比较好。意思是每个迭代一次更新,每次随机选择一个。这些都是什么意思?网上搜一下。讲的全面的很多。最好的办法是自己做一下试验,这样
lr_errir_message(lr_eval_string(randomiteration “{randomiteration}”))。每种组合一个参数。然后在vugen里面和control里面都尝试一下,你就清楚了。
疑问:1. 我在vugen 里并没有在 Action里设置迭代,即只迭代一次, random iteration也就是每次加载一个Vuser 后,都随机取一个用户名。
2.我选择的是sequential +occurrence 同时加载 X个vuser 和选 unique+occurrence ,我的理解是:每次加载一个Vuser 后,顺序的取一个用户名,或选择一个唯一的用户名。例如我的用户名数据有50条,如果我加载的虚拟用户数超过50,那么就要选 sequential +occurrence ,如果不超过50,选后者效果是一样的。
我的想法是,每次选择登录的用户都不同。所以我选unique+occurrence ,虚拟用户50 。不知道我的理解对不对?
3.lr_errir_message(lr_eval_string(randomiteration “{randomiteration}”))。每种组合一个参数。 对函数的使用,我还不很清楚,能说下具体的调试方法吗?我也想知道,如何在运行场景的时候,查看到我加载的用户每次的运行过程。

steelchen134 发表于 2009-4-30 02:01:10

时间是检验真理的唯一标准,录制一个简单的脚本,分别试一下每一种设置。查看测试结果就知道了

chenjinlin 发表于 2009-4-30 10:30:07

回复 8# 的帖子

请问:我的需求是想知道同时并发到多少用户数登陆的时候,我的登陆成功的响应时间不超过6秒.
这样我该如何设置,我前面设置的有没有错.:Q
页: [1]
查看完整版本: loadrunner测试中遇到的困饶很久的问题?