• 0
  • 4
分享

一、前言

2017年中旬,有幸接手了公司新产品的测试,领导通知说该项目需要进行功能测试、性能测试和接口测试,顿时压力倍增(于是我把压力(鸭梨)放在了冰箱里,就变成了动力(冻梨)),此前对性能测试一无所知,了解程度只能用"听过"来形容。

性能测试首选的工具是JMeter,在此不多做介绍,但是不得不说JMeter也是一款非常好的接口测试工具。性能测试过程中手工重复的活动非常多,为了给客户提供一个性能测试报告,我用了一周时间进行并发测试、数据整理、数据分析、最后生成测试报告,真的是手工重复到怀疑人生;于是萌生了实现性能测试自动化的想法。之前用Robot framework框架做过WEB自动化、安卓端自动化、接口自动化,但是始终未正真明白自动化的意义或是价值,现在突然顿悟,测试工作中最大的痛点就是重复,减少工作中的痛点才是自动化最大的价值。所以自动化的第一步不是选用什么语言或是框架,而是能真正分析出自己工作中的痛点。

实现性能测试自动化的过程中也参考了许多使用Jmeter生成测试报告的文章,但是都很零散,因此本文是借助前人的智慧再加上自己的创新和实战积累而成的。

本文有如下看点:

1、框架简介、用图形化的方式简介测试框架;

2、环境搭建、实战步骤,避免踩雷、入坑;

3、自动生成邮件报告,优化代码同时输出性能测试报告和接口详情报告;

4、遇到问题汇总,一站解决所有疑问;

5、代码共享,降低他人的学习成本;


二、框架介绍

JMeter+Ant是比较常见的自动化测试框架,因为JMeter、Ant都是由java开发的,所以此性能测试框架具有良好的跨平台性;下图是按自己的理解绘制的自动化框架图:

1.jpg

大体逻辑如下:

(1)Ant通过XML文件进行构建,所有的构建信息配置在build.xml文件中,通过调用target树来执行各种任务;如执行测试脚本(jmx文件),输出测试结果(jtl文件);

(2)Ant通过测试结果(jtl文件)构建生成html测试报告,输出在制定路径下;

(3)根据build.xml文件中配置的邮件信息,将html测试报告自动发送到制定的邮箱;


三、环境搭建

Java安装

1、Java下载地址:https://www.java.com/zh_CN/

2、Java 环境变量配置

(1)设置路径:我的电脑->属性->高级->环境变量;

(2)在【系统变量】新增JAVA_HOME,变量为JDK的路径;

(3)PATH中添加 C:\Program Files\Java\jdk1.8.0_05\bin;

1.jpg

3、检验是否配置成功

(1)cmd进入命令行,输入:java -version,显示出java 的版本信息即配置成功;

2.jpg

JMeter安装

1、JMeter下载地址:http://jmeter.apache.org/download_jmeter.cgi

2、JMeter 环境变量配置

(1)设置路径:我的电脑->属性->高级->环境变量:

(2)在【系统变量】新增JMETER_HOME,变量为jmeter的路径

3.jpg

(3)PATH中添加 %JMETER_HOME%\bin;

3、检验是否配置成功

(1)cmd进入命令行,输入:jmeter -v,显示出JMETER的版本信息即配置成功;

4.jpg

Ant安装

1、Ant下载地址:http://ant.apache.org/bindownload.cgi

2、Ant 环境变量配置

(1) 设置路径:我的电脑->属性->高级->环境变量:

(2)在【系统变量】新增ANT_HOME,变量为ANT的路径

5.jpg

(3)PATH中添加 D:\apache-ant-1.9.9\bin;

3、检验是否配置成功

(1)cmd进入命令行输入:ant -version,显示出Ant的版本信息即配置成功;

6.jpg


四、构建步骤

1、测试准备

(1)JMeter脚本按测试计划选中进行保存,如果按线程进行保存,构建时会报错,后面问题汇总模块会提到,例如保存为TestPlan.jmx。

(2)新增构建文件的文件夹,例如在D盘根目录下新增文件夹"JMeterTest",里面再新增以下文件夹

1.jpg

(3)修改配置文件:jmeter.properties

文件路径:%JMETER_HOME%\bin\jmeter.properties

将jmeter.save.saveservice.output_format=csv改为jmeter.save.saveservice.output_format=xml,去掉前面备注的#号。

2、Ant构建

Ant是用xml格式来进行构建的,默认文件名称为build。构建文件的默认地址为%JMETER_HOME%\extras\build.xml,但是为了构建方便,我们将xml文件放在我们自己目录下,并且根据自己的需要自定义构建内容。

(1)在新增目录D:\JMeterTest\XML下新增build.xml,ant来定义测试活动,具体的内容都在build.xml中进行配置。

(2)build.xml中构建活动定义完成后,cmd进入命令行,进入build.xml的目录下输入ant,回车执行,如下图提示BUILD SUCCESSFUL即可成功。

2.jpg

(3)本地目录下 D:\JMeterTest\HTML,可查看到测试报告;查收邮件,附件也收到了HTML测试报告,如下截图:

3.jpg

(4)本地目录下 D:\JMeterTest\JTL,可看的生成的测试结果文件,可用Jmeter聚合报告的预览进行查看,见截图:

4.jpg

截止目前,我们已经基本实现了接口测试自动化,如果要实现性能测试自动化,还要对生成测试报告模板的代码进行优化。


五、报告优化

1、报告增加性能指标

JMeter性能测试中,我们主要会关注聚合报告中Average time、Throughput、90% Line等指标,因此我们在测试报告中增加TPS(Throughput)和90% Line等指标,

(1)在build.xml的代码中可以看出测试报告调用的模板是 %JMETER_HOME%\extras 路径下的jmeter-results-detail-report_21文件,

(2)因此我们在jmeter-results-detail-report_21文件中进行修改,小编自己修改了很久,但是TPS得值总是不显示,最后参考了其他博客文章得以解决.

(3)由于该模板的代码非常多,优化后的模板代码可以在我的CSDN上进行下载;下载地址:http://download.csdn.net/download/okkczf/10233753

2、加接口详情的报告

该报告的原始模板也可以在网上进行下载,下载地址:http://blog.csdn.net/luozhuwang/article/details/51889159 (感谢作者的分享)

(1)将该模板 jmeter.results.detail.me.xls 放在 %JMETER_HOME%\extras路径下;

(2)要想调用该模板输出测试报告需要在build.xml文件中增加以下代码,我用reportdetail定义该测试活动;

1.jpg

(3)cmd进入命令行,进入build.xml的目录下输入ant,回车执行后,邮件即可收到两个HTML附件,第一个附件为测试报告,第二个附件即为增加的接口测试详情;

2.jpg

3.jpg

接口测试详情如下截图:

4.jpg

3、代码展示

以下是build.xml构建代码:

5.jpg

<?xml version="1.0" encoding="utf8"?>
<project name="TestPlan" default="all" basedir=".">
<tstamp>
<format property="time" pattern="yyyyMMddhhmm" />
</tstamp>
<!-- 需要改成自己本地的Jmeter目录-->
<property name="jmeter.home" value="Jmeter目录" />
<!--jmeter生成jtl格式的结果报告的路径-->
<property name="jmeter.result.jtl.dir" value="D:\JMeterTest\JTL" />
<!--jmeter生成html格式的结果报告的路径-->
<property name="jmeter.result.html.dir" value="D:\JMeterTest\HTML" />
<!--生成的报告的前缀-->
<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" />
<property name="jmeter.resultdetail.htmlName" value="${jmeter.result.html.dir}
/Interface-detail.html" />
<target name="all">
<antcall target="test" />
<antcall target="report" />
<antcall target="reportdetail" />
<antcall target="sendmail" />
</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:\JMeterTest\JMX" 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.html.dir}">
<fileset dir="${jmeter.home}/extras">
<include name="collapse.png" />
<include name="expand.png" />
</fileset>
</copy>
</target>
<target name="reportdetail">
<xslt
in="${jmeter.result.jtlName}"
out="${jmeter.resultdetail.htmlName}"
style="${jmeter.home}/extras/jmeter.results.detail.me.xsl"/>
</target>
<!--发送邮件-->
<target name="sendmail" >
<mail mailhost="mail.star-net.cn"
user="***@***.com"
password="***"
subject="接口测试报告"
from="***@***.com">
<to address="***@***.com"/>
<message>详细报告请查看附件,请用浏览器打开查看!</message>
<attachments>
<fileset dir="${jmeter.result.html.dir}">
<include name="${ReportName}${time}.html"/>
</fileset>
<fileset dir="${jmeter.result.html.dir}">
<include name="Interface-detail.html"/>
</fileset>
</attachments>
</mail>
</target>
</project>


六、遇到问题

本文为JMeter+Ant实现性能测试自动化过程所有遇到的问题的整理汇总

(1)ant构建遇到问题:1字节的UTF-8序列的字节1无效;

1.jpg

解决方法:build.xml中UTF-8改为UTF8;

(2)ant构建遇到问题:运行ant 报错Could not find the TestPlan class!

2.jpg

解决办法: 运行的jmeter脚本 TestPlan.jmx要测试计划层做保存,而不是在threads层做保存。

(3)ant构建时遇到如下报错:

3.jpg

解决办法:下载mail-1.4.7.jar,放在 D:\apache-ant-1.9.9\lib 目录下

(4)生成报告存在的问题:

生成的报告中Min time 和Max time的时间显示为NaN,Date report: date not defined ,如下截图:

4.jpg

5.jpg

解决办法:

(1)将apache-jmeter-3.2\lib中的serializer-2.7.2.jar、xalan-2.7.2.jar复制到apache-ant-1.9.9\lib中即可解决问题(1);

(2)build.xml代码中增加以下内容

6.jpg

注意事项:变量${time}在代码中的定义 ,如果两处名称不一致则构建失败;

<tstamp>
<format property="time" pattern="yyyyMMddhhmm" />
</tstamp>

7.jpg

截止目前,Jmeter+Ant的性能自动化框架已经搭建完成,如果需要你也可以使用Jenkins集成,本文中暂不介绍Jenkins的配置。文章依然存在很多的不足,沐沐会继续努力争取以后分享更多有价值的干货。古人云"The more we share,   the more we have",将分享进行到底...


版权声明:本文出自51Testing会员投稿。51Testing软件测试网及相关内容提供者拥有内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任。

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   Jmeter逻辑控制器  可以控制samplers(采样器)的执行顺序。控制器需和采样器一起使用,否则没有意义。在控制器下的所有采样器都会被当成一个整体,执行时也会一起被执行。Jmeter逻辑控制器可对元件的执行逻辑进行控制,除一次控制器外,还可以嵌套其他种类的逻辑控制器。  分类:  ·控制测试计划执行过程中节点的逻辑执行顺序,如Loop Controller(循环控制器)、If Controller(IF 控制器)  · 对测试计划中的脚本进行分组,如Simple Controller(简单控制器)、事务控制器  · 控制该控制器下元件的执行次数,如 Through...
            0 0 1230
            分享
          • 随着智能手机的普及,移动app测试越来越重要。现在很多互联网都把注意精力放在了移动端,移动app尽量提供完美的用户体验。但是诸如崩溃,冻结问题,加载时间慢,不直观的导航以及侵犯隐私之类的严重错误可能会触发用户立即卸载应用程序。现在,移动应用程序已成为我们日常微时刻不可或缺的一部分,人们平均每天花费3-4个小时。移动应用在职业和个人生活中对每个人都起着关键作用。因此,手机移动端测试在构建移动应用程序以提供流畅的用户体验和功能方面扮演着重要角色。移动应用测试金字塔软件测试的人都知道Mike Cohn的测试自动化金字塔。典型的金字塔由三层组成。顶部是自动化集成测试层的中间,是一个自动化的端到端测试层...
            1 0 1876
            分享
          •   贷款作为银行的资产端,发挥着重要作用,是银行盈利的主要来源。银行正常是先给客户授信,分配额度,然后才能给客户贷款,我这里没有讲授信和额度管理,他们也是一个庞大的系统,这里说明一下。贷款分类有普通贷款、委托贷款、银团贷款、按揭贷款、保理融资等,其中贴现、同业拆出、垫款也是一种贷款。基本流程都差不多,只是有个别差异,比如普贷和委贷的区别就是资金来源不同,普贷是放贷的是银行的前,委贷是放的委存的钱(别人在银行开的委存账户)。  贷款的种类:  · 普通贷款:一般指的是商业银行发放的固定偿还期限的贷款,按照偿还期限的长短,又可分为短期贷款、中期贷款和长期贷款。短期贷款:期限在一年以内(含...
            0 0 200
            分享
          • 环境:OS:Windows 10 17134Python:3.4.4Selenium:3.13.0Browser:68.0.3440.84(正式版本) (64 位)ChromeDriver:2.41脚本内容:# -*- coding: utf-8 -*-""" 测试 selenium webdriver """import timefrom selenium import webdriverdef test():  ...
            1 2 2417
            分享
          • 一、adb环境部署准备下载jdk及安卓adt1、jdk下载地址(https://www.oracle.com/java/technologies/javase-downloads.html)配置环境变量① 打开配置环境入口右键此电脑-高级系统设置-环境变量② 配置JAVA_HOME在系统变量中新增JAVA_HOME,变量值中输入jdk安装路径(C:\Program Files\Java\jdk-15.0.1 版本号及路径可能不一致,不能直接复制)③ 编辑Path在系统变量Path中新加两条:%JAVA_HOME%\bin和%JAVA_HOME%\jre\bin(每条以英语分号隔开)④ 编辑CL...
            0 0 1266
            分享
      • 51testing软件测试圈微信