记录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; 

        } 

    } 

    } 

 

这边断言使用的是后置处理器的beanshell,当然断言也可以连接数据库进行数据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> 

 

  • 代码中 

  • <target 
<deLete 
< / delete > 
target>

是每次执行为build.xml后生成的测试报告html文件里会出现重复的数据。所以要在生成报告之前清楚一下以前的文件 

 

  • 把上面的build.xml文件放到某个文件夹下后,就可以开始配置Jenkins了。在Jenkins新建一个自由风格的项目,设置保存构建次数最大个数,因为是接口巡检,比较频繁,这样可以减少磁盘压力。 

项 目 名 称 
Jmeter 
IRawHTMLliiE 
± 耷 旧 蚋 构 達 
Strategy 
Log Rotation 
保 掃 构 達 的 天 
保 捋 构 津 的 大 个 
加 转 崆 , 构 津 记 录 将 存 此 天 
如 蔗 崆 , 最 參 目 的 记 录 俣 存

 

 

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

  • o 
Build after other projects are built 
4.1 Build periodically 
would next run at 2017 6 1 
11 30 IS CST. 
o 
Spread load evenly by using 'H/30 
rather than '*130 • 
Would last have run at 2017 6 1 
11 OO IS CST; 
Poll SCM
  • 构建步骤,使用Ant进行构建。使用Ant的前提必须先下载ant后解压至磁盘,添加环境变量,在Jenkins的系统设置里设置Ant等步骤略过。 

  • Execute Windows batch command 
Execute shell 
Invoke Ant 
Invoke top-level Maven targets 
pagers]
  • 点击后设置运行build.xml文件的路径 

  • Invoke Ant 
Ant Version 
Targets 
Build File 
Properties 
Java Options 
ant
  • 下一步构建后操作添加Publish HTML reports插件,该插件用来展示Jmeter生成的测试报告结果的html文件 

  • Aggregate downstream test results 
Archive the artifacts 
Build other projects 
Publish HTML reports 
Publish dunittest result report 
Publish davadoc 
Publish Performance test result report 
Record fingerprints offiles to track usage 
-mail Notification 
Editable Email Notification 
s] 
n.html 
Repot title 
HTML Report 
Keep past HTML repots
  • 设置Publish HTML reports的html文件展示路径以及文件名称等设置 

  • Publish HTML reports 
HTML directory to archive 
results 
Index page[s] 
TestRep01t.html 
Repot title 
HTML Report 
Keep past HTML repots
  • 项目构建后,我们想要如果测试接口有错误的话(不管是断言逻辑错误还是服务器错误因素),就让他自动发送预警邮件,邮件里包含了所有的接口测试详情,错误信息。这个时候就用到了Editable Email Notification邮件扩展插件。但是现在有这样一种情况,在项目构建的过程中,不管jmx脚本文件中的接口是逻辑错误或者是服务器等其他因素造成的接口报错,邮件插件是根据Jenkins的构建错误后,才会发送定义好的报告。而Jmeter的脚本里的接口不管如何的报错,是都不会引起Jenkins构建错误的。也就是说项目构建除了特殊因素之外会一直构建成功,那么也就达不到我们想要的只在接口巡检发生错误的情况下才发送预警邮件的需求。 

  • 这个时候我们就要借助一些外在的因素,人为的让Jenkins在构建项目后,出现构建失败的情况。 

  • 重新建立一个新的自由风格的项目,该项目的构建触发器选择为依赖其他项目构建完成后才开始构建 

  • 4.1 Build after other projects are built 
Projects to watch 
Jmeter 
O 
O 
o 
Build periodically 
o 
Poll SCM 
Trigger only if build IS stable 
Trigger even if the build IS unstable 
Trigger even if the build falls
  • 下一步设置构建方式,选择用windows命令进行构建。 

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

  • Execute Wndows batch command 
result 
echo
  • 配置完命令后,在添加Editable Email Notification邮件扩展插件,来进行自定义邮件内容格式设置 

  • Aggregate downstream test results 
Archive the artifacts 
Build other projects 
Publish HTML reports 
Publish dunittest result report 
Publish Javadoc 
Publish Performance test result report 
Record fingerprints offiles to track usage 
-mail Notification 
Editable Email Notification
  • 在设置该插件之前必须先把Jenkins的系统设置里的基础邮件配置完成。下图扩展邮件设置。设置邮件内容类型Content Type为HTML格式的。在Default Content里面,可以把测试报告嵌入到邮件里。 

  • Editable Email Notification 
Disable Extended Email Publisher 
Project Recipient List 
Project Reply-To List 
Content Type 
Default Subject 
Default Content 
Allows the user to disable the publisher, while maintaining the settings 
SOEFAULT RECIPIENTS 
Comma-separated listofemail address that should receive notifications for this project 
SOEFAULT REPLYTO 
Comma-separated listofemail address thatshould be in the Reply-To header for this project 
HTML (text/html) 
- # S8UlLO NUMBER 
<br/><hr/> 
S8UlLO STATUS' 
${FILE

  

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

  • Jenkins 
0 
admin 》 注 徜 
Jenkins 
. 0 新 建 
上 次 成 功 
上 次 尖 
上 次 持 续 时 
W 
任 务 历 史 
sendRep01t 
5 days 23 
一 # 17 
083 
系 统 管 理 
分 49 秒 
7 月 7days-#33 
7 月 7days-#35 
My Views 
4 月 1 5 days 一 # 11 
4 月 1 5 days 一 # 1 3 
Credentials 
月 分 有 月 
-#28 
025 
构 津 队 列 
Jmeter 
一 # 105 
5 days 22 
列 中 没 有 构 津 任 务 
master 
9 月 24days-#12 
9 月 26days-#1 
ChromeNodeComputer ( 未 在 
靄 RSS 
FirefoxNodeComputer ( 未 在 
appiumnodel ( 未 在
  • 如果报告里的接口出现错误的话,最终会根据邮件扩展插件的配置发送预警邮件 

  • Load Test Results 
Date report: 2017/06/01 14:00 
Summary 
* Samples 
Pages 
URL 
Failure Detail 
Response 
500 - OK 
Designed for use with JMeter and Ant. 
Failures 
Thread 
1-1 
Success Rate 
Average Time 
270 ms 
Success Rate 
0.00% 
Min Time 
270 ms 
0.00% 
# Samples 
Failures 
Average Time 
270 ms 
Details for Page 
Iteration 
270 
Min Time 
270 ms 
Bytes 
41 g 
Max Time 
270 ms 
Max Time 
270 ms 
Success 
false 
Time (milliseconds) 
Failure Message

至于邮件里的html文件内容中文乱码问题,现在还没有找到好的解决办法。。。。 

posted @ 2017-11-28 11:09  春田花花同学会  阅读(112)  评论(0编辑  收藏  举报