参数化的使用场景,例如:
1)多个请求都是同一个ip地址,若服务器地址更换了,则脚本需要更改每个请求的ip
2)注册账号,不允许账号重复;想批量注册用户时
3)模拟多个用户登录,需要用到不同用户信息登录时
4)上一个请求的输出结果用于下一个请求的参数传入,例如登录获取到的token信息,用于提交账单请求的参数调用
在Jmeter中,通过 ${变量名} 来获取参数值
1.从一个用户登录的接口获取登录后的token值,取值后用于后续接口调用
2.获取用户浏览后的cookies信息,需要用到HTTP Cookie 管理器来为同一线程组提供通用的cookies信息
Jmeter中通过${}形式来取参数值
当取值为变量,${变量名}
当取值为函数,${_函数名(参数1,参数2,参数3)}
json中和parameter中的取值方法相同
在获取接口信息的时候,注意查看传输的头信息中的Content-Type
Content-Type:application/json,使用Body Data上传json格式的参数
Content-Type:application/x-www-form-urlencoded,使用Parameter上传参数
一、通过添加前置处理器(用户参数)
在你需要设置参数的请求下添加用户参数
点击“添加变量”
在添加的变量列中输入你需要添加的变量名称,用户_1、输入你变量对应的变量值,如果有多个参数,可以再次点击添加变量,输入你的其他变量名称与变量值,如果想一个变量对应多个变量值,就点击添加用户
记住:如果想每次迭代变量值也更新,注意勾选“每次迭代更新一次”
注意:循环次数为n,相当于一个线程请求n次,把第一个线程请求n次过后在实现第二个线程;
当循环次数为2,每次迭代更新一次时:用户1请求两次,再用户2请求两次
在需要参数化的请求上,获取参数化变量
运行后可查看察看结果树(请求)
二、CSV Data Set Config获取参数值
提前收集用户真实手机号及昵称,存放在本地txt或者CSV文件(CSV文件默认逗号隔开)
点击线程组添加配置元件→ CSV Data Set Config:
说明:
Filename:F:\jmeter\csvtest.dat文件名,保存参数化数据的文件目录,可选择相对或者绝对路径(建议填写相对路径,避免脚本迁移时需要修改路径);
File encoding:UTF-8,F:\jmeter\csvtest.dat文件的编码格式,在保存时保存编码格式为UTF-8即可;参数文件的编码格式。可以不填。
Variable Names(comma-delimited):对对应参数文件每列的变量名,也是你要引用到请求中的参数变量名。这里第一列是手机号、第二列是昵称。变量名可以自定义。
igonre first line(only used if Variable Names is not empty):当 CSV 文件中首行设置了变量名时,该项设为 true,此时每次请求读取文件时会自动忽略首行,直接读取第二行的数据。若首行未设置,则选择False
Delimitet:参数文件分隔符,用来在“Variable Names”中分隔参数,与参数文件中的分隔符保持一致即可;所以注意txt文档中每行多个参数用英文逗号分隔
Allow quote data:是否允许引用数据,默认false,选项选为“true”的时候对全角字符的处理出现乱码 ;
Recycle on EOF: 设置为True后,允许重头循环取值;为False,当读取文件到结尾时,停止读取文件
Stop Thread EOF: 当Recycle on EOF为false并且Stop Thread EOF 为true,则读完csv文件中的记录后,停止运行,线程数及执行次数无效。当Recycle on EOF为True时,此项无意义;
Sharing Mode:共享模式。即参数文件的作用域;All threads:所有线程,所有线程循环取值,线程1取第一行,线程2取下一行;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)默认值:如果没有匹配到可以指定一个默认值
https://blog.csdn.net/qq_22219911/article/details/80408813
https://www.cnblogs.com/Zhang-engineer/p/9232295.html
https://blog.csdn.net/zx_water/article/details/78920646