记录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前写的,日期新点的都是好几年前了,多次尝试,还是报出莫名其妙的错. 哎,忧伤. 翻阅各种资料 ...
随机推荐
- [Selenium]通过Selenium实现在当前浏览器窗口点击一个图标之后,弹出另外一个窗口,关闭这个窗口,再回到原来的窗口进行操作
public void clickReportIcon(){ String initialWindowHandle = driver.getWindowHandle(); //保存原始的浏览器窗口 p ...
- Eclipse中设置编码的方法
Eclipse中设置编码的方式如果要使插件开发应用能有更好的国际化支持,能够最大程度的支持中文输出,则最好使 Java文件使用UTF-8编码.然而,Eclipse工作空间(workspace)的缺省字 ...
- hadoop报JAVA_HOME is not set暂时解决办法
直接在etc/hadoop/hadoop-env.sh中 export JAVA_HOME=XXX
- 关于jquery中attr和prop的用法
在项目开发中,遇到过这个情况,做一个全选的功能,通过点击一个checkbox实现下面的checkbox全选,用attr设置的checked属性,只可以生效一次,再次点击就不起作用了,但确实触发了事件, ...
- About "self"
Class method can't refer derectly to instance variables. Within the body of a class method, self re ...
- mysql优化----大数据下的分页,延迟关联,索引与排序的关系,重复索引与冗余索引,索引碎片与维护
理想的索引,高效的索引建立考虑: :查询频繁度(哪几个字段经常查询就加上索引) :区分度要高 :索引长度要小 : 索引尽量能覆盖常用查询字段(如果把所有的列都加上索引,那么索引就会变得很大) : 索引 ...
- Codeforces Round #326 (Div. 2)
B. Duff in Love time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...
- POJ2914 Minimum Cut —— 最小割
题目链接:http://poj.org/problem?id=2914 Minimum Cut Time Limit: 10000MS Memory Limit: 65536K Total Sub ...
- CentOS7 安装和配置Tomcat
1.官网下载Tomcat的压缩包 https://tomcat.apache.org/download-70.cgi 2.使用Xftp5把下载的压缩包上传到 /usr/soft (soft文件夹自己新 ...
- oracle 删除用户命令和部分表空间操作
删除用户 drop user user_name cascade; 建立表空间 CREATE TABLESPACE data01DATAFILE '/oracle/oradata/db/DATA01. ...