文件/表参数的数据分配和更新方法
用LR作测试时,往往要设置参数,参数设置的不同直接影响到测试结果,所以是测试中至关重要的一环。曾经在论坛和其他网站上搜寻过类似的问题,想从中找出实际的操作过程,但很遗憾,找到的大都比较零散,或是看了也不明白如何作,实在没办法,才想到了手册,一看之下,才发现用手册上归纳的来作为初步的指导已经绰绰有余。以下是从LR自带的帮助文件里摘出的。警戒:以后碰到问题,边在网上搜索,边查手册,不必急着发问,因为你问的别人不一定遇到过,或者根本不理解你的意思,更惨的,放N天也无人问津。
对于文件和表类型参数,所选的数据分配方法和更新方法会共同影响在场景或会话步骤运行期间 Vuser 用来替换参数的值。
下表总结了根据所选的数据分配和更新属性的不同,Vuser 所使用的值:
更新方法
数据分配方法
顺序
随机
唯一
每次迭代
对于每次迭代,Vuser 会从数据表中提取下一个值。
对于每次迭代,Vuser 会从数据表中提取新的随机值。
对于每次迭代,Vuser 会从数据表中提取下一个唯一值。
每次出现
(仅数据文件)
参数每次出现时,Vuser 将从数据表中提取下一个值,即使在同一迭代中。
参数每次出现时,Vuser 将从数据表中提取新的随机值,即使在同一迭代中。
参数每次出现时,Vuser 将从数据表中提取新的唯一值,即使在同一迭代中。
一次
对于每一个 Vuser,第一次迭代中分配的值将用于所有的后续迭代。
第一次迭代中分配的随机值将用于该 Vuser 的所有迭代。
第一次迭代中分配的唯一值将用于该 Vuser 的所有后续迭代。
示例
假设表/文件包括以下所示的值:
Kim;David;Michael;Jane;Ron;Alice;Ken;Julie;Fred
[*]如果选择使用“顺序”方法分配数据,则:
[*]如果选择在“每次迭代”进行更新,则所有 Vuser 就会在第一次迭代使用 Kim,第二次迭代使用 David,第三次迭代使用 Michael,等等。
[*]如果选择在“每次出现”进行更新,则所有 Vuser 就会在第一次出现时使用 Kim,第二次出现使用 David,第三次出现使用 Michael,等等。
[*]如果选择更新“一次”,则所有 Vuser 就会在所有的迭代中使用 Kim。
如果数据表中没有足够的值,则 VuGen 返回到表中的第一个值,循环继续直到测试结束。
[*]如果选择使用“随机”方法分配数据,则:
[*]如果选择在“每次迭代”进行更新,则 Vuser 在每次迭代时使用表中的随机值。
[*]如果选择在“每次出现”进行更新,则 Vuser 就会在参数每次出现时使用随机值。
[*]如果选择更新“一次”,则所有 Vuser 就会在所有的迭代中使用第一次随机分配的值。
[*]如果选择使用“唯一”方法分配数据,则:
[*]如果选择在“每次迭代”进行更新,则对于一个有 3 次迭代的测试运行,第一个 Vuser 将在第一次迭代时提取 Kim,第二次迭代提取 David,第三次迭代提取 Michael。第二个 Vuser 提取 Jane、Ron 和 Alice。第三个 Vuser 提取 Ken、Julie 和 Fred。
[*]如果选择在“每次出现”进行更新,则 Vuser 就会在参数每次出现时使用列表的唯一值。
[*]如果选择更新“一次” ,则第一个 Vuser 就会在所有迭代时都提取 Kim,第二个 Vuser 就会在所有迭代时提取 David,等等。
支持 谢谢楼主的总结
但我有一个问题
如果我的脚本设置迭代次数为1,并且逐渐增加负载
我希望每一个虚拟用户都顺序的取列表中的值
该如何设置呢?
比如我的脚本设置迭代次数为1
设置10个虚拟用户,并且每30秒增加一个用户,让脚本执行足够长的时间
那我希望第一个用户用kim登陆
第二用户用David登陆
...
依次循环的取列表中的值
应该怎么设置呢?
按照你的解释那就应该选择"唯一"方法分配数据,并选择"一次"更新
但我这样设置后还是所有用户都取第一个值kim
请指点一下
谢谢
回复 #3 hiyizhiyu 的帖子
你说的这种情况我还没有实践过,因为手头没有可以重复使用的数据(测试登录倒是可以用同一对用户名和密码登录多次,但我不知道怎样才算是登录成功了,不好意思^_^),但是我觉得你的理解应该是对的。如果你说的情况不循环,应该选“唯一”和“每次迭代”;而你现在是要循环,每个用户取不同的值,同一个用户每次迭代时都取第一次取得的值,应该就是“唯一”和“一次”了。不知我们的理解是否有误,或者另有其他设置?
另外想请教一下,就是前面说的:怎样测试用户已经登录成功或是不成功呢?
[ 本帖最后由 lavender2004 于 2007-1-18 19:57 编辑 ] 可是我设置"唯一"和"一次"后
所有用户都是用列表中第一行数据
即都是用kim登陆
几乎所有组合都试过了
都无法实现循环取值
不知道有没有什么文档可以参考一下啊
我的脚本不是单纯的测试登陆
登陆后会有创建case的操作
而不同用户创建的case其所属用户那个属性就会不同
因此一个用户登陆后如果创建了case
那么case所属用户一定是当前用户
用这个可以判定用户正常登陆了 把迭代次数改成10试试,有战友提醒我把迭代改一下,我觉得有道理 收回刚才的建议,有悖于手册的说明,再说也行不通的 是啊
改了迭代次数就相当于修改了测试场景
这个不太好解决
我希望做到的就是
所有的虚拟用户循环取列表中的值去执行一组相同的操作,执行相当一段时间 我也遇到了类似的问题,做登陆测试,数据文件中有四组数据,后两组是错误数据,但是在压力回放中却没有问题,这是为什么啊?按说结果应该是后两个虚拟用户运行失败才是啊(Vu=4,用户的参数设置为unique,each iteration,continue with last value;密码的参数设置为same line with 用户,迭代次数是1) 纯登录的情况,我刚才试过了,这样设置没有问题,只是还需要辅以其他的设置。问过开发才知道数据库里有个表可以记录某个用户什么时间(精确到秒)登录过哪个系统,登录机器的IP等等,有了这个就好办了。
开始我也只是设置了“唯一”和“一次”(我始终还是觉得这样的设置是没问题的),其他跟以前一样,但是跑出来的结果跟hiyizhiyu差不多,查询的时候,开头几条数据都是第一个用户的,到后来就有些乱了,不知道什么规律。于是我又在各个菜单里找是不是还有什么地方没有设置,后来终于让我找到了。具体过程如下:
假设我有3个用户登录,分别为用户1,用户2,用户3(只测试登录的情况,用户名和密码分别为u1,p1;u2,p2;u3,p3):
1、参数设置成“唯一”和“一次”
2、运行时设置->常规->运行逻辑->迭代次数选1次
3、运行时设置->浏览器->浏览器仿真->“每次迭代模拟一个新用户”勾选(这个设置在这里好像不影响结果)
4、运行时设置->常规->步:“开始新迭代”不要选择“在前一个迭代结束后立即开始”,我选的是第二个。我这里设置:前一个迭代结束后:具有固定延迟n1秒 开始新迭代(n1的具体意义下面有说明)
5、然后在场景计划->编辑计划->计划生成器里设置:“加压”选项卡:开始 1 Vuser,每n2秒;“持续时间”选项卡:运行n3秒 在加压完成之后(n2和n3的具体意义下面有说明)
如上设置好以后,在场景里设用户数量为3个,跑完后再到表里一查,果然是按预定的顺序跑的,即:第一次迭代,依次地,用户1用u1,p1登录,用户2用u2,p2,用户3用u3,p3登录;第二次迭代,也是依次,用户1用u1,p1登录,用户2用u2,p2,用户3用u3,p3登录….以后的每次迭代都是这个顺序。
各位可以试一下,有问题再讨论:)
[ 本帖最后由 lavender2004 于 2007-1-18 19:53 编辑 ]
回复 #9 lulu2007 的帖子
密码的参数设置不要设成为same line with 用户,要设得跟用户一样:unique,each iteration,continue with last value。原因我也不知道是什么,只是这样设就对了,你可以试试看。 不行啊,我试过了还是四个用户全都通过了,如果密码参数设置与用户一样,能保证在取数据文件中的数据是同时取的么? 还有.....
迭代次数为1;
并发数为实际用户数;
运行时设置->浏览器->浏览器仿真->“每次迭代模拟一个新用户”勾选
这些设置了没有呢?
回复 #12 lulu2007 的帖子
如果还是不行,你最好把登录那段的脚本贴出来看看.... 恩,我再试试,把运行时设置改一下 Action(){
web_url("login.htm",
"URL=http://10.8.8.138/boeing/login.htm",
"Resource=0",
"RecContentType=text/html",
"Referer=http://10.8.8.138/boeing/",
"Snapshot=t2.inf",
"Mode=HTML",
LAST);
lr_think_time( 18 );
web_submit_form("pass.jsp",
"Snapshot=t3.inf",
ITEMDATA,
"Name=username", "Value={用户}", ENDITEM,
"Name=password", "Value={密码}", ENDITEM,
"Name=submit", "Value=登录", ENDITEM,
LAST);
return 0;
} 原帖由 lavender2004 于 2007-1-19 09:31 发表
还有.....
迭代次数为1;
并发数为实际用户数;
运行时设置->浏览器->浏览器仿真->“每次迭代模拟一个新用户”勾选
这些设置了没有呢?
并发数为实际用户数?这是什么意思啊 ,该怎么设置啊?
回复 #17 lulu2007 的帖子
就是指你在场景里设的那个“数量”,应该和你参数表里的用户数量一样 没错啊,我虚拟用户是四个,数据文件中也是四个啊,迭代次数为一 原帖由 lavender2004 于 2007-1-18 19:47 发表纯登录的情况,我刚才试过了,这样设置没有问题,只是还需要辅以其他的设置。问过开发才知道数据库里有个表可以记录某个用户什么时间(精确到秒)登录过哪个系统,登录机器的IP等等,有了这个就好办了。
开始 ...
那假如第二个用户较第一个用户先执行完操作
不知道会不会有影响呢?
找个时间试试你的方法
我现在的解决办法是
数据选择"unique"
update选择"Each occurrence","Continue in a cyclic manner","Allocate(1) values for each Vuser"
这样设置后
在脚本最前面首先就把用户名和密码存到变量中
后面的脚本都用这些变量
对于测试登陆来说
如果在登陆失败的情况下系统会给client提示信息的话,那么LR是一定可以获取这个信息的,应该可以依次来判断是否登陆成功
比如登陆后可以尝试check server response的内容
一般的系统应该都有提示信息的
页:
[1]
2