自动化测试与持续集成方案--Jmeter 测试接口及性能

来源:互联网 发布:02年世界杯黑哨 知乎 编辑:程序博客网 时间:2024/05/21 18:26

一、什么是接口测试?

  接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。
  接口测试适用于为其他系统提供服务的底层框架系统和中心服务系统,主要测试这些系统对外部提供的接口,验证其正确性和稳定性。接口测试同样适用于一个上层系统中的服务层接口,越往上层,其测试的难度越大。
  接口测试实施在多系统多平台的构架下,有着极为高效的成本收益比,接口测试天生为高复杂性的平台带来高效的缺陷监测和质量监督能力。平台越复杂,系统越庞大,接口测试的效果越明显。
  基于接口测试的重要性,以及它比较容易自动化的特性,通过持续集成的接口监控能够及时的发现项目中存在的问题,这对持续运营的项目来说,非常重要。

二、接口测试的流程

  1、 项目启动后,测试人员要尽早找到开发人员拿到接口测试文档
  2、 获取接口测试文档后,就可以进行接口用例的编写和调试
  3、 接口用例编写调试完成后,部署到持续集成的测试环境中,
  4、 设定脚本运行频率,告警方式等基本参数,进行接口的日常监控
  5、 每日进行接口脚本的维护更新,接口异常的处理

三、编写接口测试脚本

  大部分性能工具都可以用来进行接口测试,jmeter就是一个好用的性能测试工具,他也同样可以用来进行接口测试,jmeter比较适用于CGI、webservice、DB等类型的接口测试。下面以websevice api接口为例说明如何编写接口测试用例(本文侧重于接口测试平台的搭建,对于具体工具是使用只进行简单介绍,对于工具不了解的,可以自行百度):
以下是我弄的一个简单的脚本。


每个请求都加一个响应断言来判断是否达到期望。
如果用命令来执行,也很简单:
jmeter -n -t test.jmx -l test.jtl

四、接口持续集成

在这块卡了好久,主要是report展示。之前是不想再用其他工具(如:Ant, Maven ), 就想将jtl文件的报告展现出来,弄了很久没成功。最后还是向工具屈服,用的Ant来编译.
主要是配置build.xml
一个示例:

<span class="cp" style="color:#0880;"><?xml version="1.0" encoding="UTF-8"?></span><span class="nt" style="color:#0800;font-weight:bold"><project</span> <span class="na" style="color:#bb4444;">name=</span><span class="s" style="color:#bb4444;">"ant-jmeter-test"</span> <span class="na" style="color:#bb4444;">default=</span><span class="s" style="color:#bb4444;">"all"</span> <span class="na" style="color:#bb4444;">basedir=</span><span class="s" style="color:#bb4444;">"."</span><span class="nt" style="color:#0800;font-weight:bold">></span>    <span class="nt" style="color:#0800;font-weight:bold"><tstamp></span>        <span class="nt" style="color:#0800;font-weight:bold"><format</span> <span class="na" style="color:#bb4444;">property=</span><span class="s" style="color:#bb4444;">"time"</span> <span class="na" style="color:#bb4444;">pattern=</span><span class="s" style="color:#bb4444;">"yyyyMMddhhmm"</span> <span class="nt" style="color:#0800;font-weight:bold">/></span>    <span class="nt" style="color:#0800;font-weight:bold"></tstamp></span>    <span class="c" style="color:#0880;font-style:italic"><!-- 需要改成自己本地的 Jmeter 目录--></span>    <span class="nt" style="color:#0800;font-weight:bold"><property</span> <span class="na" style="color:#bb4444;">name=</span><span class="s" style="color:#bb4444;">"jmeter.home"</span> <span class="na" style="color:#bb4444;">value=</span><span class="s" style="color:#bb4444;">"F:\xxxxx\Jmeter"</span> <span class="nt" style="color:#0800;font-weight:bold">/></span>    <span class="c" style="color:#0880;font-style:italic"><!-- jmeter生成jtl格式的结果报告的路径--></span>    <span class="nt" style="color:#0800;font-weight:bold"><property</span> <span class="na" style="color:#bb4444;">name=</span><span class="s" style="color:#bb4444;">"jmeter.result.jtl.dir"</span> <span class="na" style="color:#bb4444;">value=</span><span class="s" style="color:#bb4444;">"F:\xxxxx\resultLog\jtl"</span> <span class="nt" style="color:#0800;font-weight:bold">/></span>    <span class="c" style="color:#0880;font-style:italic"><!-- jmeter生成html格式的结果报告的路径--></span>    <span class="nt" style="color:#0800;font-weight:bold"><property</span> <span class="na" style="color:#bb4444;">name=</span><span class="s" style="color:#bb4444;">"jmeter.result.html.dir"</span> <span class="na" style="color:#bb4444;">value=</span><span class="s" style="color:#bb4444;">"F:\xxxxx\resultLog\html"</span> <span class="nt" style="color:#0800;font-weight:bold">/></span>    <span class="c" style="color:#0880;font-style:italic"><!-- 生成的报告的前缀->    <property name="ReportName" value="TestReport" />    <property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${ReportName}${time}.jtl" />    <property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${ReportName}${time}.html" />    <target name="all">        <antcall target="test" />        <antcall target="report" />    </target>    <target name="test">        <taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" />        <jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">            <!-- 声明要运行的脚本。"*.jmx"指包含此目录下的所有jmeter脚本--></span>            <span class="nt" style="color:#0800;font-weight:bold"><testplans</span> <span class="na" style="color:#bb4444;">dir=</span><span class="s" style="color:#bb4444;">"D:\test_case_path"</span> <span class="na" style="color:#bb4444;">includes=</span><span class="s" style="color:#bb4444;">"*.jmx"</span> <span class="nt" style="color:#0800;font-weight:bold">/></span>        <span class="nt" style="color:#0800;font-weight:bold"></jmeter></span>    <span class="nt" style="color:#0800;font-weight:bold"></target></span>    <span class="nt" style="color:#0800;font-weight:bold"><target</span> <span class="na" style="color:#bb4444;">name=</span><span class="s" style="color:#bb4444;">"report"</span><span class="nt" style="color:#0800;font-weight:bold">></span>        <span class="nt" style="color:#0800;font-weight:bold"><xslt</span> <span class="na" style="color:#bb4444;">in=</span><span class="s" style="color:#bb4444;">"${jmeter.result.jtlName}"</span>              <span class="na" style="color:#bb4444;">out=</span><span class="s" style="color:#bb4444;">"${jmeter.result.htmlName}"</span>              <span class="na" style="color:#bb4444;">style=</span><span class="s" style="color:#bb4444;">"${jmeter.home}/extras/jmeter-results-detail-report_21.xsl"</span> <span class="nt" style="color:#0800;font-weight:bold">/></span>        <span class="c" style="color:#0880;font-style:italic"><!-- 因为上面生成报告的时候,不会将相关的图片也一起拷贝至目标目录,所以,需要手动拷贝 --></span>        <span class="nt" style="color:#0800;font-weight:bold"><copy</span> <span class="na" style="color:#bb4444;">todir=</span><span class="s" style="color:#bb4444;">"${jmeter.result.html.dir}"</span><span class="nt" style="color:#0800;font-weight:bold">></span>            <span class="nt" style="color:#0800;font-weight:bold"><fileset</span> <span class="na" style="color:#bb4444;">dir=</span><span class="s" style="color:#bb4444;">"${jmeter.home}/extras"</span><span class="nt" style="color:#0800;font-weight:bold">></span>                <span class="nt" style="color:#0800;font-weight:bold"><include</span> <span class="na" style="color:#bb4444;">name=</span><span class="s" style="color:#bb4444;">"collapse.png"</span> <span class="nt" style="color:#0800;font-weight:bold">/></span>                <span class="nt" style="color:#0800;font-weight:bold"><include</span> <span class="na" style="color:#bb4444;">name=</span><span class="s" style="color:#bb4444;">"expand.png"</span> <span class="nt" style="color:#0800;font-weight:bold">/></span>            <span class="nt" style="color:#0800;font-weight:bold"></fileset></span>        <span class="nt" style="color:#0800;font-weight:bold"></copy></span>    <span class="nt" style="color:#0800;font-weight:bold"></target></span><span class="nt" style="color:#0800;font-weight:bold"></project></span>

Jenkins 上安装 “Publish performance test result report” ,“Publish HTML reports” 的插件,配置一下。
运行。
结果如下:


如果加上一些并发,负载等,就是性能测试报告了。
性能报告的曲线展示还没弄出来,有空再看看。

补上性能测试报告:

之前一直出了个错:

Performance: Recording JMeter reports '**/*.jtl'Performance: no JMeter files matching '**/*.jtl' have been found. Has the report generated?. Setting Build to FAILUREBuild step 'Publish Performance test result report' changed build result to FAILUREFinished: FAILURE

导致结果出不来。后面在 Jmeter/bin 下将 jmeter.properties 中的:
jmeter.save.saveservice.output_format=csv
改成:
jmeter.save.saveservice.output_format=xml

结果就是这样的:


0 0