JMeter接口测试系列-关联参数
这里主要记录一下A接口的返回结果经过md5加密之后作为另外B接口的参数,这个问题困扰了很久,找了不少资料,现在把解决方法记录如下:
环境
①JMeter 3.0
②前置条件:将fastjson.jar包置于..\apache-jmeter-3.2\lib\下,并将该jar包添加到测试计划的Library中;否则会报:Typed variable declaration : Class: JSONObject not found in namespace的错误;
fastjson.jar包下载地址:https://github.com/alibaba/fastjson
③处理器:Beanshell处理器,import com.alibaba.fastjson.JSON;(一般习惯使用到什么import什么,如:import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONArray;这里需要用到[import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONArray;import com.alibaba.fastjson.JSONObject;])
实现目标:
A接口的响应结果result ,经过MD5(result+a+B+c+D)=ptoken,加密结果ptoken作为B接口的一个参数。
如何实现?
- 在A接口之后首先添加使用BeanShell PostProcessor(后置处理器),使用后置处理器获取响应结果result的值;
- 在B接口中添加BeanShellSampler,导入md5加密的jar包,然后将返回的result+customerCode_timestamp+ytoken(这里说明一下customerCode、timestamp、ytoken已经在测试计划用户定义的变量添加)经过加密之后作为B接口的一个参数
下面是根据上面的思路完成的实际操作
这里是测试计划-用户定义的变量如图

- 在A接口中添加后置处理器截图所示

响应结果的字符串形式如图

这里需要提取result的值G0444260257
代码如下:
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
String json = prev.getResponseDataAsString(); //获取登录请求的响应信息
log.info("json="+json);
//利用上一步获取的字符串形式的JSON,结合Java处理Json的方法,将需要的键值提取出来;
JSONObject jso = JSON.parseObject(json);
String res = jso.getString("result");
log.info("res="+res);
//保存提取的结果为res
vars.put("res",res);
然后添加一个BeanShell Sampler 计算md5加密之后,将值作为B接口的参数
BeanShell Sampler的代码如下
import com.test.mymd5;
//undefined customerCode
String customerCode = vars.get("customerCode");
//定义时间戳
String timestamp = vars.get("timestamp");
//定义机构中的serial_number_md5,临时会话验证
String ytoken = vars.get("ytoken");
String rest = vars.get("res");
//定义英文下划线_ underscores
String underscores = vars.get("underscores");
log.info("underscores="+underscores);
log.info("customerCode="+customerCode);
log.info("timestamp="+timestamp);
log.info("rest="+rest);
log.info("ytoken="+ytoken);
String ptoken = mymd5.md5(rest+customerCode+underscores+timestamp+ytoken);
vars.put("ptoken",ptoken);
log.info("ptoken="+ptoken);
System.out.println(ptoken);
System.out.println(rest);
那么接下来就是接口B参数的使用,这个可以使用${参数名}来直接使用该参数,如图

这样接口参数都配置完成,如何增加断言该接口是成功的呢?
这里使用的是jmeter中的响应断言,配置如图所示

这里断言的是接口响应结果code为0。
关联参数我们上面使用的是BeanShell PostProcessor获取接口的响应结果。其实,我们也可以使用正则表达式或是jp@gc-JSON Path Extractor提取接口的响应结果作为下一个接口的参数,如图配置的正则表达式和jp@gc-JSON Path Extractor提取:


而使用jp@gc-JSON Path Assertion断言响应结果是否正确(和响应断言功能一致,也path extractor配合使用),配置如图

但是这里提取的响应结果是正确的,使用md5加密的时候,显示该参数是null,所以这里留了一个尾巴,暂时还没好的解决方法?
参考
博客:https://www.cnblogs.com/xpp142857/p/7374281.html
JMeter接口测试系列-关联参数的更多相关文章
- JMeter接口测试系列:Jmeter+jenkins+ant 的自动化构建
在JMeter接口测试不断深入的过程中,发现可以和jenkins和ant一起搭配进行自动化的构建.下面是jmeter自动化构建的整理笔记. 准备环境 需要本机上确定安装了jmeter.ant和jenk ...
- Jmeter接口测试系列之测试用例编写和调用
在使用Jmeter进行接口测试时,首先需要根据接口定义,编写响应的接口测试用例,在编写接口测试用例时,我们根据测试的侧重点不同,使用不同的方式编译测试用例. 一种是:整个请求参数作为一个变量,进行测试 ...
- Jmeter接口测试系列之参数化方法
至于参数化的用途,我这里就不多说了,本文主要介绍最全.最强大的参数化方法,对参数化有一个彻底的认识,这里提供了多种参数化方法 1.jmeter参数化之用户变量 在测试计划里面添加一个用户自定义的变 ...
- Jmeter接口测试系列之判断测试结果
在使用jmeter进行接口测试时,我们需要根据测试用例判断其测试结果是否一致,判断其执行是否成功. 在jmeter中也可以使用响应断言去判断,但是有时我们需要根据不同的用例,其判断条件不同,所以这里我 ...
- Jmeter接口测试系列之测试用例变量参数化处理
在进行接口测试时,一组完整的接口测试用例,存在后一个测试用例使用前一个用例的请求结果中的数据,此时就需要参数化测试用例中值.直接使用变量调用会存在问题,此时就需要用到beanshell去改变. 举例说 ...
- Jmeter接口测试系列之保存断言结果到文件
在执行完接口测试用例后,我们需要将失败的用例结果统一保存到文件中,可以使用“断言结果”组件,并定制输出内容. 1.配置断言结果组件输出 (1.在文件名中配置需要保存的文件路径和文件名: (2.勾选仅日 ...
- Jmeter接口测试(十)测试报告
这是jmeter接口测试系列的第十篇总结,也是最后一篇,之后会把接口集成的一些内容发一个系列,分享给大家,供大家一起学习进步. 批量执行完接口测试之后,我们需要查看测试报告,在之前单个接口调试我们是通 ...
- Jmeter接口测试实例
此文章作为工作中用到的jmeter接口测试相关内容简述,方便日后查阅参考,如有理解描述有误之处,欢迎指出. 首先Jmeter环境准备网上有很多教程,在此不多做赘述: 1.接口简述 接口可理解为从客户端 ...
- Jmeter 接口测试知识梳理——应用基础篇
Jmeter 使用也有很长时间了,但是一直没有做一下知识梳理,近期会对公司同事做一下这方面的培训,借此机会,把使用过程中应用到的知识,或是遇到的问题,整理出来,方便大家学习! Jmeter 接口测试知 ...
随机推荐
- 【Salvation】——关卡功能&数据库基础实现
写在前面:项目的关卡功能和数据库基础实现是小组其他成员实现的部分,这里作为学习总结.关卡功能块使用C#语言编写脚本,在Unity3D游戏引擎的环境中实现,数据库功能块使用PHP作为服务端获取MySQL ...
- 利用PowerShell 得到 进程总共占用的内存
$task = tasklist /nh /fo csv $total = 0 for($i=0; $i -lt $task.count; $i++) { $one = $task[ $i ].Spl ...
- bash脚本条件测试总结
一.if语句的结构 分为以下三种:单分支.双分支.多分支 单分支if语句 if CONDITION is True: then 分支 fi 双分支if语句 if CONDITION is True: ...
- Windows 配置 allure report 环境
1:配置Java环境(运行allure 需要) 2:安装powershell 3:安装scoop方法 :运行 powershell 输入 : iex (new-object net.webclient ...
- 玩转 HTML5 下 WebGL 的 3D 模型交并补
建设性的立体几何具有许多实际用途,它用于需要简单几何对象的情况下,或者数学精度很重要的地方,几乎所有的工程 CAD 软件包都使用 CSG(可以用于表示刀具切削,以及零件必须配合在一起的特征).CSG ...
- 利用Python循环(包括while&for)各种打印九九乘法表
一.for循环打印九九乘法表 #注意:由于缩进在浏览器不好控制,请大家见谅,后续会有图片传入. 1.1 左下角 for i in range(1,10): for j in range(1,i+1): ...
- Python 解LeetCode:671. Second Minimum Node In a Binary Tree
题目在这里,要求一个二叉树的倒数第二个小的值.二叉树的特点是父节点的值会小于子节点的值,父节点要么没有子节点,要不左右孩子节点都有. 分析一下,根据定义,跟节点的值肯定是二叉树中最小的值,剩下的只需要 ...
- Java--Socket通信(双向)
新建两个工程,一个客户端,一个服务端,先启动服务端再启动客户端两个工程的读写操作线程类基本上完全相同 服务端: import java.io.BufferedReader; import java.i ...
- android wear开发之:创建可穿戴设备应用 - Creating Wearable Apps
注:本文内容来自:https://developer.android.com/training/wearables/apps/index.html 翻译水平有限,如有疏漏,欢迎批评指教. 译:山人 创 ...
- MVC 页面静态化
最近工作需要,实现页面静态化,以前在ASP时代,都是FSO自己手动生成的. 新时代,MVC了,当然也要新技术,网上一搜,找到一种解决方案,是基于MVC3的,实现原理是通过mvc提供的过滤器扩展点实现页 ...