Jmeter随机生成/随机选取/csv读取关键字
一、随机生成关键字
随机生成关键字,需要组件:随机变量配置元件(Random Variable) 该组件的作用是生成字符+随机数字格式的字符串,并保存在变量中,以便后续使用 下面几种格式的字符串都是可以通过该组件来生成的
- 01-selenium
- selenium-01
- se001lenium
- 2017
1、步骤详情:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
"""
步骤一:选择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、步骤详情:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
"""
步骤一:选择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文件的
- All threads: 所有的虚拟用户都使用同一个csv文件
- Current thread group: 每个线程组使用一个csv文件
- Current thread: 每个线程(虚拟用户)使用一个csv文件
- Identifier: 自定义
1、新建一个keyword.csv文件,里面存放如下关键字:
python os,python sys
python random,python socket
|
2、步骤详情:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
"""
步骤一:选择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数据
将线程组的循环次数改为2,执行脚本,会发现取值是第一行和第二行的csv数据
1
2
|
python os python sys
python random python socket
|
将线程组的循环次数改为3,执行脚本
1
2
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次的时候,第三次搜索的内容跟第一次是一样的了