性能测试--Jmeter随机生成//随机选取/csv读取关键字

Posted Wilson

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了性能测试--Jmeter随机生成//随机选取/csv读取关键字相关的知识,希望对你有一定的参考价值。

Jmeter随机生成/随机选取/csv读取关键字

一、随机生成关键字

随机生成关键字,需要组件:随机变量配置元件(Random Variable)  该组件的作用是生成字符+随机数字格式的字符串,并保存在变量中,以便后续使用  下面几种格式的字符串都是可以通过该组件来生成的

  • 01-selenium
  • selenium-01
  • se001lenium
  • 2017

1、步骤详情:

"""
步骤一:选择Web Test Plan模版
1、点击templates按钮
2、选择Building a Web Test Plan
3、最后点击create,完成创建。

步骤二:修改参数
1、修改测试计划名称为:Random Variable(随机生成关键字演示)
2、修改线程组线程数为:1,ramp-up period:1, 循环次数:1。
3、修改HTTP Request Defaults的web服务器名称修改为cn.bing.com
4、将HTTP请求中的http请求方法修改为L:get,路径修改成:/search,然后将断言注释
5、删除Page Returing 404节点

步骤三:随机变量配置元件
1、在测试计划上点右键,选择添加 -> Random Variable,将新添加的随机变量配置元件拖拽到最上面
2、在该配置原件中Variable Name设置为number,  Output Format设置0000,Minimum Value: 2010,Maximum Value: 2020

步骤四:运行
1、新增事务控制器,将http请求都挪至事务控制器下
2、将http请求取样器的名称改为:search date${number}, 同请求一起发送参数中,q设置为${number},并勾选编码checkbox
3、点击运行按钮(快捷键ctrl+r)
"""

2、效果图:

 

二、随机选取关键字

场景:随机让每个请求从:python类、python开发、python函数、pythonsocket、这些关键字中随机选择1个作为搜索的关键字呢?这种随机选择内容然后进行测试的场景在性能测试中是比较常见的,因为越随机越能模拟用户的真实行为,另外一些随机内容也有助于绕过服务器可能存在的缓存机制,从而形成更均匀更真实的压力

1、步骤详情:

"""
步骤一:选择Web Test Plan模版
1、点击templates按钮
2、选择Building a Web Test Plan
3、最后点击create,完成创建。

步骤二:修改参数
1、修改测试计划名称为:Random Variable(随机生成关键字演示)
2、修改线程组线程数为:1,ramp-up period:1, 循环次数:1。
3、修改HTTP Request Defaults的web服务器名称修改为cn.bing.com
4、将HTTP请求中的http请求方法修改为L:get,路径修改成:/search,然后将断言注释
5、删除Page Returing 404节点

步骤三:添加用户定义变量配置元件
1、在测试计划上点右键,选择添加 -> 用户定义变量,将新添加的配置元件拖拽到最上面
2、在该配置原件中通过key-value的方式定义变量:如key1:爬虫,key2:函数,key3:类


步骤四:运行
1、新增事务控制器,将http请求都挪至事务控制器下
2、将http请求取样器的名称改为:search python${__V(key${__Random(1, 6)})}, 同请求一起发送参数中,q设置为python${__V(key${__Random(1, 6)})},并勾选编码checkbox,或者将http请求取样器的名称改为:search  python${__RandomFromMultipleVars(key1|key2|key3|key4|key5|key6)}, 同请求一起发送参数中,q设置为python${__RandomFromMultipleVars(key1|key2|key3|key4|key5|key6)},并勾选编码checkbox
3、点击运行按钮(快捷键ctrl+r)
"""

2、效果图:

3、PS:

"""
函数${__V(key${__Random(1, 6)})}解释:

1、${__Random(1, 6)}:随机生成1-6之间的整数
2、key${__Random(1, 6)}:随机生成key1, key2, key3 ....key6中的任意1个字符串
3、${__V(key${__Random(1, 3)})}对形如key1的字符串求值。也就是不把key1当成字符串来看,而是把key1当作是1个变量,并获取这个变量的值。key1的值是我们在用户自定义变量中定义过的,也就是将刚刚从用户定义的变量值取出来
4、python${__V(key${__Random(1, 3)})}就是随机组合生成:python类、python函数、python基础中的任意一个字符串




函数${__RandomFromMultipleVars(key1|key2|key3|key4|key5|key6)}解释:

1、${__RandomFromMultipleVars(key1|key2|key3|key4|key5|key6)}:这个函数用法比上面的简单,直接从key1,key2....key6中,任意取一个key的值出来
2、python${__RandomFromMultipleVars(key1|key2|key3|key4|key5|key6)}就是随机组合生成:python类、python函数、python基础中的任意一个字符串
"""

  

 

三、csv读取关键字

由于随机数的生成的时候会耗cpu和内存,当脚本并发很大的时候,这种损耗是值得关注的,所以这个时候变量的获取从csv文件中读取更适合,实现这个读取csv的配置元件叫做:CSV Data Set Config,下面是CSV Data Set Config的常用配置项:

  • Filename(文件名): 支持相对和绝对路径。相对路径是以脚本保存的路径为当前的相对路径的
  • Variable Name(变量名): 有多少列数据我们就设置多少个变量,以逗号分隔。如果这一项为空,jemter会去解析csv文件的header,也就是说,如果你的csv文件是有表头的,那么你可以不设置变量名,jmeter会自动将表头的名称解析成变量名
  • Allow quoted data?: 如果你的csv文件的内容里包含了分隔符,默认的分隔符是逗号,那么把这项勾选一下,用双引号将值括起来就可以了
  • Sharing mode: 这个比较难理解,我们可以简单的认为这个选项就是配置jmeter怎么打开csv文件的
  1. All threads: 所有的虚拟用户都使用同一个csv文件
  2. Current thread group: 每个线程组使用一个csv文件
  3. Current thread: 每个线程(虚拟用户)使用一个csv文件
  4. Identifier: 自定义

 

1、新建一个keyword.csv文件,里面存放如下关键字:

python  os,python sys
python random,python socket

2、步骤详情:

"""
步骤一:选择Web Test Plan模版
1、点击templates按钮
2、选择Building a Web Test Plan
3、最后点击create,完成创建。
 
步骤二:修改参数
1、修改测试计划名称为:Random Variable(随机生成关键字演示)
2、修改线程组线程数为:1,ramp-up period:1, 循环次数:2。
3、修改HTTP Request Defaults的web服务器名称修改为cn.bing.com
4、将HTTP请求中的http请求方法修改为L:get,路径修改成:/search,然后将断言注释
5、删除Page Returing 404节点
 
步骤三:添加CSV Data Set Config配置元件
1、在测试计划上点右键,选择添加 ->  CSV Data Set Config,将新添加的 CSV Data Set Config配置元件拖拽到最上面
2、在该配置原件中在Fliename输入框中输入创建的keyword.csv文件路径,Variable Names输入框中添加两个值(变量名): keyword1,keyword2
 
 
步骤四:运行
1、新增事务控制器,将http请求都挪至事务控制器下
2、将http请求取样器1的名称改为:search ${keyword1}, 同请求一起发送参数中,q设置为${keyword1},并勾选编码checkbox,将http请求取样器2的名称改为:search ${keyword2}, 同请求一起发送参数中,q设置为${keyword2},并勾选编码checkbox
3、点击运行按钮(快捷键ctrl+r)
"""

3、效果图:

4、执行顺序

将线程组的循环次数改为1,执行脚本,会发现取值是第一行的csv数据

python  os	   python sys

将线程组的循环次数改为2,执行脚本,会发现取值是第一行和第二行的csv数据

python  os	python sys
python random	python socket 

将线程组的循环次数改为3,执行脚本

python  os	python sys
python random	python socket 
python  os	python sys

这里就能很容易的看出,每次循环时jmeter会读一行csv文件的内容了。另外由于在CSV Data Set Config中默认选择了Recycle on EOF,当jemter读到文件结束的时候,jmeter会自动回到第1行再去读,这就是为什么循环3次的时候,第三次搜索的内容跟第一次是一样的了

 

以上是关于性能测试--Jmeter随机生成//随机选取/csv读取关键字的主要内容,如果未能解决你的问题,请参考以下文章

jmeter用户自定义变量的实际使用

jmeter四大随机数:${__RandomString(,,)}随机字符串

java中的随机数生成了JMeter测试计划

JMETER接口测试之随机函数参数化

性能测试四:jmeter进阶之逻辑控制器

jmeter生成随机数当前时间UUID