|
本帖最后由 夏日摸摸茶 于 2011-5-20 21:00 编辑
内容有点长哈 不过像我一样的新手 好好看看 能对参数化那块多一些理解的
接触LR时间不长,并且之前没有跑过2个脚本的经历,这次用自带的 webtours 录制了2个脚本,结果被参数化那块难住了 ,帮忙看下原因:
脚本1:注册用户(打开首页-点注册按钮-进行注册-退出)
对其中的username进行了参数化,存放在username.txt中,其他密码地址等信息都是相同的。
脚本2: 订票(登录-订票-退出)
同样对其中的username进行了参数化(使用同一个参数列表username.txt文件中的值)
测试目的:
不涉及加压,只是用controller添加这两个脚本,先模拟2个用户进行注册,完成后,紧接着模拟2个用户,使用注册好的username登录并订票。
脚本回放没问题,当用controller单独运行各个脚本时,一切都正常,注册和投票也都没问题。
于是同时添了2个脚本,按组的方式运行,并设置依次执行(先注册成功,再登录投票)。
问题:
跑完场景后,没有任何错误,但用这两个用户名登录webtours后,都能够登录成功,但查看订票记录中都为空,说明脚本1都正常执行,脚本2中实际上没有实现投票。
尝试了如下参数化方式:
脚本1这样参数化:
从结果来看,注册2个用户能成功,说明脚本1应该没什么大问题。
奇怪的地方是脚本2:
当使用如下方式参数化时,
结果:2个用户都不能订票成功
当使用如下方式参数化时,
结果:排在第一位的用户订票成功2次,第二位的用户不能订票。
每次重新执行场景时,我都更新了参数化中的列表,去掉了用过的username。此脚本也未涉及关联。controller中未更改过任何默认配置。
run-time-setting那里未改动,迭代1次。浏览器模拟那块设置的是
最初跑的是20个用户,还涉及迭代,后来为了排除问题,弄了这个最简单的场景,结果这个方式也不能订票成功。对奇怪的就是脚本2的那两种参数化方式上,各种匹配多尝试了,主要的结果还是这样。
场景的结果:
只要这俩脚本一起运行(按先后顺序)时,就不能订票,此时,取消脚本1,只跑脚本2,由于用户已刚刚注册成功过,因此2个用户都能够定票成功
哎,不知道说的够不够清楚,困惑2天了,求指点中。。。。
解决办法:
单独执行2个脚本,结果都是正常的,但按group的方式,依次执行,就出问题。(俩脚本的内容都录制在)
于是在脚本2中用户登陆后,设置了检查点,通过查看日志,发现用户并未登陆成功。问题出在脚本2的参数化取值上。
我尝试着设置了另外一个一摸一样的参数列表文件username1.txt,里面的内容和原username保持一致。并且把脚本2中的参数更新成这个username1。
结果这个尝试是正确的:
①从结果来看,在场景中,如果2个脚本共用一个参数化文件username,并且都选择unique的方式的话,假如参数中有10行内容,脚本1的两个用户取走了前2行,脚本2的两个用户就会从第三行开始取,而不是都从第一行开始取值。这和设想的不一样,原以为两脚本之间没有联系。但结果竟然。。。。。所以造成了 第三行的用户根本未注册,更别提投票了。(不知道有没有什么设置能让两个脚本都从通过一个文件的第一行开始取值???)
回复 :13楼an_sshan 感觉像是您说的问题,造成了脚本2无效,但是我都是录在action中的。
按照用2个参数化文件的方式继续说:
②当脚本2的参数列表中只有2个值时,报错:Insufficient records parameter ‘username’ in table to provide the vuser with unique data 数据不够用
当参数个数大于等于4个值时,就执行成功,想不明白第二个脚本中为何需要有一倍或者一倍以上的参数值。
(PS:单独运行脚本2时能正常投票,但当1和2连续运行,就存在这个“数据不够”的问题 此时必须多写出一倍以上的参数值,才能正常执行 而且最先运行的脚本1中的参数化方式和参数值 与脚本2一摸一样 脚本1就不涉及“数据够不够用这回事” 这点让人非常困惑 )
纠结了很久,也问了很多人,后来查了几次参数化那块,发现是 疏忽引起的问题:
在脚本2中,最初用的是username当参数,后来改用username1之后,原来的username参数仍处于界面中 如图
因此,俩脚本同时跑场景时,即使脚本2里已不再使用username参数,但仍有2个unique限制,需要比实际用户数多一倍的值,所以会报“数据不够”的错。当手动将这里的username参数删除后,只需要与用户数相同的参数(2个值)就可以成功了。一切都和当初的测试目的一样了。
值得关注的就是:
①双脚本连续运行时,都使用unique+each iteration更新方式时,第二个脚本不是从头开始取值。如果脚本2使用sequential+each iteration方式,才是从头取值,但2个用户会都取第一个值,结果第一个值投票2次,第二个值没有被用到。这是我实践的结果。
②参数化列表中,不用的参数应该及时删除,以免画蛇添足。
这地方还有点困惑,在上面的图中,为什么脚本1和脚本2同时运行时 就会报错,仅运行脚本2时,就不报错。
(由于同用一个txt文件,莫非是脚本1中的username参数激活了脚本2中的这个多余的参数? )
感兴趣的可以亲手试试 以上纯属个人猜测,缺乏权威,望高人指点。 |
|