代码改变世界

JDK+Jmeter+Ant+Jenkins接口自动化持续集成环境搭建与运行

2018-11-27 07:45  这个博客有点用  阅读(674)  评论(0编辑  收藏  举报

一、简介

本文章主要是介绍接口自动化持续集成环境搭建以及测试实例,Apache JMeter是Apache组织开发的基于Java的接口和性能测试工具。

Apache Jmeter是一个100%的纯java桌面应用,主要是针对web的压力和性能测试,但后来扩展到其他测试领域。Jmeter可以用于测试FTP、HTTP、RPC、JUNIT、JMS、LDAP、WebService(Soap) Request以及Mail和JDBC(数据库压力测试)。
 

二、集成环境搭建

1、安装JDK:

由于jmeter是100%的纯java编写的,需要有java的运行环境,所以我们需要安装jdk,官网链接:https://www.oracle.com/technetwork/java/javase/downloads/index.html版本要求:最好是1.8以上

1.1、下载jdk:

 

1.2、安装jdk:Java SE 8u191 

1.3、配置jdk环境变量

我的电脑”>鼠标右键菜单>"属性">"高级系统设置">"环境变量"。

a、在系统变量里新建“JAVA_HOME”变量,变量值为:D:\jdk1(注:具体路径根据自己实际安装路径填写)   
         其为jdk的安装路径       
b、新建“classpath”变量,变量值为:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;%CATALINA_HOME%\lib;
         其为java加载类路径,只有类在classpath中java命令才能识别,在路径前加了个"."表示当前路径
c、在path变量里添加变量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin(注:变量值之间用“;”隔开

 1.4、在命令窗口输入Java -version,可以查看到jdk版本说明安装正确。

 

2、安装Jmeter:

 2.1、下载Jmeter:官网地址:http://jmeter.apache.org/download_jmeter.cgi

解压就可以用,前提条件是必须是已经安装jdk,

 

2.2、插件下载:官网地址:http://jmeter-plugins.org/downloads/all/

插件下载后解压:找到JMeterPlugins-Extras.jar,把JMeterPlugins-Extras.jar放到apache-jmeter-2.12\lib\ext目录。

2.3、配置环境变量

具体操作位置同刚jdk一样,把jdk的java_home相应的换成jmeter的地址即可。

我的电脑”>鼠标右键菜单>"属性">"高级系统设置">"环境变量";

JMETER_HOME=D:\Auto_Test\apache-jmeter-5.0(注:具体路径根据自己实际安装路径填写)   

CLASSPATH=%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar; %JMETER_HOME%\lib\jorphan.jar;  

PATH=%JMETER_HOME%\bin

2.4、启动jmeter 在命令窗口输入jmeter或者在 apache-jmeter-2.12\bin\jmeter.bat启动 (打开后的命令窗口不能关闭,否则jmeter的GUI也不能使用)

两种方式都能够成功启动说明jmeter安装成功

 

3、安装Ant:

Ant是一个代码构建工具,在这里主要作用是为了构建我们写的jmeter脚本,然后再后面安装Jenkins上可以持续集成监控到我们的脚本情况。

3.1、下载Ant,官网下载地址:https://ant.apache.org/bindownload.cgi

 

 3.2、配置Ant环境变量

具体操作位置同刚jdk一样,把jdk的java_home相应的换成jmeter的地址即可。

ANT_HOME=D:\Auto_Test\apache-ant-1.9.13(注:具体路径根据自己实际安装路径填写)   

PATH=%ANT_HOME%\bin

CLASSPATH=%ANT_HOME%\lib

3.3、验证Ant是否安装成功

在命令窗口输入ant,出现下面提示说明安装成功,还可以通过ant -version查看ant版本。

 

4、安装Jenkins

jenkins是基于java开发一个持续集成工具,在这是用于我们监控我们跑jmeter写的接口测试用例。

4.1、安装jenkins,官网地址:https://jenkins.io/download/

 

4.2、配置jenkins

通过在浏览器访问localhost:8080/jenkins既可以进入到jenkins页面(后面加了jenkins后访问不不了,是bug,直接去掉jenkins,如果你的8080端口没有被占用的话)

 
 
初始的管理员密码,jenkins自动生成的,根据上面红色的路径找到密码,拷到下面的输入框中。
然后弹出安装jenkins插件的页面,如果出现无法自动安装插件,查看是否有防火墙和网络,实在不行得通过离线方式进行安装,我这是在线自动安装的。
接下来是创建用户和密码。

 

 然后就可以创建任务了。

这个是我们百度云的安装包,有需要的朋友可以下载:

链接:https://pan.baidu.com/s/1MANCRvZg9BinUyso1DXCKA 
提取码:wqbo 

 

三、Python开发http接口(这个可以不关注)

一般公司接口测试,开发会提供明确的接口文档,包含接口地址、请求方式、入参、出参等以及各个返回值的对应的含义。

具体开发不做详细介绍哈,有兴趣的朋友可以一起探讨下。

 

四、Jmeter设计接口测试的脚本以及用例场景

1、打开jmeter,创建测试计划,在测试计划下面创建线程组,线程组本质就是并发用户数。

在这边简单介绍一个http接口用jmeter开发的脚本

在测试计划组件下,鼠标右键添加线程组

2、添加取样器,我们这篇文章主要介绍http请求,jmeter支持其他ftp、jdbc、tcp请求,都是类似的操作,后续会更新。

 

 

3、根据接口文档维护http取样器参数

 

4、判断请求结果是否正确,我们可以添加响应断言,

 

 5、为了能够很直观的查看到测试结果,我们可以添加监听器,其中可以添加查看结果树和聚合报告

 

 这样一个很简单的接口测试脚本就完成了,像我们这边做接口测试进行测试时是需要考虑接下来几个场景:

5、接口测试用例设计

a、功能测试:正常场景(通过性验证)、参数测试(参数组合)、异常场景(空)等

b、性能测试:响应时间、吞吐量、并发数等

c、安全测试:敏感信息、权限、数据加密、SQL注入等

 

6、一个完整的接口测试脚本

a、添加http头信息管理器,用于处理请求中存在中文的编码问题

b、添加用户自定义变量,相当于我们的全局变量,在整个测试计划中都可以使用

c、添加功能测试场景用例

d、添加性能测试场景

e、参数化不可变数据,为了模拟真实的用户场景,使数据不重复

g、添加后置处理器BeanShell PostProcessor,用于处理响应中存在中文的编码问题

h、添加监听器、(聚合报告、查看结果树)

整个测试计划结构如下:

 

五、连接ant和jmeter配置(注意点

 

(1)将 jmeter的extras目录中ant-jmeter-1.1.1.jar包拷贝至ant安装目录下的lib目录中,这一步操作使Ant运行时能够找到"org.programmerplanet.ant.taskdefs.jmeter.JMeterTask"这个类,从而成功触发JMeter脚本。

 

(2)修改Jmeter的bin目录下jmeter.properties文件的配置:jmeter.save.saveservice.output_format=xml,同时去掉前面的注释,这一步操作使Jmeter报告输出文件格式为xml。

(3)生成的测试报告可能会有三个指标显示NAN,那么复制jmeter的lib目录下的xalan-2.7.2.jar和serializer-2.7.2.jar copy到Ant的lib包里,重新生成就会成功!

(4)如果生成jmeter报告数据为空,是因为jmeter的extra目录中缺少jmeter-results-detail-report_21.xsl文件导致,下载拷贝即可。

 

 好了,所有的环境以及配置还有脚本都已经准备好了,接下来就是配置jenkins

 

六、build文件配置

ant工具主要是根据build.xml文件来执行,build.xml默认存放于jmeter下的extras文件下,我们可以对build.xml文件进行修改来指定测试脚本、测试结果存放路径等。

我的bulid.xml放在jmeter下的D:\Auto_Test\apache-ant-1.9.13目录下

我的bulid.xml文件如下所示,把相应的路径改成自己的的就可以运行。

<?xml version="1.0" encoding="UTF-8"?>

<project name="ant-jmeter-test" default="run" basedir=".">
    <tstamp>
        <format property="time" pattern="yyyyMMddhhmm" />
    </tstamp>

    <property environment="env"/>
    <property name="ReportName" value="TestReport" />
    <!-- 需要改成自己本地的 Jmeter 目录--> 
    <property name="jmeter.home" value="D:\Auto_Test\apache-jmeter-5.0" />
    <!-- jmeter生成jtl、html格式的结果报告的路径--> 
    <property name="jmeter.result.dir" value="${env.WORKSPACE}/results/${env.BUILD_ID}" />
    <!-- jmeter生成html格式的结果报告的路径-->
    <property name="jmeter.result.html.dir" value="${env.WORKSPACE}/results/${env.BUILD_ID}" />
    <!-- 生成的报告的前缀-->  
    <property name="ReportName" value="TestReport" />
    <property name="jmeter.result.jtlName" value="${jmeter.result.dir}/${ReportName}.jtl" />
    <property name="jmeter.result.htmlName" value="${jmeter.result.dir}/${ReportName}.html" />
    
    <target name="run">
        <echo message="start..."/>
        <antcall target="clean" />
        <antcall target="test" />
        <antcall target="report" />
    </target>
    
    <target name="clean">
        <mkdir dir="${env.WORKSPACE}/results/${env.BUILD_ID}" />
    </target>
    
<target name="test">
        <taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" />
        <jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">
            <!-- 声明要运行的脚本"*.jmx"指包含此目录下的所有jmeter脚本-->
            <testplans dir="D:\Auto_Test\apache-jmeter-5.0\demo" 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">
        <tstamp> <format property="report.datestamp" pattern="yyyy/MM/dd HH:mm" /></tstamp>
        <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="${report.datestamp}"/>
        </xslt>

        <!-- 因为上面生成报告的时候,不会将相关的图片也一起拷贝至目标目录,所以,需要手动拷贝 --> 
        <copy todir="${jmeter.result.html.dir}">
            <fileset dir="${jmeter.home}/extras">
                <include name="collapse.png"/>
                <include name="expand.png"/>
            </fileset>
        </copy>
    </target>

</project>

七、创建job构建脚本

1、创建配置如下:

2、构建

然后再D:\Auto_Test\jenkins-2.138.3\workspace\jobs\results目录下会生成测试报告

其中有一个失败是用例就是这么设置的场景。

好了,到这为止我们接口测试的部分已经完成,关于测试报告的分析,在后面我会做进一步的分析和总结,谢谢!

参考博客:https://www.cnblogs.com/puresoul/p/4737716.html