• LoadRunner之参数化


    一、为什么要进行参数化

      LoadRunner在录制脚本的时候,只是忠实的记录了所有从客户端发送到服务器的数据,而在进行性能测试的时候,为了更接近真实的模拟现实应用,对于某些信息需要每次提交不同的数据,或者使用多个不同的值进行循环输入。这时,在LoadRunner中就可以进行参数化设置,以使用多个不同的值提交应用请求。

    二、是否必须要做参数化

    参数化可以尽量不用做,但是以下两种情况需要做参数化

    1、插入数据时,数据库字段要求是唯一的。

    2、避免走数据库的查询缓存。比如:每次都用同一个用户登录,页面展示该用户的信息,每次登录都跑同一个sql语句,执行第一次以后就被保存到数据库的缓存当中,后面再用该用户登录就不会去数据库里面查询了,而是直接从缓存里面取出来。这样就少了sql语句的解析过程,后面每次执行就会快一些。但是线上真实的情况不可能是同一个人一直在不断的登录,而是不同的用户在登录,所以这种情况也是必须要做参数化的。

    三、怎么进行参数化

    1.、在脚本中选择需要参数化的内容,单击鼠标右键,从弹出菜单中选择Replace with a parameter

    2. 在弹出的对话框中设置参数名称、参数类型

    3. 单击对话框中的Properties按钮,可以设置参数数据池中的内容以及参数的取值方式

    数据类型:

    序号

    参数类型

    说明

    1

    Date/Time

    在需要输入日期、时间的地方,可以用Date/Time来代替,可以选择日期格式,也可进行定制。

    2

    Group Name

    该类型的参数用执行脚本的VU所属组的名称来替代。但是在VuGen中运行时,该值为None。

    3

    LoadGeneratorName

    LoadRunner使用该虚拟用户所在的Load Generator机器名来代替参数。

    4

    Iteration Number

    LoadRunner使用该测试脚本当前循环的次数来代替参数

    5

    Random Number

    随机数,可以设置产生随机数的范围

    6

    Unique Number

    唯一值来代替参数

    7

    Vuser ID

    LoadRunner使用该虚拟用户的ID来代替参数值,该ID是由Controller来控制的,在VuGen中运行脚本时,该值为-1.

    8

    DataFile/Table

    可以在属性设置中编辑文件,添加内容,也可以从数据库中提取数据。

    9

    UseDefinedFunction

    从dll的简单函数中获取信息替代参数

    注意:对于参数类型为File/Table的数据文件

    1、在参数数据显示区中,最多只显示前100条数据,之后的不显示,但不影响正常取数据

    2、在记事本中编辑参数数据时,数据文件一定要以一个空行结束,否则,最后一行输入的数据不会被参数所使用

    四、文件参数化取值策略

    对于参数类型为File/Table的参数的更新方式

    假设一个dat文件中有多列值,Selectcolumn中设置取值的标识:by number是按第一列、第二列、第三列的方式取列值;by name是按列名取值。File format中column定义分列方式,是按逗号,tab还是空格;First data定义取值从列表的第几行开始取值,默认是第一行。

    与参数取值方式相关的设置有三个:

    1、Select next row:下次取值怎么取

    (1)Sequential:按照顺序一行行的取值。每一个虚拟用户都会按照相同的顺序读取

    (2)Random:在每次迭代里随机的读取一个,但是在循环中一直保持不变

    (3)Unique :每个VU取唯一的值

    除此之外还有一个Same Line As ,可以设置和前面定义的参数取同行的记录。通常用在有关联性的数据上面。比如做登录测试的脚本时,每个用户的密码都不同,就可以这样定义:创建参数文件,共两列username、passwd,则设置完username的取值方式后passwd设成 same line as username。

    2、Update value on:碰到什么情况去更新这条数据

      (1)Each iteration :每次迭代都要取新值。从action头运行到action尾叫一次迭代。

      (2)Each occurrence :每次出现重新取值,如果一个action中该参数多次出现,每遇到一个就要重新取一个值

      (3)Once :取一次之后再也不变了

    3、When out of value:值不够的情况如何取值

    Unique实际上是压力测试中更为常用的设置。如果Select next row选择unique的设置,每个数据只会用一次,当调用的次数或迭代次数超过值的个数时就可能会报错。when out of value可以选择当数值个数不够的情况系统改如何取值。

      (1)Abort Vuser:停止测试

      (2)Continue in a cyclic manner:循环取值,再重新开始新一轮的unique取值

      (3)Continue with last value:沿用最后一个值

    五、举例说明

    1、单用户多次循环

    Action里面username出现2次,password出现一次

    username(1,2,3,4,5)

    password(a,b,c,d,e)

    (1)Sequential + Each iteration

    第1次循环:1,1,a

    第2次循环:2,2,b

    。。

    。。

    第5次循环:5,5,e

    第6次循环:1,1,a

    (2)Sequential + Each occurrence

    第1次循环:1,2,a

    第2次循环:3,4,b

    第3次循环:5,1,c

    第4次循环:2,3,d

    第5次循环:4,5,e

    (3)Sequential + Once

    第1次循环:1,1,a

    第2次循环:1,1,a

    。。

    第5次循环:1,1,a

    第n次循环:1,1,a

    (4)Unique + Each iteration + Continue with last value

    第1次循环:1,1,a

    第2次循环:2,2,b

    。。

    第5次循环:5,5,e

    第n次循环:5,5,e(会提示值已经用完,但依然会执行下去,沿用第5次的取值)

    (5)Unique + Each iteration + Continue in a cyclic manner

    第1次循环:1,1,a

    第2次循环:2,2,b

    。。

    第5次循环:5,5,e

    第6次循环:1,1,a   (值取完后又循环开始取)

    第7次循环:2,2,b

    (6)Unique + Each iteration + Abort Vuser

    第1次循环:1,1,a

    第2次循环:2,2,b

    。。

    第5次循环:5,5,e

    第6次循环:报错并停止运行

    (7)Unique + Each occurrence + Continue with last value

    第1次循环:1,2,a

    第2次循环:3,4,b

    第3次循环:5,5,c  (这一步第二个username取值会提示值已经取完)

    第4次循环:5,5,d  (username值已经取完,一直提示)

    第5次循环:5,5,e  (username值已经取完,一直提示)

    第6次循环:5,5,e  (username和password值都取完了,这一步三个取值都提示值已经取完)

    (8)Unique + Each occurrence + Continue in a cyclic manner

    第1次循环:1,2,a

    第2次循环:3,4,b

    第3次循环:5,1,c  (username值取完又循环开始取)

    第4次循环:2,3,d

    第5次循环:4,5,e

    第6次循环:1,2,a  (username和password值都取完,都开始循环取)

    (9)Unique + Each occurrence + Abort Vuser

    第1次循环:1,2,a

    第2次循环:3,4,b

    第3次循环:5,报错,第二个username取值时报错,并停止运行

    (10)Unique + Once

    第1次循环:1,1,a

    第2次循环:1,1,a

    。。

    第5次循环:1,1,a

    第n次循环:1,1,a

    2、多用户循环取值(Unique)

    Action只有一个username,出现两次

    多个用户并发的时候,每个用户都是独立取值的,任何用户取值都不会影响到其他用户。但是,有一种情况是除外。Select next row选择Unique时,LoadRunner会预先将参数值分配给每个用户,分配给A用户的值B用户就不能再用,分配给B用户的值A用户也不能用,参数值都是被用户独占的。下面我们来举例说明:

    (1)Unique + Each iteration + Continue with last value

        三个用户A、B、C,循环3次:

        username(1,2,3,4,5,6)

    因为配置写的是给每个用户分配2个值。LoadRunner预先将1,2分配给了A用户,3,4分配给了B用户,5,6分配给了C用户

    A用户第一次循环:1,1

    A用户第二次循环:2,2

    A用户第三次循环:2,2  (值取完了之后每次都取最后一个)

    B用户第一次循环:3,3

    B用户第二次循环:4,4

    C用户第三次循环:4,4  (值取完了之后每次都取最后一个)

    C用户第一次循环:5,5

    C用户第二次循环:6,6

    C用户第三次循环:6,6  (值取完了之后每次都取最后一个)

    (2)Unique + Each occurrence + Continue with last value

        三个用户A、B、C循环3次

        username(1,2,3,4,5,6,7,8,9,10,11,12)

    因为配置写的是给每个用户分配4个值。LoadRunner预先将1,2,3,4分配给了A用户,5,6,7,8分配给了B用户,9,10,11,12分配给了C用户

    A用户第一次循环:1,2

    A用户第二次循环:3,4

    A用户第三次循环:4,4      (值取完了之后每次都取最后一个)

    B用户第一次循环:5,6

    B用户第二次循环:7,8

    C用户第三次循环:8,8      (值取完了之后每次都取最后一个)

    C用户第一次循环:9,10

    C用户第二次循环:11,12

    C用户第三次循环:12,12  (值取完了之后每次都取最后一个)

    (3)Unique + Once

        三个用户A、B、C,循环3次:

        username(1,2,3,4,5,6)

    自动分配,LoadRunner预先将1,2分配给了A用户,3,4分配给了B用户,5,6分配给了C用户

    A用户第一次循环:1,1

    A用户第二次循环:1,1

    A用户第三次循环:1,1

    B用户第一次循环:3,3

    B用户第二次循环:3,3

    C用户第三次循环:3,3

    C用户第一次循环:5,5

    C用户第二次循环:5,5

    C用户第三次循环:5,5

    3、多用户循环取值(Sequential&Random)

    Select next row 选择Sequential和Random时,所有用户的取值都不受其他用户的影响。

    username(1,2,3,4,5,6,7,8,9,10)

    假如有三个用户A、B、C,三个用户都可以在1~10当中取值,不存在独占的情况。取值的规律是和单用户一样的,这里就不再介绍了。

    4、练习

    银行流水号参数化,要求:1000人的并发,运行15分钟,tps为1000。参数化如何设置

    分析:

    1、参数化所需数据总数:1000*15*60=900000

    2、每个用户分配数据条数:900000/1000=900,这里我们给每个用户多给100个数即1000,那上面的总数应该是1000*1000=1000000

    3、银行流水号是不能重复的,所以要选Unique

    具体设置如下:

    六、其他参数类型介绍

    1、Random Number

    2、Vuser ID

    3、Date/Time

  • 相关阅读:
    一套权威的 MQTT Client 库
    tcp编程 示例
    我的座右铭
    win7改装 CentOS7,装完后开机,没有引导
    程序员16个建议
    Linux
    Linux
    socket
    关于RESTFUL的理解
    Django Rest Framework
  • 原文地址:https://www.cnblogs.com/L-Test/p/9451896.html
Copyright © 2020-2023  润新知