在使用jmeter做接口测试时,一整个jmx测试计划中,存在多个线程,多个接口的测试

但是接口可以分类,比如业务接口、查询接口、更新接口等

考虑自动化接口测试一般都是一次性的,有完整的闭环链路,一般步骤应该如下,当然还有可能会复杂点,比如涉及接口参数格式的转换、请求header的生成等:

配置测试环境 -> 造测试数据 -> 清理数据库测试数据 -> 调用接口测试 -> 数据库查询结果数据(断言) -> 清理数据库测试数据 ->还原测试环境->生成测试报告->发送测试邮件

那么,每次都要造测试数据,跑完又得删掉,是不是很麻烦

为了偷懒~hahh

我想到可以把业务接口的返回数据中一些重要的字段存储下来,当成查询接口的入参去使用,

一般业务接口的自动化接口测试用例就很完善了,

这样查询接口既可以极大的覆盖所有情况,也可以进一步验证业务接口的调用是否正确,一举两得

当然,jmeter本身是有数学函数,可以跨线程设置全局变量,只要正则取出来接口返回值配置成全局变量,理论上是可以在其他线程中调用的

但是,如果多个线程的返回都要记录,这样就会有很多全局,因此为了能够更灵活,我自己写了java方法,当做jar包使用beanshell调用

我的场景是多个业务接口,有充值、缴费、退费等接口,交易成功均会返回订单号,

然后对应我有根据订单号查询业务信息的接口,也就是说我业务接口自动化测试的接口返回的订单号当做我查询接口的入参去使用。

首先,我们需要在jmeter中引用自己的jar包

抓取接口返回,存入txt文件的beanshell代码如下:

import writeFile.*;
System.out.println("******写入文件*************");
String filePath = "D:/apache-jmeter-3.2/work_txt/order_no.txt";
String content = vars.get("orderNo_pay_gua"); //此处的变量是从sample接口返回中,正则表达式取样获取的变量名,根据实际情况修改。
AppendFile.appendFile(filePath,content);

在一整个测试执行完后,当然每次都需要清空我们的txt文件,beanshell清空代码如下

import writeFile.*;
System.out.println("******清除文件*************");
String filePath = "D:/apache-jmeter-3.2/work_txt/order_no.txt";
AppendFile.clearFile(filePath);

附上jar包源代码

import java.io.File;
import java.io.FileWriter;
import java.io.IOException; public class AppendFile {
//将content写入到指定文件fileName中
public static void appendFile(String fileName, String content) throws IOException{
FileWriter writer = null;
try { writer = new FileWriter(fileName, true);
content = content + "\n";
writer.write(content);
} catch(IOException e){
e.printStackTrace();
}finally{
if (writer != null){
writer.close();
}
}
}
//fileName中的内容清空
public static void clearFile(String fileName) throws IOException{
FileWriter writer = null;
try{ writer = new FileWriter(fileName);
writer.write("");
} catch(IOException e){
e.printStackTrace();
}finally{
if (writer != null){
writer.close();
}
}
}
}

jar包的下载地址

链接:https://pan.baidu.com/s/1mmDa1yXKHNE9phfklHL8fQ
提取码:1xe6

最新文章

  1. JSP页面静态化
  2. 向Web开发人员推荐12款优秀的 Twitter Bootstrap 组件和工具
  3. 杂乱无章之Oracle(二)
  4. The top 100 papers Nature explores the most-cited research of all time.
  5. easy ui 学习笔记,不断整理中............
  6. JVM最多支持多少个线程?
  7. Items divided
  8. 解决:在微信中访问app下载链接提示“已停止访问该网页”
  9. (转载)linux 常用命令
  10. php网站多语言
  11. [转载]DOMContentLoaded与interactive
  12. [LintCode] 395. Coins in a Line 2_Medium tag: Dynamic Programming, 博弈
  13. C语言键盘按键无阻塞侦测:kbhit()
  14. Shell记录-Shell脚本基础(一)
  15. [na][QoS]cisco3560限速配置案例-收集于网工泡泡
  16. 创建一个新的进程os.fork
  17. WEB前端面试题 分别使用2个、3个、5个DIV画出一个大的红十字
  18. 【洛谷P3807】(模板)卢卡斯定理
  19. html5--5-7 绘制圆/弧
  20. LightOJ——1012Guilty Prince(连通块并查集)

热门文章

  1. D7下FastMM的使用
  2. MAC和PHY的区别(网线上传递的是模拟信号)
  3. 事务 ( 进程 ID 60) 与另一个进程被死锁在锁资源上,并且已被选作死锁牺牲品
  4. apache虚拟主机防止php网页木马vhost.conf文件配置
  5. ABP之Setting
  6. yii框架widget和注册asset的例子
  7. JS的第一天,精彩内容
  8. PATB 1032 挖掘机技术哪家强(20)
  9. 自己挖的坑跪着也要填完---mapper配置文件和java源文件在同一包下
  10. [网络协议]UDP实现的可靠协议