记录Jmeter集成Jenkins运行Ant做接口监听
最近在鼓捣Jmeter的接口测试,把他集成到了Jenkins上做自动化接口监听。把操作记录下来。
- 首先就是进行接口测试的编写。打开Jmeter。主要是把接口的测试逻辑和断言处理调通后就OK了,接口程序的IP和端口做成参数化。随时可以根据测试环境和开发环境以及生产环境间进行切换。请求参数里根据测试用例来设置接口所需的参数值



接口的后置BeanShell Assertion断言处理器
import java.util.regex.*; //断言列表
String[] assertList =new String[]{("\"list\""+":\\[(\\{.*?\\})+?\\]"),"\"ID\":\"pl_findGroup\"","\"action\":\"post\"","\"teacherId\":\"tea_951_20368\"","\"serviceId\":\"pl_findGroup\"","\"status\":\"1\""};
// 要验证的字符串
String response = prev.getResponseDataAsString();
// 编译正则表达式
Pattern pattern = Pattern.compile(assertList[0]);
// 忽略大小写的写法
// Pattern pat = Pattern.compile(regEx, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(response);
// 查找字符串中是否有匹配正则表达式的字符/字符串
boolean rs = matcher.find();
if(!rs){
FailureMessage = "断言失败:"+assertList[0];
Failure = true;
prev.setResponseCode("500");
log.info("Fail======================================");
}else{
//循环断言
for(int i =1;i<assertList.length;i++){
if(!response.contains(assertList[i])){
FailureMessage = "断言失败:"+assertList[i];
Failure = true;
prev.setResponseCode("500");
log.info("Fail======================================");
return;
}
}
}
这边断言使用的是后置处理器的bean shell,当然断言也可以连接数据库进行数据diff,如果有必要的话。
- 最终接口调试完成后Jmeter会生成一个.jmx的测试脚本。下一步就是通过Ant的build.xml文件来调用Jmeter测试脚本和生成测试报告。
<?xml version="1.0" encoding="UTF-8"?>
<project name="JmeterTest" default="all" basedir=".">
<tstamp>
<format property="time" pattern="yyyy/MM/dd HH:mm" />
</tstamp> <!--Jmeter主目录-->
<property name="jmeter.home" value="D:/ProgramFiles/apache-jmeter-3.1" /> <!--存放Jmeter生成的报告文件的文件夹-->
<property name="jmeter.result.dir" value="D:/ProgramFiles/jenkinsworkspace/workspace/Jmeter/results" /> <!--Jmeter文件名-->
<property name="ReportName" value="TestReport" /> <!--jtl文件-->
<property name="jmeter.result.jtlName" value="${jmeter.result.dir}/${ReportName}.jtl" />
<!--html报告文件-->
<property name="jmeter.result.htmlName" value="${jmeter.result.dir}/${ReportName}.html" /> <!--汇总标签-->
<target name="all">
<antcall target="clean" />
<antcall target="test" />
<antcall target="report" />
</target> <!--每次清除Jmeter生成的结果目录-->
<target name="clean">
<delete includeemptydirs="true">
<fileset dir="${jmeter.result.dir}" includes="**/*"/>
</delete>
</target> <!--运行Jmeter脚本文件-->
<target name="test">
<taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" />
<jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">
<testplans dir="D:/jmeter/script" includes="*.jmx" />
<property name="jmeter.save.saveservice.output_format" value="xml"/>
</jmeter>
</target> <path id="xslt.classpath">
<fileset dir="${jmeter.home}/lib" includes="xalan*.jar"/>
<fileset dir="${jmeter.home}/lib" includes="serializer*.jar"/>
</path> <!--生成测试报告-->
<target name="report">
<xslt classpathref="xslt.classpath" force="true" in="${jmeter.result.jtlName}" out="${jmeter.result.htmlName}" style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl" >
<param name="dateReport" expression="${time}"/>
</xslt>
<!--复制报告所需图标-->
<copy todir="${jmeter.result.dir}">
<fileset dir="${jmeter.home}/extras">
<include name="collapse.png" />
<include name="expand.png" />
</fileset>
</copy>
</target> </project>
- 代码中
是每次执行为build.xml后生成的测试报告html文件里会出现重复的数据。所以要在生成报告之前清楚一下以前的文件 - 把上面的build.xml文件放到某个文件夹下后,就可以开始配置Jenkins了。在Jenkins新建一个自由风格的项目,设置保存构建次数最大个数,因为是接口巡检,比较频繁,这样可以减少磁盘压力。

- 设置构建触发器,这里没30分钟自动构建一次

- 构建步骤,使用Ant进行构建。使用Ant的前提必须先下载ant后解压至磁盘,添加环境变量,在Jenkins的系统设置里设置Ant等步骤略过。

- 点击后设置运行build.xml文件的路径

- 下一步构建后操作添加Publish HTML reports插件,该插件用来展示Jmeter生成的测试报告结果的html文件

- 设置Publish HTML reports的html文件展示路径以及文件名称等设置

- 项目构建后,我们想要如果测试接口有错误的话(不管是断言逻辑错误还是服务器错误因素),就让他自动发送预警邮件,邮件里包含了所有的接口测试详情,错误信息。这个时候就用到了Editable Email Notification邮件扩展插件。但是现在有这样一种情况,在项目构建的过程中,不管jmx脚本文件中的接口是逻辑错误或者是服务器等其他因素造成的接口报错,邮件插件是根据Jenkins的构建错误后,才会发送定义好的报告。而Jmeter的脚本里的接口不管如何的报错,是都不会引起Jenkins构建错误的。也就是说项目构建除了特殊因素之外会一直构建成功,那么也就达不到我们想要的只在接口巡检发生错误的情况下才发送预警邮件的需求。
- 这个时候我们就要借助一些外在的因素,人为的让Jenkins在构建项目后,出现构建失败的情况。
- 重新建立一个新的自由风格的项目,该项目的构建触发器选择为依赖其他项目构建完成后才开始构建

- 下一步设置构建方式,选择用windows命令进行构建。

- 逻辑就是在Jmeter项目构建后,会在某个目录下生成TestReport.html报告。我们通过windows命令findstr搜索html报告里面的特殊关键字,比如报告里面就有100.00%的成功率关键字,如果没有出现这个关键字,就证明被测接口有错误的,我们就让该项目构建失败。如果找到了,就略过。

- 配置完命令后,在添加Editable Email Notification邮件扩展插件,来进行自定义邮件内容格式设置

- 在设置该插件之前必须先把Jenkins的系统设置里的基础邮件配置完成。下图扩展邮件设置。设置邮件内容类型Content Type为HTML格式的。在Default Content里面,可以把测试报告嵌入到邮件里。

- 完成之后回到Jenkins首页,点击Jmeter项目的构建,构建成功后,会自动再次构建依赖项目,该项目构建会根据缩写doc命令来查找生成的测试报告里有没有发送邮件的关键字。

- 如果报告里的接口出现错误的话,最终会根据邮件扩展插件的配置发送预警邮件

至于邮件里的html文件内容中文乱码问题,现在还没有找到好的解决办法。。。。
记录Jmeter集成Jenkins运行Ant做接口监听的更多相关文章
- Oracle11g 创建数据库中问题处理(必须运行Netca以配置监听程序)
这两天学习<OCP/OCA认证考试指南>,要创建新的数据库,因为此前我的电脑上已经被折腾了好久的Mysql 和oracle10g ,所以可能导致很多环境都变了,创建数据库的过程中出现了一些 ...
- node多项目同时运行,nginx端口监听转发
在服务器端安装pm2 npm install npm2 -g --save 之后再项目目录下运行 pm2 start app.js 在查看进程,是否已经启动 pm2 list 多个项目,我们只要监听端 ...
- 【JMeter】获取JDBC响应做接口关联
1:从sql表中将需要取的数据查出来 2:我们需要把这个id为4451的数据从sql里面取出来,传到下一个sql里面,执行删除 3:写一个接口的传参有些不同,变成了var_id_1.var_id是之前 ...
- 使用HttpSessionListener接口监听Session的创建和失效
转自:http://uule.iteye.com/blog/824115 HttpSessionListener : Session创建事件发生在每次一个新的session创建的时候,类似地Sessi ...
- JavaWeb学习记录(二十七)——定时发送邮件ServletContextListener监听实现
public class EmailSendListener implements ServletContextListener{ @Override public void contextDe ...
- 记录下mainfest.json 原生标题的按钮监听
首先在mainfest.json中 plus下添加以下代码 "launchwebview": {"titleNView": {"backgroundc ...
- Android 使用 OnTouchListener 接口监听双击或多击事件
这里是使用 OnTouchListener 实现的监听双击 or 多击的监听器.通过 View.setOnTouchListener ,可以实现在任意 View 上监听双击事件. 网上有许多文章简单的 ...
- Spring boot集成Websocket,前端监听心跳实现
第一:引入jar 由于项目是springboot的项目所以我这边简单的应用了springboot自带的socket jar <dependency> <groupId>org. ...
- RecyclerView实现一个页面有多种item,每个item有多个view,并且可以让任意item的任意view自定义监听,通过接口方法进行触发操作
百度了很多贴子,看着大佬的博客,模仿尝试,最终都是以失败告终,api可能版本不一样, 毕竟博客大佬都是7~8前写的,日期新点的都是好几年前了,多次尝试,还是报出莫名其妙的错. 哎,忧伤. 翻阅各种资料 ...
随机推荐
- 【iOS系列】-自定义Modar动画
[iOS系列]-自定义Modar动画.md 我们需要做的最终的modar动画的效果是这样的, 就是点击cell,cell发生位移,慢慢的到第二个界面上的.为了做出这样的动画效果,我们需要以下的知识. ...
- poj3349(hash or violence)
Snowflake Snow Snowflakes Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 38600 Accep ...
- HDU 6109 数据分割 【并查集+set】 (2017"百度之星"程序设计大赛 - 初赛(A))
数据分割 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- IOS中UIAlertView(警告框)常用方法总结
一.初始化方法 - (instancetype)initWithTitle:(NSString *)title message:(NSString*)message delegate:(id /*&l ...
- js中一些常见写法的含义
1. 常见格式:(function() { /* code */ })(); 解释:包围函数(function(){})的第一对括号向脚本返回未命名的函数,随后一对空括号立即执行返回的未命名函数,括号 ...
- javascript 继承实现方法
1. [代码][JavaScript]代码 //1.对象冒充//说明:构造函数使用this关键字给所有属性和方法赋值(即采用类声明的构造函数方式).因为构造函数只是一个函数,所以可使Class ...
- html5--6-9 CSS选择器6--伪类选择器
html5--6-9 CSS选择器6--伪类选择器 实例 @charset="UTF-8"; /*:root{background: green}*/ /*li:first-chi ...
- Asp与Asp.Net
1.Asp是什么? ASP是动态服务器页面(Active Server Page)的英文缩写.是微软公司开发的代替CGI脚本程序的一种应用,它可以与数据库和其它程序进行交互,是一种简单.方便的编程工具 ...
- 书写优雅的shell脚本(插曲)- /proc/${pid}/status
Linux中/proc/[pid]/status详细说明 博客分类: OS Linux多线程 [root@localhost ~]# cat /proc/self/status Name: cat ...
- 「LuoguP1238」 走迷宫
Description 有一个m*n格的迷宫(表示有m行.n列),其中有可走的也有不可走的,如果用1表示可以走,0表示不可以走,文件读入这m*n个数据和起始点.结束点(起始点和结束点都是用两个数据来描 ...