一、简介
本文章主要是介绍接口自动化持续集成环境搭建以及测试实例,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目录下会生成测试报告
其中有一个失败是用例就是这么设置的场景。
好了,到这为止我们接口测试的部分已经完成,关于测试报告的分析,在后面我会做进一步的分析和总结,谢谢!