Jmeter脚本参数化和正则匹配
我们在做接口测试过程中,往往会遇到以下几种情况
- 每次发送请求,都需要更改参数值为未使用的参数值,比如手机号注册、动态时间等
- 上一个接口的请求体参数用于下一个接口的请求体参数
- 上一个接口的响应体参数用于下一个接口的请求体参数,比如:sessionId、token
- 上一个接口的响应体参数用于下一个接口的url接口地址中
- 上一个接口的响应头参数用于下一个接口的请求体参数,比如:token
- ......
针对以上种种情况,我们都可以通过参数化和正则提取的方式来解决
一、参数化
举例演示,提供一个注册和登录的接口,请求体需要手机号和密码进行注册登录,并且注册过的账号再次注册会提示已注册,因为不管是未注册还是已注册的手机号去注册接口都会调用成功,所以我会在注册接口上添加一个断言
注册接口:

登录接口:

断言:


我们再次注册时,就会断言失败

1.用户定义的变量
上面的示例看到,每次去调用接口都要手动修改手机号码,并且注册和登录接口都要同步修改,这样操作相当繁琐,针对这个问题我们使用用户定义的变量的工具进行优化
在线程组上:右键—>添加—>配置元件—>用户定义的变量

我们把注册和登录的手机号和密码都提取出来放到这里

定义了之后,我们需要调用该参数,调用方式是在对应的取样器里,使用${key}的格式替换取样器请求体里的值,这样我们就可以每次只修改一次就可以在所有的接口上通用了

虽然在此基础上已经得到了相应的优化,我们能不能做到每次运行的时候都不用去修改用户定义的变量里面的值呢?答案是可以的,这时候我们要使用到函数助手,构造相应的随机函数

对于函数的各种用法,这里不做说明,可以通过函数助手的帮助去查看各个函数的使用方法

我们通过函数助手来构造一个生成随机手机号的方法来替换用户定义的变量的值

2.CSV数据文件设置
该方法也是参数化的一种场景,我们可以提前使用csv文件或者其它文本文件(txt、log、xml、json...)构造大量数据,然后再读取文件里面的内容引用到对应的接口当中去,这里要注意的是在国内csv我们使用excel编辑器保存后遇到中文会出现乱码的情况,因此需要进行转码后才能正常使用!
在线程组上:右键—>添加—>配置元件—>CSV 数据文件设置

我们先构造测试数据

然后配置CSV数据文件设置:

此时我们可以直接替换接口参数的值为该变量名称,但是不可以替换用户定义的变量的值,会引用不到

执行结果如下:

我们如果设置并发量为5,则会依次读取每一行数据


3.用户参数
在用户定义的变量中使用随机生成手机号的方式执行,它的执行原理是在整个线程组执行会话之前创建一次后,执行过程中的所有线程都会去使用这个值,并不是每个线程组使用时都会随机生成不一样的值,所以在并发测试中,遇到这种情况就不行了,因此我们可以用户参数的工具来使得每个线程组调用的时候都能随机生成一个随机数
在线程组上:右键—>添加—>前置处理器—>用户参数

我们可以将上面用户定义的变量中由函数助手生成的函数拿到用即可

我们将接口参数化替换

设置并发为10,查看结果:


二、正则提取
上面我们处理的是随机数,这里我们则要通过一些方法将下个接口要使用的参数用上个接口的请求体、响应头或者响应体中提取出来,以此来处理接口依赖的问题,因为暂时没有好的实例,这里只讲使用方法
1.JSON提取器
在指定的接口取样器上:右键—添加—后置处理器—JSON提取器

我们在查看结果树里面将JSON Path Tester调出来,可以进行编写表达式进行测试验证表达式是否正确,注意该提取器只适用于接口的json响应体

JSON提取器的表达式语法格式为:$.key的格式

如果响应体遇到嵌套列表的形式,如:
{"domain":
[
{"id": "sdfhhsdfafvgg"},
{"name": "Tom"}
]
}
如果要提取name的值,表达式为:$.domain[1].name
{
"tenant": "admin",
"domain": [
{"id": "sdfhhsdfafvgg", "name": "Tom"},
{"id": "234gdgdh45h", "name": "Jerry"}
]
}
如果要提取所有name的值,表达式为:$..name 返回结果为一个列表
我们将正确的表达式填入到JSON提取器的配置当中,后面的接口就可以通过${变量名称}的方式调用该参数


2.正则表达式提取器
在指定的接口取样器上:右键—添加—后置处理器—正则表达式提取器

正则表达式的格式:左边界(.*?)右边界 以code为例:

我们执行一次查看提取结果:

更多关于正则表达式的语句请跳转到此博客地址:https://www.cnblogs.com/xiaogongjin/p/11986493.html
Jmeter脚本参数化和正则匹配的更多相关文章
- JMeter脚本参数化和断言设置( CSV Data Set Config )
用Badboy录制了Jmeter的脚本,用Jmeter打开后形成了原始的脚本.但是在实际应用中,为了增强脚本的多样性,就要使脚本参数化.这里我以登录为例,参数化用户账号与用户密码. 图1 :原始脚本 ...
- Jmeter(二十一)_脚本参数化与内存溢出的解决方案
这一篇文章随便说一下JMETER的脚本参数化 1:Parameters的两种参数化方法 1.1:函数助手参数化 首先准备你的参数数据.我在bin/data中新建了一个dat文件,记事本另存为修改编码为 ...
- JMeter脚本增强之参数化
JMeter测试脚本录制或者编写,在Web应用和App上的操作方式可能有一点点区别(其实也差不多,哈哈),但是当脚本录制好了之后,对测试脚本的强化,包括参数化.关联.文本检查.集合点设置,甚至再往后的 ...
- 【转】JMeter脚本的参数化
JMeter脚本的参数化 当你利用Badboy将你的测试脚本录制完毕后,接下来就是脚本的调试工作了.在我看来,调试应该包括有以下几个方面:1.根据测试场景对脚本进行必要的修改:2.脚本参数化:3.添加 ...
- JMeter脚本录制
1.1. 使用第三方录制方式或代理录制方式(建议) 第三方采用:http://www.badboy.com.au/ 通过badboy来录制,录制后另存为jmx格式即可. 操作步骤: a.打开badb ...
- badboy脚本参数化和检查点
一.badboy脚本参数化 文本参数化 方式一:直接在Variablesl ist添加参数化变量和值,然后在Script里面找到对应需要参数化的内容-属性,进行替换,参数化名需要用${XX}引用: 方 ...
- 利用HTTP代理录制Jmeter脚本
1 測试计划中加入一个线程组1 2在"工作台"-非測试元件-加入"HTTP代理server" port: 代理server的port,默认8080,可自行改动, ...
- php中的正则函数主要有三个-正则匹配,正则替换
php中变量的声明? 由于php声明变量的时候, 不支持使用 var关键字, 又不能直接写一个变量名字, 孤零零的放在那里, 所以, 在php中声明变量的方式, 同时也是给变量初始化的形式, 即: & ...
- Aho-Corasick算法、多模正则匹配、Snort入门学习
希望解决的问题 . 在一些高流量.高IO的WAF中,是如何对规则库(POST.GET)中的字符串进行多正则匹配的,是单条轮询执行,还是多模式并发执行 . Snort是怎么组织.匹配高达上千条的正则规则 ...
随机推荐
- R 语言学习笔记(3)—— 基础绘图
R 中图形的概念 在 R 中图,就像 photoshop 中的图层一样,每一个元素都是层层向上延展构建的,最终形成了我们视觉上所形成的平面图形.这些元素包含了常见的图形的标题(title).坐标轴(a ...
- C语言l-2019秋作业01
2.1 你对软件工程专业或者计算机科学与技术专业了解是怎样? 在进入大学之前,我认为软件工程就是学习开发软件的,后来,从网上搜索了有关它的定义,软件工程是一门研究用工程化方法构建和维护软件的学科,它以 ...
- 十一次作业——LL(1)文法的判断,递归下降分析程序
1. 文法 G(S): (1)S -> AB (2)A ->Da|ε (3)B -> cC (4)C -> aADC |ε (5)D -> b|ε 验证文法 G(S)是不 ...
- luogu P2783 有机化学之神偶尔会做作弊 |Tarjan+LCA
题目背景 XS中学化学竞赛组教练是一个酷爱炉石的人. 有一天他一边搓炉石一边监考,而你作为一个信息竞赛的大神也来凑热闹. 然而你的化竞基友却向你求助了. "第1354题怎么做"&l ...
- LightOj-1027 A Dangerous Maze(期望)
You are in a maze; seeing n doors in front of you in beginning. You can choose any door you like. Th ...
- 将项目部署到github的方法
GitHub是一个面向开源及私有软件项目的托管平台,因为只支持git 作为唯一的版本库格式进行托管,故名GitHub. GitHub于2008年4月10日正式上线,除了Git代码仓库托管及基本的 We ...
- MySQL InnoDB 存储引擎原理浅析
注:本文主要基于MySQL 5.6以后版本编写,多数知识来着书籍<MySQL技术内幕++InnoDB存储引擎>,本文章仅记录个人认为比较重要的部分,有兴趣的可以花点时间读原书. 一.MyS ...
- JS内置对象-Array之splice-删插替
splice-删除 var arr = [1, 2, 3, 4, 5, 6]; //删除 var delArr = arr.splice(1, 2) console.log(arr); // => ...
- eclipse Outline里图标的含义
source: http://www.cnblogs.com/qdwyg2013/p/6489019.html 先说颜色: 绿色:public 黄色:protected 蓝色:no modifier ...
- NodeJS3-1基础API----Path(路径)
path 和路径有关的操作 Path(路径) path 模块提供用于处理文件路径和目录路径的实用工具. 它可以使用以下方式访问 const path = require('path'); 1. p ...