bb64844866 发表于 2014-1-20 16:32:04

关于参数化

本帖最后由 bb64844866 于 2014-1-20 16:57 编辑

问一个比较常见的问题:
现在录制一个脚本后,对其中某一项做了参数化,例如对‘产品编号’这个数据项定义了参数化,然后打开参数列表编辑后用记事本给了5个备选值,比如‘0001,0002,0003,0004,0005’。取参数的方法(‘选择下一行’)那一项我设置的是‘顺序’,之后保存脚本并进行单用户调试且通过。
接下来如果我运行时候加入了50个虚拟用户并发运行该脚本,场景是每隔30秒启动一个虚拟用户。那么我的问题是,当运行后虚拟用户数超过10个以后或者说50个用户都启动后,每个虚拟用户肯定是按参数列表里的顺序去拿里面的‘产品编号’这个数据吗?如果是那样的话,可以理解为所有虚拟用户拿到的都是第一个‘产品编号’吗?
现在这个脚本我加虚拟用户运行后,我到数据库里查数据(产品编号)发现并不是像想象的这样,不知道为什么。

bb64844866 发表于 2014-1-21 10:46:35

补充下:
参数列表里面有5个值:‘0001,0002,0003,0004,0005’,而脚本里只有一个处调用了此参数。参数列表里设置的是顺序选择,起始位置是第一行参数,也就是'0001', 那么当多个用户并发运行脚本时候,有没有可能其它用户拿的是第二个或第三个参数?这是为什么?

ffwithvv 发表于 2014-1-21 14:14:27

首先,你没告诉我你的更新取值方式是每次迭代还是每次出现还是仅一次
假设你是每次迭代,那么第一次迭代的时候每个用户都会取第一条记录,然后第2次迭代取第2次,以此类推

lovsnow 发表于 2014-2-10 16:48:56

如果取参数的方法(‘选择下一行’)那一项设置的是‘顺序’, 那还要看Update value on(更新时的值)
取的是什么, 如果取的是每次迭代(Each iteration), 那么取值就是“ 0001,0002,0003,0004,0005,0001,0002,0003,0004,0005……” 这样。

wuzhenwu 发表于 2014-2-10 17:10:31

假设存在:
数据:A、B、C
虚拟用户:Vuser1、Vuser2、Vuser3
脚本中参数出现三次,脚本迭代三次

怎样取下一行数据?
Sequential:顺序,所有虚拟用户按照顺序读取数据表
Random:随机,所有虚拟用户随机形式读取数据表
Unique:唯一,所有虚拟用户每次各取一值(不重复)

什么时候访问数据表完成数据更新?
Each iteration:每次迭代以后
Each occurrence:每次出现参数
Once:每出现一个虚拟用户


实例:
顺序
Sequential + Each iteration
第一次迭代 无论参数任何时候出现 Vuser1、Vuser2、Vuser3 取A
第二次迭代 无论参数任何时候出现 Vuser1、Vuser2、Vuser3 取B
第三次迭代 无论参数任何时候出现Vuser1、Vuser2、Vuser3 取C

Sequential + Each occurrence
第N次迭代 参数第一次出现 Vuser1、Vuser2、Vuser3 取A
第N次迭代 参数第二次出现 Vuser1、Vuser2、Vuser3 取B
第N次迭代 参数第三次出现 Vuser1、Vuser2、Vuser3 取C

Sequential + Once
第N次迭代 无论参数任何时候出现 Vuser1取A Vuser2取B Vuser3取C

随机
Random + Each iteration
第N次迭代 无论遇到该参数多少次 Vuser1都只取A,或者B,又或者C,本次迭代不再更新
第N次迭代 无论遇到该参数多少次 Vuser2都只取A,或者B,又或者C,本次迭代不再更新
第N次迭代 无论遇到该参数多少次 Vuser3都只取A,或者B,又或者C,本次迭代不再更新
在N+1次迭代,每个Vuser重新随机抽取数据


Random + Each occurrence
第N次迭代 第一次遇到该参数 Vuser1、Vuser2、Vuser3在A、B、C中随机抽取一个
第N次迭代 第二次遇到该参数 Vuser1、Vuser2、Vuser3重新在A、B、C中随机抽取一个
第N次迭代 第三次遇到该参数 Vuser1、Vuser2、Vuser3重新在A、B、C中随机抽取一个
在N+1次迭代,每个Vuser继续保持每遇到一次参数就重新抽取一次数据

Random + Once
第N次迭代 无论遇到该参数多少次 Vuser1都只取A,或者B,又或者C
第N次迭代 无论遇到该参数多少次 Vuser2都只取A,或者B,又或者C
第N次迭代 无论遇到该参数多少次 Vuser3都只取A,或者B,又或者C
在N+1次迭代,每个Vuser不会重新抽取数据

唯一
注意:使用该Unique类型必须注意数据表有足够多的数。
比如Controller 中设定20 个虚拟用户进行5 次循环,那么编号为1 的虚拟用户取前5个数,编号为2 的虚拟用户取6-10 的数,依次类推,这样数据表中至少要有100个数据,否则Controller 运行过程中会返回一个错误。
因此以下例子在数据表中加入数据D、E、F、G、H、I。

Unique + Each iteration
第一次迭代 无论参数出现多少次 Vuser1取A Vuser2取D Vuser3取G
第二次迭代 无论参数出现多少次 Vuser1取B Vuser2取E Vuser3取H
第三次迭代 无论参数出现多少次 Vuser1取C Vuser2取F Vuser3取I

Unique + Each occurrence
第一次迭代 第一次出现该参数 Vuser1取A Vuser2取D Vuser3取G
第一次迭代 第二次出现该参数 Vuser1取B Vuser2取E Vuser3取H
第一次迭代 第三次出现该参数 Vuser1取C Vuser2取F Vuser3取I

Unique + Once
无论进行多少次迭代 无论参数任何时候出现 Vuser1取A Vuser2取B Vuser3取C
数据D、E、F、G、H、I不取

wuzhenwu 发表于 2014-2-10 17:11:20

希望你理解上面的参数化设置!
页: [1]
查看完整版本: 关于参数化