51Testing软件测试论坛

标题: JMeter+Ant接口自动化搭建及实践 [打印本页]

作者: lsekfe    时间: 2020-11-25 10:35
标题: JMeter+Ant接口自动化搭建及实践
前言
  JMeter是Apache组织的开放源代码项目,能做接口测试、功能测试和性能测试。它能够对HTTP和FTP服务器进行压力和性能测试,也可以对数据库进行同样的测试(通过JDBC),还能以多种形式展现测试结果。然而,在使用JMeter进行测试过程中,不可避免遇到两个痛点:“运行测试脚本”和“生成测试报告”。前者主要是需要不断重复运行脚本,且当脚本数量较多或进行并发测试时,JMeter GUI界面容易宕机、卡死等,这种情况下就需要重复使用命令执行脚本;后者则是需要手工整理数据、分析测试结果然后生成测试报告。因此,本文采用JMeter+Ant(一个将软件编译、测试、部署等步骤联系在一起加以自动化的工具)搭建自动化测试环境,用以解决测试过程中的痛点,通过此环境可以实现:(1)自动重复运行脚本(2)自动生成测试报告(3)自动发送邮件。
  大体的逻辑如下:
  1、配置build.xml文件,Ant通过XML文件进行构建,通过调用target就可以执行各种task,每个task实现了特定接口对象。因此,通过Ant可以实现批量执行。
  2、Ant通过测试结果(jtl文件)构建生成HTML测试报告,并输出在指定路径下,避免了手工整理测试报告。
  3、根据build.xml文件中配置的的邮件信息,将HTML测试报告自动发送到指定的邮箱。
  JDK安装
  JMeter依赖Java环境,故需要先安装JDK并配置好环境变量。JDK下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
  Java环境变量配置
  1、创建JAVA_HOME(JDK安装目录)。如:C:\Program Files (x86)\Java\jdk1.8.0_231
  2、创建CLASSPATH,.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar(注意最前面有一点)
  3、编辑Path,把值放在最前面?%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
  验证JDK
  CMD命令行输入java -version,显示如图,表示安装成功。
[attach]130952[/attach]
 JMeter安装
  JMeter下载地址:http://jmeter.apache.org/download_jmeter.cgi。下载成功后,解压缩到建立的文件夹路径中(如:D:\Apache\JMeter)。
  JMeter环境变量配置
  1、创建JMETER_HOME,填写JMeter文件所属路径(如:D:\Apache\JMeter)
  2、修改CLASSPATH,添加;%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar%JMETER_HOME%\lib\jorphan.jar;%JMETER_HOME%\lib\logkit-1.2.jar;
  3、修改Path,添加%JMETER_HOME%\bin
  点击JMeter目录下bin文件夹中的jmeter.bat就可以打开JMeter,具体界面如下:
[attach]130953[/attach]
 添加常用插件  注:官网下载的JMeter不包含一些常用插件。
  将plugins-manager-xxx.jar、JMeterPlugins-Extras.jar、JMeterPlugins-Standard.jar和JMeterPlugins-Standard-1.4.0.zip解压后的jar包放入D:\Apache\JMeter目录下的lib\ext目录,重启JMeter。
  打开有如下页面,则成功安装。
[attach]130954[/attach]
 JMeter相关配置修改  1、修改默认语言和jvm参数(根据电脑配置进行修改),编辑JMeter.bat如下:
[attach]130955[/attach]
[attach]130956[/attach]
2、编辑JMeter.peoperties使用第三方模块生成详细报告:
[attach]130967[/attach]
[attach]130958[/attach]
Ant安装  Ant下载地址:http://ant.apache.org/bindownload.cgi。下载成功后,解压Ant压缩包到建立的文件夹路径(如:D:\Apache\Ant)。
  Ant环境变量配置
  1、创建ANT_HOME,填写Ant所属路径(如D:\Apache\Ant?)
  2、修改CLASSPATH,添加;%ANT_HOME%\lib
  3、修改Path,添加;%ANT_HOME%\bin
  验证Ant
  CMD命令行输入ant,如下图所示表示安装成功。
[attach]130959[/attach]
 Ant配置及相关使用操作  1、将D:\Apache\JMeter\extras下面的ant-jmeter-1.1.1.jar包复制到D:\Apache\Ant\lib目录下。
  2、将jmeter.results.shanhe.me.xsl和jmeter-results-detail-report_21.xsl分别放在D:\Apache\JMeter\extras目录下。
  3、(发送邮件所需jar包)下载activation-1.1.1.jar、commons-email-1.5.jar和javax.mail.jar放到D:\ Apache\ant\lib。
  4、在本地任意创建目录testcases(如:D:\testcases),并在其目录下创建report文件夹和build.xml文件,复制以下内容到build.xml文件中:
  1. <?xml version="1.0" encoding="UTF-8"?>

  2. <project name="ant-jmeter-test" default="all" basedir=".">

  3. <tstamp>

  4. <format property="time" pattern="yyyyMMddhhmm" />

  5. </tstamp>

  6. <!-- 需要改成自己本地的 Jmeter 目录 -->

  7. <property name="jmeter.home" value="D:\Apache\jmeter" />

  8. <property name="report.title" value="测试报告" />

  9. <!-- jmeter生成jtl格式的结果报告的路径 -->

  10. <property name="jmeter.result.jtl.dir" value="D:\testcases\report" />

  11. <!-- jmeter生成html格式的结果报告的路径 -->

  12. <property name="jmeter.result.html.dir" value="D:\testcases\report" />

  13. <!-- zip文件路径 -->

  14. <property name="zip.dir" value="D:\testcases" />

  15. <!-- 生成的报告的前缀 -->

  16. <property name="ReportName" value="testcases" />

  17. <!-- 报告名称 -->

  18. <property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${ReportName}${time}.jtl" />

  19. <property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${ReportName}${time}.html" />

  20. <property name="zipname" value="${zip.dir}/${ReportName}${time}.zip" />

  21. <!-- 邮件配置信息 -->

  22. <property name="mail_host" value="smtp.163.com" />

  23. <property name="mail_port" value="465" />

  24. <property name="username" value="testcases@163.com" />

  25. <property name="password" value="123456789" />

  26. <property name="mail_from" value="dtestcases@163.com" />

  27. <property name="mail_to" value="testcases@163.com,testcases2@163.com" />

  28. <property name="mailsubject" value="测试报告" />

  29. <!-- 输出生成的报告名称和存放路径 -->

  30. <echo message="${jmeter.result.jtlName}" />

  31. <echo message="${jmeter.result.htmlName}" />

  32. <echo message="${jmeter.result.html.dir}" />

  33. <echo message="${zip.dir}" />

  34. <echo message="${zipname}" />

  35. <!-- 加载jar包,解决时间显示问题 -->

  36. <path id="xslt.classpath">

  37. <fileset dir="${jmeter.home}/lib" includes="xalan*.jar" />

  38. <fileset dir="${jmeter.home}/lib" includes="serializer*.jar" />

  39. </path>

  40. <target name="all">

  41. <antcall target="test" />

  42. <antcall target="report" />

  43. <antcall target="summary-report" />

  44. <antcall target="zip" />

  45. <!-- 打包zip -->

  46. <antcall target="sendEmail" />

  47. <!-- 发送邮件 -->

  48. </target>

  49. <target name="test">

  50. <taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" />

  51. <jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">

  52. <!-- 声明要运行的脚本"*.jmx"指包含此目录下的所有jmeter脚本 -->

  53. <!-- 如果只想执行部分脚本,可以写多条testplans 将需要执行的jmx写在includes中 -->

  54. <testplans dir="D:\testcases" includes="*.jmx" />

  55. <property name="jmeter.save.saveservice.output_format" value="xml" />

  56. <!-- 这里就是jmeter.properties修改的部分 -->

  57. </jmeter>

  58. </target>

  59. <target name="report">

  60. <tstamp>

  61. <format property="report.datestamp" pattern="yyyy/MM/dd HH:mm" />

  62. </tstamp>

  63. <xslt classpathref="xslt.classpath" force="true" in="${jmeter.result.jtlName}" out="${jmeter.result.html.dir}/summary-report.html" style="${jmeter.home}/extras/jmeter.results.shanhe.me.xsl">

  64. <!-- 这里是第三方模板,修改jmeter.properties后生成的报告有详细的请求、响应、错误信息等 -->

  65. <param name="Date Report" expression="${report.datestamp}" />

  66. </xslt>

  67. <!-- 因为上面生成报告的时候,不会将相关的图片也一起拷贝至目标目录,所以,需要手动拷贝 -->

  68. <copy todir="${jmeter.result.html.dir}">

  69. <fileset dir="${jmeter.home}/extras">

  70. <include name="collapse.png" />

  71. <include name="expand.png" />

  72. </fileset>

  73. </copy>

  74. </target>

  75. <target name="summary-report">

  76. <tstamp>

  77. <format property="report.datestamp" pattern="yyyy/MM/dd HH:mm" />

  78. </tstamp>

  79. <xslt classpathref="xslt.classpath" force="true" in="${jmeter.result.jtlName}" out="${jmeter.result.htmlName}" style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl">

  80. <!-- 这里是一个简要的信息,查看成功和失败的请求百分比 -->

  81. <param name="dateReport" expression="${report.datestamp}" />

  82. </xslt>

  83. </target>

  84. <!-- zip配置 -->

  85. <target name="zip">

  86. <echo>

  87. 打包zip文件

  88. </echo>

  89. <zip destfile="${zipname}" duplicate="preserve">

  90. <zipfileset dir="${jmeter.result.html.dir}" includes="**/*.*" prefix="测试报告" />

  91. </zip>

  92. <copy todir="${jmeter.result.html.dir}">

  93. <fileset dir="${zip.dir}">

  94. <include name="*.zip" />

  95. </fileset>

  96. </copy>

  97. </target>

  98. <!-- 配置发送邮件报告 -->

  99. <target name="sendEmail">

  100. <echo>

  101. 发送测试报告

  102. </echo>

  103. <loadfile property="email_content" srcFile="${jmeter.result.htmlName}" encoding="UTF-8" />

  104. <mail mailhost="${mail_host}" ssl="true" user="${username}" password="${password}" mailport="${mail_port}" subject="${mailsubject}" messagemimetype="text/html" messagefileinputencoding="UTF-8" tolist="${mail_to}">

  105. <from address="${mail_from}" />

  106. <message charset="UTF-8">

  107. ${email_content}

  108. </message>

  109. <!-- 附件 -->

  110. <attachments>

  111. <fileset dir="${jmeter.result.html.dir}">

  112. <include name="*.zip" />

  113. </fileset>

  114. </attachments>

  115. </mail>

  116. </target>

  117. </project>
复制代码
5、打开CMD命令行,切换到testcases目录下执行ant命令;或在testcases目录编写ant.bat文件执行,文件内容如下:
  1. [url=home.php?mod=space&uid=1806]@echo[/url]  

  2. call ant -buildfile build.xml -l logfile  

  3. pause  
复制代码
注:执行日志存放在testcase目录下的logfile文件中。  附:报告及邮件
  1、概略报告
[attach]130960[/attach]
 2、详细报告

[attach]130964[/attach]
 3、邮件及附件
[attach]130965[/attach]








作者: Miss_love    时间: 2020-11-25 11:23
支持
作者: 郭小贱    时间: 2020-11-25 11:40
好贴!!支持!!




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2