前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【性能工具】LoadRunner参数化取值详解

【性能工具】LoadRunner参数化取值详解

作者头像
Luga Lee
发布2022-03-25 14:00:44
4590
发布2022-03-25 14:00:44
举报
文章被收录于专栏:架构驿站架构驿站

  改变参数化的取值方式,关键在于Select next row和Update value on这两个选项。

Select next row包括以下选项:

· Sequential:顺序方式

· Random:随机方式

· Unique:唯一方式

Update value on包括如下选项:

· Each iteration:每次迭代更新取值

· Each occurrence:每次取值更新

· Once:只更新一次

  下面我们将通过如下的一段脚本来分别解析各个组合设置的效果,脚本如下:

Action() { int i = 0; for (i=0; i<5; i++) { lr_eval_string("{paramtemp}"); } lr_eval_string("{paramtemp}"); return 0; }

注:以上脚本的功能就是先重复循环取5次参数,然后循环结束后再读取一次参数的值。这里为参数paramtemp准备的参数数据有temp1~8共8条数据,供测试使用。

1、Sequential+Each iteration(顺序方式+每次迭代更新取值),设置Run—Logic中action循环迭代5次,并运行以上脚本,结果如下:

Action.c(5): Notify: Parameter Substitution: parameter "paramtemp" = "temp1" Action.c(5): Notify: Parameter Substitution: parameter "paramtemp" = "temp1" Action.c(5): Notify: Parameter Substitution: parameter "paramtemp" = "temp1" Action.c(5): Notify: Parameter Substitution: parameter "paramtemp" = "temp1" Action.c(5): Notify: Parameter Substitution: parameter "paramtemp" = "temp1" Action.c(7): Notify: Parameter Substitution: parameter "paramtemp" = "temp1"

Action.c(5): Notify: Parameter Substitution: parameter "paramtemp" = "temp2" Action.c(5): Notify: Parameter Substitution: parameter "paramtemp" = "temp2" Action.c(5): Notify: Parameter Substitution: parameter "paramtemp" = "temp2" Action.c(5): Notify: Parameter Substitution: parameter "paramtemp" = "temp2" Action.c(5): Notify: Parameter Substitution: parameter "paramtemp" = "temp2" Action.c(7): Notify: Parameter Substitution: parameter "paramtemp" = "temp2"

  。。。。。。

  通过如上的回放日志可以发现,共循环action5次,共取了5个参数化中的数据,但每次执行action脚本时,脚本内部的取值均相同。设置Sequential是为了保证顺序读取方式,而Each iteration是基于Run—Logic的设置的,就是说每次循环一次后,读取新的值。如果设置循环次数超过数据的行数,此时再回放之后的结果就是,超过第八,从第九次开始就又从temp1开始读取,完成循环迭代的读取过程。

2、Sequential+Each occurrence(顺序方式+每次取值更新),设置Run—Logic中action循环迭代5次,并运行以上脚本,结果如下:

Action.c(5): Notify: Parameter Substitution: parameter "paramtemp" = "temp1" Action.c(5): Notify: Parameter Substitution: parameter "paramtemp" = "temp2" Action.c(5): Notify: Parameter Substitution: parameter "paramtemp" = "temp3" Action.c(5): Notify: Parameter Substitution: parameter "paramtemp" = "temp4" Action.c(5): Notify: Parameter Substitution: parameter "paramtemp" = "temp5" Action.c(7): Notify: Parameter Substitution: parameter "paramtemp" = "temp6"

Action.c(5): Notify: Parameter Substitution: parameter "paramtemp" = "temp7" Action.c(5): Notify: Parameter Substitution: parameter "paramtemp" = "temp8" Action.c(5): Notify: Parameter Substitution: parameter "paramtemp" = "temp1" Action.c(5): Notify: Parameter Substitution: parameter "paramtemp" = "temp2" Action.c(5): Notify: Parameter Substitution: parameter "paramtemp" = "temp3" Action.c(7): Notify: Parameter Substitution: parameter "paramtemp" = "temp4"

  。。。。。。

  分析如上的两次迭代回放日志我们可以发现,每一次迭代中取值都在变化,而且都是在读取新的一行数据,当数据读取完之后,又重新顺序读取。这里我们就可以很清晰的认识到Each occurrence和Each iteration之后的结果,是完全不同的方式进行读取的,Each occurrence每一次取值更新的。

3、Sequential+Once(顺序方式+只读取一次),设置Run—Logic中action循环迭代5次,并运行以上脚本,结果如下:

Action.c(5): Notify: Parameter Substitution: parameter "paramtemp" = "temp1" Action.c(5): Notify: Parameter Substitution: parameter "paramtemp" = "temp1" Action.c(5): Notify: Parameter Substitution: parameter "paramtemp" = "temp1" Action.c(5): Notify: Parameter Substitution: parameter "paramtemp" = "temp1" Action.c(5): Notify: Parameter Substitution: parameter "paramtemp" = "temp1" Action.c(7): Notify: Parameter Substitution: parameter "paramtemp" = "temp1"

Action.c(5): Notify: Parameter Substitution: parameter "paramtemp" = "temp1" Action.c(5): Notify: Parameter Substitution: parameter "paramtemp" = "temp1" Action.c(5): Notify: Parameter Substitution: parameter "paramtemp" = "temp1" Action.c(5): Notify: Parameter Substitution: parameter "paramtemp" = "temp1" Action.c(5): Notify: Parameter Substitution: parameter "paramtemp" = "temp1" Action.c(7): Notify: Parameter Substitution: parameter "paramtemp" = "temp1"

  。。。。。。

  从回放日志中可以看出,这里的读取方式很符合Once的字面理解,它只对参数读取一次,由于是顺序读取,所以它就只读取一个第一行数据。关于Once的读取方式是我们通常容易犯错的地方,就以为选择Once可能就是每个参数只读取一次,导致最后可能就只插入一条数据进去进入到库中。

  接下来我们需要了解的就是Select next row中其他两种方式,分别为Random和Unique,具体如下:

Random:表示随机读取方式

· Random+Each iteration,跟顺序读取的结果唯一不同的就是这里是随机读取,取值是每次迭代取值

· Random+Each occurrence,随机取值更新方式

· Random+Once,随机取一行数据,然后重复迭代读取这一行数据

Unique:主要是强调取值的唯一性,如果到最后没有该值了,LR提供了其他解决方案,如图所示:

  此处的下拉列表中提供了三种方式,具体如下:

· About Vuser,当取值次数超过参数的行数时,忽略脚本的运行

· Continue in a cyclic manner,取值超过时,启用循环扫描,扫描那些还未被使用的数据进行使用

· Continue with last value,重复读取最后一行数据

  所以关于Unique的唯一性取值方式还是需要值得,而且通常也用得比较多,特别是对于一些数据库表有唯一性约束的字段,必须要配合此项设置方能顺利执行。

  其实,在参数设置方式中,关于数据行的读取顺序基本上都比较直接明了,唯独在结合取值方式上就容易引起一些混乱,特别是Each iteration和Each occurrence这两种方式,前者是基于Run-Logic的迭代循环取值的,而Each occurrence是基于每一次取新值的,当然在通常情况下,这两者其实是有共性的,如果一个脚本中只有一个参数,且只读取一次参数的话,设置这两种方式的结果是相同的,可以将脚本缩减如下,回放之后就可发现结果是一样的,但提前是配合顺序和随机两种方式,如果配合唯一性,那结果就另当别论。缩减后的脚本如下:

Action() { lr_eval_string("{paramtemp}"); return 0; }

  性能测试的第一步就是要创建出符合实际应用的测试脚本,而脚本的调试和优化却是脚本创建过程中最为重要的,如何合理运用参数化功能,对于最后的场景运行和监控都是至关重要的,如果理解不当,将会浪费大量的时间去分析,既误导开发人员,也误导自己的测试结果分析。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2015-03-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 架构驿站 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档