JMeter接口自动化发包与示例
JMeter接口自动化发包与示例
近期需要完成对于接口的测试,于是了解并简单做了个测试示例,看了看这款江湖上声名远播的强大的软件-Jmeter靠不靠谱。
官网:https://jmeter.apache.org/index.html
1简介
- Apache-Jmeter是一个使用java语言编写且开源,可拓展性较强的测试框架,设计初期用于web应用的压力性能测试较多,但现在功能已经非常丰富,不仅是压力,而目前的接口自动化都可以使用该工具完成
- 本次需求只依据业务,简单设置定时任务,往指定的接口发送接口数据,对接口返回数据做assert断言判断结果,体验一下该软件与postman有何差异。
2结构
Jmeter左上角点击文件-新建,即生成一个测试计划,相当于一个project,并创建以下层级结构
聚合报告
查看该测试计划的执行结果报告,每个执行的接口都统计在这,如果是做压力测试的话,就可以得出很多次执行的一个接口的性能情况。

查看结果树
查看每个测试接口的执行情况,包括该接口实际发送的包以及接口的响应都可以在这看到。

Http信息头管理器
消息头信息可以在这里定义,没定义就是按照默认的头发包。

setUp线程组
该线程组在整个项目的自动化时,可以将部分鉴权接口、参数生成与配置等放入该模块,以便确保该模块优先执行。
线程组
前置预处理程序
这里我选择beanshell预处理程序,构造后面接口发的数据,可以看到脚本上边有个tips(scripts variable:ctx vars props prev sampler log),即Jmeter提示在编写脚本的时候可以使用ctx、vars等类去调用相应的API,这些值比如ctx的具体用法可到官网:http://jmeter.apache.org/api/org/apache/jmeter/threads/JMeterContext.html,常见的API:
- ctx - ( [JMeterContext ](http://jmeter.apache.org/api/org/apache/jmeter/threads/JMeterContext.html)) - gives access to the context
- vars - ( [JMeterVariables ](http://jmeter.apache.org/api/org/apache/jmeter/threads/JMeterVariables.html)) - gives read/write access to variables: vars.get(key); vars.put(key,val); vars.putObject("OBJ1",new Object()); vars.getObject("OBJ2");
- props - (JMeterProperties - class java.util.Properties) - e.g. props.get("START.HMS"); props.put("PROP1","1234");
- prev - ( [SampleResult ](http://jmeter.apache.org/api/org/apache/jmeter/samplers/SampleResult.html)) - gives access to the previous SampleResult (if any)
- sampler - (Sampler)- gives access to the current sampler
业务请求代码{单个/多个http请求/循环压测等}
后置预处理程序
//一般来说提取响应内容等打印出来
String statusCode = prev.getResponseCode();
log.info(statusCode);
tearDown线程组
该线程组将是最后处理的线程组,可以将清除测试数据等放在该模块内部执行。
3代码:
测试计划:增加用户定义变量如下:
host 192.168.3.10 port 50553 longConPort 60443 devNum 1 projectId 1 Token 1 beanshell预处理程序中处理需要往接口中带入的一些随机变量,这里需求是要依据主设备的MAC地址等信息,携带子设备的相关信息通过接口上报给服务器,于是需要在预处理脚本中新增易于维护的MAC地址信息,也便于后续压力测试的时候生成百千万个设备数据时候做改写。以下定义一台主设备,31台子设备的MAC地址代码如下:
/**
* 生成的device_mac为00-00-0X-00-00-00,其中X这里定义为了进程号。整个生成规则可自己依据需求定义
* 对应的25个连接中断的MAC地址也可自定义,client_mac为00-00-0X-00-00-01、00-00-0X-00-00-02……00-00-0X-00-00-25
*/ pre_mac = "";
//getThreadNum获取当前进程编号,进程号从0开始的,这里结果是1
thread_index = ctx.getThreadNum();
str_index = thread_index + "";
log.info("当前线程编号: " + str_index ); //最后生成六位字符串000001
n = 6 - str_index.length();
for (int i=0; i<n; i++) {
pre_mac += "0";
}
pre_mac += str_index; //正则,每隔两位数字就在后面插入一个“-”,使其符合mac地址的规范,最后pre_mac变成00-00-01,device_mac00-00-01-00-00-0X为mac地址一共12位,
pre_mac = pre_mac.replaceAll("(.{2})", "$1-");
device_mac = pre_mac + "00-00-00";
//将生成的值存入对象vars中,后续在脚本中都可以直接使用//vars.put("client_mac_"+i, client_mac_i)这个参数后面就可以使用${变量名}直接使用;
vars.put("device_mac", device_mac);
for (int i=1; i<10; i++) {
client_mac_i = pre_mac + "00-00-0" + i;
vars.put("client_mac_"+i, client_mac_i);
log.info(client_mac_i);
}
for (int i=10; i<31; i++) {
client_mac_i = pre_mac + "00-00-" + i;
vars.put("client_mac_"+i, client_mac_i);
log.info(client_mac_i);
}
//Token的定义规则,可以用函数生成,也可以在前面的参数中直接加上
deviceToken = "test" + str_index;
vars.put("deviceToken", deviceToken);
http请求格式
依据前面在测试计划中设定的值,在这个页面相应的位置写上引用即可(格式${变量名}),并依据接口文档定义,把需要发的包的数据编辑好附在body中并为该用例添加一个断言即完成一个用例的编写。


循环发送
如下图所示

4运行结果
经过上面处理后,下面可以启动测试计划,并观察执行的结果如下图:

5 小结
Jmeter做上述简单接口的测试上与postman相差无几,而Jmeter还有很多定时器、监听器等功能还未使用到,后面使用jmeter做一次完整的性能压力测试之后,也许才能真正体会到它的强大。
JMeter接口自动化发包与示例的更多相关文章
- Jenkins+Ant+Jmeter接口自动化集成测试实例
Jenkins+Ant+Jmeter接口自动化集成测试实例 一.Jenkins安装配置 1.安装配置JDK1.6+环境变量: 2.下载jenkins.war,放入C:\jenkins目录下,目录位置随 ...
- 第9期《jmeter接口自动化实战》零基础入门!
2019年 第9期<jmeter接口自动化实战>课程,12月6号开学! 上课方式:QQ群视频在线教学 本期上课时间:12月6号-1月18号,每周五.周六晚上20:00-22:00 报名费: ...
- jmeter接口自动化集成
接口自动化集成 一.jmeter基础学习 1.博客 :http://www.cnblogs.com/fnng/category/345478.html 2.博客 http://www.cnblo ...
- Jmeter接口自动化参数化 (转自软件测试部落)
测试场景: 有个查询城市(大概一百个 )天气预报的接口(需求参考第一课),需要根据不同的citycode,去查询对应城市的天气预报,这种接口该如何去测试呢? 分析需求: 不管是功能测试需求,还是接口测 ...
- Jmeter 接口自动化-脚本数据分离实例
一. 背景: 为了让大家更加的了解Jmeter,并且使用起来游刃有余.这篇我们主要讲一下,如何优雅的使用Jmeter一步步的实现接口自动化,完成脚本与数据分离,把可能对Jmeter脚本的维护转移到c ...
- jmeter接口自动化和性能学习目录
目录黑色代表未完成的,绿色代表已完成的文章.目录的作用的为了引导和总结自己的学习,也是为了更好的分享给大家. 一.接口自动化 jmeter解决登录token获取 jmeter五种提取器 之 正则表达 ...
- Jmeter接口自动化培训
课程前提 速成班,讲的不会非常深,每个人基础不一样,但是实现接口自动化没有问题,因为jmeter更多的用来做性能测试.当然有兴趣我们也可以穿插一点 课程基本大纲 接口基础概念 部署本地测试环境(使用d ...
- jmeter接口自动化-通过csv文件读取用例并执行测试
最近在公司测试中经常使用jmeter这个工具进行接口自动化,简单记录下~ 一.在csv文件中编写好用例 首先在csv文件首行填写相关参数(可根据具体情况而定)并编写测试用例.脚本可通过优先级参数控制执 ...
- jmeter接口自动化部署jenkins教程
首先,保证本地安装并部署了jenkins,jmeter,xslproc 我搭建的自动化测试框架是jmeter+jenkins+xslproc ---注意:原理是,jmeter自生成的报告jtl文件,通 ...
随机推荐
- 你会阅读appium官网文档吗
高效学习appium第一步,学会查看appium官方文档.如果能把appium文档都通读一遍,对学习appium大有益处. 而能做到通读appium官方文档的人,想必不是很多,刚开始学习appium的 ...
- FastAPI logger日志记录方案 loguru模块
实现方式: 采用 loguru 模块.跟flask直接挂载到app上有区别,当然也可以尝试去这样做. 但是 好像没有这个必要.要的就是个快速.整那些子虚乌有的东西完全木有意义. 1.首先是去项目git ...
- IDEA快捷键(未使用)
1.ctrl Ctrl + Y 删除光标所在行 或 删除选中的行 Ctrl + W 递进式选择代码块.可选中光标所在的单词或段落,连续按会在原有选中的基础上再扩展选中范围 Ctrl + E 显示最近打 ...
- vue项目中的element-ui地区级联选择器加详细地址push到对象中不显示的问题
想要实现级联选择器el-cascader和输入框el-input共同组成的详细地址,添加数据时弹出el-drawer嵌套el-form弹窗,然后在el-form添加数据提交后push到el-table ...
- PyCharm插件开发实践-PyGetterAndSetter
背景需求 在面向对象的设计中,典型如Java语言,为了控制对象属性的修改入口,我们常用的做法是把属性设置为private,然后通过getter和setter方法访问.修改该属性. 但是在Pthon语言 ...
- 题解 Children Trips
题目传送门 Description 给出一个大小为 \(n\) 的边权全为 \(1,2\) 的带权树,有 \(q\) 此查询,每次给出 \(u,v,p\) ,问 \(u\to v\) 每次可以最多走边 ...
- res目录下的结构
目录 res目录下的结构 drawable开头的文件夹 mipmap开头的文件夹 values开头的文件夹 layout文件夹 使用res目录下的资源 res目录下的结构 如果你展开res目录看一下, ...
- 提升使用Linux效率的小操作
提升使用Linux效率的小操作 保存更新? 本文记录了个人在使用Linux时觉得好用的一些快捷方式/功能: 为那种知道了能提高效率,但是的不知道也并没有影响的操作. 历史命令 该操作用于快速查看已使用 ...
- Beta-技术规格说明书
项目 内容 这个作业属于哪个课程 2021春季软件工程(罗杰 任健) 这个作业的要求在哪里 团队项目-计划-功能规格说明书 一.架构与技术栈 1.整体架构 本项目的整体架构如上图所示.下面我们将对涉及 ...
- 关于qmake的install
在pro的构建系统中可以设置INSTALLS变量,在make命令之后,执行make install命令触发,将想要的资源拷贝到相应的目录,参考qwt的构建体系,在qwt.pro末尾有这么几句 qwts ...