• 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软件测试网及相关内容提供者拥有内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任。

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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   埃隆·马斯克旗下人工智能公司xAI最新推出了名为GroK的人工智能聊天机器人,并面向美国地区的Premium+ X 用户开放。据悉,Grok采用了名为Grok-1的模型,与目前OpenAI旗下的ChatGPT所使用的GPT-4模型不同。  但越来越的用户注意到,埃隆·马斯克的AI工具Grok的一些回答和ChatGPT几乎一模一样,这也让用户认为,Grok就是直接从竞争对手ChatGPT那里抓取内容。换句话说,Grok是在套壳ChatGPT?  目前来看,Grok的稳定性似乎有点问题,而且表现的颇为“叛逆”,在其回答中直接调侃其创始人埃隆·马斯克。“让我们谈谈你对X的迷恋。这就像你在试图弥补...
            0 0 411
            分享
          • 事情是这样的,女朋友昨天跟我吐槽说她闺蜜玩“羊了个羊” 刷到朋友圈榜前10,而她连第二关都过不了,已经开始怀疑自己了。于是我拿起了她的手机打开了羊了个羊小程序,打开了Charles和Apifox,并且结合了Apifox的自动化测试功能不小心把她刷到榜一!准备工作抓包工具:Charles 获取token接口管理工具:Apifox 地址:apifox.cnCharles 抓包1.获取PC的IP地址2.配置代理这里以iPhone手机为例:在iPhone的设置 -> 无线局域网 -> 局域网信息 -> 配置代理 -> 手动中配置代理,服务器输入框中填写PC的IP地址,端口输入框...
            0 0 2324
            分享
          • 一、保证Bug的有效性提交的bug必须是有效的,所以我们在提交bug时,需要确定以下几点:交付过程中测试人员需按照设定好的模块,对bug进行归类提交;bug的类型默认为UI问题、功能问题、崩溃问题,提交bug时不可混淆;需求是否明确、前提条件是否满足、输入数据是否正确、操作步骤是否清楚、 bug是否具有唯一性;避免提交操作错误、重复的、已知的Bug。二、Bug标题要简洁明了bug标题要简明扼要的阐述问题本质,让开发能快速了解你所提的bug的大概内容。需要写明在哪个页面执行什么操作出现什么现象。举个例子!正确示例: 在我的设置页面不填写任何内容点击保存后,客户端崩溃。错误示例:设置页面...
            11 11 3725
            分享
          •   很少有企业像名创优品一样,既自带创始人白手起家、十分励志的品牌故事,也有着习惯道歉、负面口碑缠身的各种争议标签。1977年出生于湖北十堰的农村娃叶国富,于2013 年在旅行日本时受到小商品启发,遂创立名创优品,立志把中国小商品发扬光大。  但是与此同时,伴随着叶国富的商业头脑不断升级,名创优品受到的争议之声也从未停息。尤其是其模仿优衣库、无印良品的logo和产品,更是争议声不绝于耳。  11月初,名创优品再次陷入专利纠纷。瑞旻实业起诉称,其 “具有紧直牙线的牙线棒及其制造设备和制造方法”专利受侵犯,名创优品与达谆实业恶意串通,仿冒了瑞旻实业的专利产品。  再次陷入舆论风波的名创优品,被索赔...
            0 0 523
            分享
          •   苹果公司在增加 iPhone RAM 方面走得最远的一次是 8GB,而且是针对价格较高的 iPhone 15 Pro 和 iPhone 15 Pro Max。然而,随着人工智能竞赛的白热化,科技巨头们都在推动自己的产品加入设备上的大型语言模型(LLM),这样一来苹果很可能不得不对其产品阵容进行调整。  据一家韩国证券公司分析称,其中一些变化包括增加即将推出的 iPhone 16 的运行内存,但这些说法是在有报道称该公司正在研究如何使用 NAND 闪存运行设备上人工智能之后提出的。  爆料人 Revegnus 没有提及这家韩国证券公司的名称,但他表示,一些分析师认为,苹果将增加这些机型的运行...
            0 0 275
            分享
      • 51testing软件测试圈微信