记录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前写的,日期新点的都是好几年前了,多次尝试,还是报出莫名其妙的错. 哎,忧伤. 翻阅各种资料 ...
随机推荐
- centos笔记-安装特定版本的mysql
centos6的yum默认安装的mysql是5.1版, 如果要安装5.6.16 版,有三个办法 1.yum方式, 这个方式的好处是通过yum安装卸载都很方便,坏处是版本无法详细制定,比如官方版本yum ...
- Docker and Go: why did we decide to write Docker in Go?
Docker and Go: why did we decide to write Docker in Go? | Hacker News https://news.ycombinator.com/i ...
- JDK and JRE File Structure JAVA_HOME HotSpot优化技术
https://docs.oracle.com/javase/8/docs/technotes/tools/windows/jdkfiles.html Java Platform, Standard ...
- Java,多个线程对同一个数据源的访问
当多个线程对同一个数据源进行访问时,应对线程同步或加锁.为何?举个简单的例子:有一个共享的数据源dataSource,其值为0.有两个线程,Thread1和Thread2.Thread1的任务是将da ...
- UIProgress控件的属性和方法
进度条控件是IOS开发中一个简单的系统控件,使用总结如下: 初始化一个进度条: - (instancetype)initWithProgressViewStyle:(UIProgressViewSty ...
- WinDbg调试高内存的.Net进程Dump
WinDbg的学习路径,艰难曲折,多次研究进展不多,今日有所进展,记录下来. 微软官方帮助文档非常全面:https://msdn.microsoft.com/zh-cn/library/windows ...
- 多态、抽象类、接口、区别(java基础知识九)
1.多态的概述以及代码体现 * A:多态概述 * 事物存在的多种形态 * B:多态前提 * a:要有继承关系. * 一个类是父类,一个类是子类 * b:要有方法重写. * c:要有父类引用指向子类对象 ...
- linux初级学习笔记九:linux I/O管理,重定向及管道!(视频序号:04_3)
本节学习的命令:tr,tee,wc 本节学习的技能: 计算机的组成 I/O管理及重定向 管道的使用 知识点九:管理及IO重定向(4_3) 计算机组成: 运算器.控制器: CPU 存储器:RAM ...
- 关于python代码的性能
在python中性能测试是一个很难应付的任务,因为它在反复地优化,也许版本和版本之间差别很大.python中的一个主要的原则是,首先为了简单和可读性去编写代码,在程序运行后,并证明了确实有必要考虑性能 ...
- 纯CSS画WP8界面
我的手机是诺基亚920,13年4月份买的.工作之余,就想用css做一下WP8的界面效果,如上图所示.不做不知道,一做还挺难的.尤其是画那个QQ 的企鹅图标,太难画了.怎么画都不像. <!doct ...