场景:在进行jmeter的接口自动化测试脚本的编写中需要使用参数化,现将接触到的几种参数化方法整理如下:
第一种:
使用“用户自定义变量”的配置元件来进行变量定义
填入变量、值、和备注就可以在后续的接口中使用该变量,使用格式统一都为:${变量名称}
第二种:
使用配置元件“CSV Data Set Config”进行自定义传参数
1.CSV Data Set Config 读取的文件不仅仅限于 csv 文件,其可以读取文本文件(txt)
2.allow quoted data:双引号相关,例:如果参数中需包含逗号或者引号等,该项可以选择True
3.Recycle on EOF: 设置为True后,允许循环取值
4.Stop Thread EOF: 当Recycle on EOF为false并且Stop Thread EOF 为true,则读完csv文件中的记录后,停止运行,线程数及执行次数无效
5.Sharing Mode:共享模式:
- All threads:所有线程,所有线程循环取值,线程1取第一行,线程二取下一行。
- Current thread group:当前线程组,各个线程组分别循环取值。
- Current thread:当前线程,该测试计划内的所有线程都取第一行。
第三种:正则表达式,获取上一个接口的返回值传给下一个接口,下面的接口就可以使用前面接口定义的变量了,达到了传参的目的
正则有很多的参数,下面详细说一下:
名称:可以随意设置,最好有业务意义
注释:可以随意设置,可以为空
apply to:应用范围,四个选项
main sample and sub-samples:匹配范围包括当前取样器并覆盖至子取样器(简单来说,就是在同一个控制器下的所有的父节点和子节点的接口都可以使用该变量,一般情况我都会使用这个适用范围)
main sample only:匹配范围是当前父取样器
sub-samples only:仅匹配子取样器
jmeter variable:支持对jmeter变量值进行匹配
要检查的响应字段:针对响应数据的不同部分进行匹配,共七个选项
主体:响应数据的主体部分,排除header部分;http协议返回请求的主体部分就是body
等等。。。
引用名称:匹配出来的信息通过该名称访问,例如${引用名称}
正则表达式:一般使用(.+?)这种格式来进行提取,?则是我们想要提取的信息,一定要注意括号外面的格式,务必严格按照提取的格式来写,注意返回值是否有引号扩起来,网上有一个在线工具可以检测该正则表达式是否写正确“正则表达式在线测试”
模板:$1$,指第一个模板,以此类推
匹配数字:
0-——随机取值
-1-——取所有值,可以配合for Each Controller一起来遍历
1、2、3-——取对应的第几个值(例如:如果该正则匹配出来了多个值,多个rulesid,但是我们只想用第二个rulesid,这个地方的匹配数字就写成2,下面的接口就会只使用第二个rulesid)
默认值:如果没有匹配到可以指定一个默认值
第四种:
使用JDBC的配置元件去链接我们的数据库,连上了之后,通过查询语句,查询出我们需要的值,然后传给后面的接口使用
配置元件名称:JDBC connection configuration(使用前提,需要下载一个jar包 mysql-connector-java-5.1.41-bin.jar 放在jmeter安装地址的lib目录下,重启jmeter就可以使用了)
步骤二:
添加配置原件
步骤三:添加samples:JDBC request
注意:步骤二和步骤三中的variable name必须得保持一致,注意,注意