内容简介:前言通过了解性能测试,知道了jmeter框架以及其扩展知识,jmeter不仅是性能测试利器而且还可以用于接口测试,经过近几周的学习,了解了jmeter的相关知识。但是在使用过程中还是遇到了问题,就是脚本较多时一一执行比较麻烦,我们不可能每次都一个一个的手动去点,这样不仅耗时还重复麻烦,那么有没有什么办法来批量运行Jmeter脚本呢?这个时候,我们就要想办法使其自动化。为了自动化想到了jenkins和ant,通过查看官方文档,发现ant有相应的JMeterTask。于是就准备一步一步的搭建基于Jenkins+
| 编辑推荐: |
| 本文来自于163yun,,主要介绍了基于Jenkins+Jmeter+Ant 的测试自动化框架环境搭建的相关内容。 |
前言
通过了解性能测试,知道了jmeter框架以及其扩展知识,jmeter不仅是性能测试利器而且还可以用于接口测试,经过近几周的学习,了解了jmeter的相关知识。但是在使用过程中还是遇到了问题,就是脚本较多时一一执行比较麻烦,我们不可能每次都一个一个的手动去点,这样不仅耗时还重复麻烦,那么有没有什么办法来批量运行Jmeter脚本呢?这个时候,我们就要想办法使其自动化。为了自动化想到了jenkins和ant,通过查看官方文档,发现ant有相应的JMeterTask。于是就准备一步一步的搭建基于Jenkins+Jmeter+Ant 的测试自动化框架,用于性能及接口自动化测试。其实这个方案,网上有许多的相关资料,某些资料写的也比较详细,在搭建该平台时也是参照了许多类似的文章,可能有人会说网上已经有许多相关的文章,你为什么还有写这篇呢?说实话这个问题问的非常好,其实搭建平台之初我内心也是没想要写文章的,因为发现网上相关的资料真的是太多了,根据网上的资料应该很容易搭建起来。但在实际操作中发现现实还是很骨感的,于是写下该文章其一为了自己总结,其二在搭建过程中遇到许多奇葩的坑,分享出来给有缘人参考。本文重点讲解自动化环境搭建的相关知识,至于如何基于jmeter进行性能和接口测试会后续给出。欲知详情,敬请等待....
一、自动化测试环境搭建准备
1. 下载jdk1.6以上及环境配置
2.下载 ant及环境配置
3. 下载jmeter
4. 下载jenkins
上述 工具 的下载及环境配置可自行百度,由于篇幅原因本文不做介绍。
二、自动化测试环境适用场景
1.日常迭代接口测试的自动化。
2.项目性能测试的自动化。
三、Jenkins持续集成配置说明
环境准备工作完成后,需要在Jenkins进行相关的配置来实现自动化。Jenkins新建job及插件安装方法本文不做介绍,感兴趣的可以自行百度搜索。本文重点讲解jenkins中的ant、Performance plugin、HTML Publisher plugin和 Email Extension Plugin等插件的配置,用于产品性能及接口测试、生成测试报告及邮件通知功能,最终实现自动化的目的。
3.1 Ant插件:Ant Plugin
功能:用来执行Ant
配置截图:
- 配置说明:
- Ant Plugin可以在构建步骤中添加,直接执行构建。
- targets:执行目标.
- build file:指定执行build.xml路径.
ant插件安装成功后,在配置项中指定build.xml的路径,利用jenkins自动构建时会根据路径找到build文件,执行文件的配置内容。因此为了能够实现自动化,需要定制build.xml。下面给出我的build文件作为参考,可以通过替换路径作为己用。
3.2 Jmeter插件:Performance plugin
功能:展示jmeter执行结果
配置截图:
配置说明:
Report files:配置jtl文件路径,相对路径与绝对路径均可,图为相对路径
其他选项:配置失败比例显示图形等参数,按需配置。
3.3 Jmeter插件:HTML publisher plugin
功能:用来展示jmeter执行结果
配置截图:
配置说明:
- HTML directory to archive:填写生成html文件的路径
- index page[s]:填写展示报告的主页
原理说明: 本插件并不会自己产生html文件,而是通过xslt转化xml生成的报告, xslt可以自己在服务器中安装,也可以通过通过Ant配置文件指定xslt路径,本文就是通过Ant配置文件指定xslt路径(先下载xslt文件)的方式生成html文件。
因为jenkins安全性的问题,默认加载出来的报告是无css的,通过以下配置解决:
HTML Publisher Plugin 插件在新的Jenkins版本中会导致打开的网页中无法加载CSS以及无法点击按钮的情况,由于CSP导致,可在Jenkins控制台中执行:System.setProperty
("hudson.model.DirectoryBrowserSupport.CSP", "")
以解决此问题。其他由于CSP原因导致的html插件也可用此方法解决
3.4 jenkins邮件插件配置
但是实际操作中发现如果接口较多时,jenkins构建需要一定的时间,为了看到最终的执行结果,我们只有一直等待或是过一段时间回来确定。但这样都不好。如何可以让构建结果通知相关人员?于是想到利用jenkin自带的邮件插件,实现实时将构建结果通知给相关人员。
3.4.1. 系统管理设置
Jenkins系统管理->系统设置
如图,使用一个已有的邮箱(比如163或者qq)作为邮件通知邮箱,配置SMTP服务器,邮箱的用户名和密码。切记需要开通邮箱的SMTP服务,此处踩了坑...下面会详细介绍。
3.4.2 配置完成后可以勾选“通过发送测试邮件测试配置”进行测试是否配置成功,如下图则说明搭建成功。
3.4.3.Job配置
在需要邮件通知的Job设置里面增加“构建后操作步骤”->选择E-mail Notification
邮件通知配置可以选择在每一次构建成功或 不成功,需要群发邮件的收件人信息。
但是如果你群发的收件人列表比较多,或者每次通知的人不一样,比如每次只想通知导致构建失败的那个人(即最后一次上传代码的人),
那么简单的E-mail Notification肯定不能满足你的要求,需要加入下面这个插件Email extension plugin。
如果希望分别针对构建成功和构建失败发送不同的邮件通知,可以点击Advanced Setting。
注意Triggers的设置,可以配置多种Triggers(触发器),Failure-Any,Failure-1st(第一次构建失败),Success,Fixed,Abort等等。
触发器的种类很多,可以根据实际需要选择。每种触发器可以根据需要选择Send To,比如Failure-Any可以add upstream Committers,Requestor等等。
每一个Trigger可以单独在高级中配置Default Subject,Default Content,Recipient List等等,所以在触发器中的这个设置是可以覆盖上面的基础设置的。
因为在Jenkins系统管理->系统设置中可以设置收件人,但是如果想进行修改,必须要由Job页面返回到系统设置页面,操作比较麻烦而且不灵活。为了灵活操作,我是通过创建参数来设置需要发送的邮件列表,然后在Project Recipient List中通过参数进行读取,可以灵活设置。效果如下图:
这样如果需要修改收件人列表,只需要用逗号将用户邮箱分割就好,设置后构建结果就可以自动发到相关人员的邮箱,实现测试自动化。
四、测试执行与报告优化原理
jmeter执行的结果文件默认有许多执行数据是不保存的,但这样生成的测试报告过于简单,不能满足我们的需求。因此为了得到html格式的报告且满足我们对测试报告的需求,需要对jmeter的配置文件进行修改,订制测试报告的显示形式。jmeter自带模板,模板路径为${jmeterhome}/extras/jmeter-results*.xsl,该模板中相应的值是通过jmeter.profile配置文件来配置的。因此我们只需修改${jmeterhome}/bin/jmeter.profile配置文件,设置所需的报告参数就可以了。
4.1 测试报告格式设置原理
jmeter执行的结果文件不是xml格式的,因此无法转换为html格式的报告。只能将其执行结果的文件格式变为xml,才能通过xslt转换为html。所以去掉下图注释(#),修改csv为xml。
4.2 测试报告数据个性化设置原理
jmeter生成的报告默认只显示值为ture的字段,信息量较少。为了定制测试报告,可以根据想要保存的参数进行修改,修改后千万别忘记去掉注释(#),不然是不会生效的。
4.3 xstl源码分析:jtl格式转换为html原理
通过上面介绍,我们知道为了得到html格式的测试报告,需要将jmeter产生的xml文件通过xslt工具转换为html,但具体是怎么转换呢?可能大家并不太清楚,下面通过分析xslt和jtl的源码,详细介绍:
4.3.1 jmeter默认生成测试报告jtl文件代码:
我们将其与jemter.properties文件进行对比分析,可以看出jtl文件中生成的测试数据与jemter.properties文件的值一一对应。这也就直接说明了为什么修改jemter.properties文件可以定制测试报告了。
4.3.2 xslt文件源码
可以看出xslt通过读取jtl中的值填充到html页面中,生成html报告。因此定制测试报告的原理我们应该也清楚了,我们可以读取我们需要的值显示在我们的报告中,实现报告的定制化。
再次总结强调下测试报告优化原理:通过修改jemter.properties将我们希望生成的值设置为true,这样在生成的jtl文件中就会产生对应的数据。而html报告最终呈现的结果实际是xstl中通过获取jtl的数值,因此为了设置简单,我们可以将jemter.properties文件中的数据字段全部设置为true,然后通过配置xstl来的定制测试报告。xslt 用于将一种 XML 文档转换为另外一种 XML 文档,或者可被浏览器识别的其他类型的文档,比如 HTML 和 XHTML。通常,XSLT 是通过把每个 XML 元素转换为 (X)HTML 元素来完成这项工作的。通过 XSLT,我们可以向或者从输出文件添加或移除元素和属性。也可重新排列元素,执行测试并决定隐藏或显示哪个元素等等。而且xslt和html较像,容易进行二次开发。
经过上面的配置,可以得到HTML和Performance 报告
HTML报告:
Performance 报告:
至此,环境搭建已经基本完成,可以进行简单的性能及接口测试,且可以生成定制化的测试报告,满足了我最初的目的了。
至此一套自动化测试框架算是完整搭建成功了,虽然网上的资料较多,但是毕竟不满足个人需求,需要将其整合或变更以便满足自己的需求,過程中还是踩过许多坑,遇到很多坎,本文一一记录并提供解决办法及分析原因。
五、搭建过程中的坑及对应解决办法
5.1.ant,jdk下载且正确安装,环境变量也配置正确,执行jenkins,满怀希冀的希望可以构建成功,但现实是残酷的,构建失败,日志如下:
可以看出ant.bat不能识别,出现这个问题有可能是环境变量配置错误,于是第一反应就是重新查看环境的配置,发现没有问题呀。坚持不懈一次次运行,情理之中仍是失败,错误日志也一样。命令行执行ant -version提示正确,再次证明ant配置正确,但为什么提示失败呢,不识别该命令呢?该框架需要ant、jdk和jenkins,初步怀疑可能jdk和ant版本冲突,于是问了下度娘,发现jdk和ant之间确实有版本要求,但是百度上没搜到具体的信息,于是试着去ant官网上有没有说明,功夫不负有心人最终找到了:
可以看出ant1.9.x需要 java 5以上的版本,ant1.10.x需要java8。而我用的jdk7,ant用的是最新的1.10.1,所以原因不言而喻。解决办法大家应该也知道了,我的选择是保持jdk不变,用了1.9.x版本的ant。
5.2.查看错误日志时,提示build.xml:6: Unexpected text " "
但查看build.xml文件第6行没有发现这个符号,只是第6行有行注释。试着将其删除,再次重新构建,错误定位到下个注释的行,解决办法就是将所有的注释删除,问题解决。至于为什么有注释会报错,原因仍在定位,值得思考....
5.3. 问题:taskdef class org.programmerplanet.ant.taskdefs.
jmeter.JMeterTask cannot be found
这个报错非常坑爹,是由于Ant的lib文件没有ant-jmeter-1.1.1.jar这个jar包,因为ant执行jmeter脚本时会调用JMeterTask,但是在ant的lib文件没有相应的jar包。所以一直会报这个错。解决:把jar包:ant-jmeter-1.0.9.jar放到ant的lib路径中即可。因为JMETER的测试结果一般生成的是一份聚合报告,如果想用ANT生成具体的测试报告,需要这样的一个jar包 ant-jmeter-1.0.9.jar 里面提供的一个JMeterTask的类来运行JMTER的测试脚本,生成jtl的结果文件,然后用XSLT来把.jtl的结果文件转化为.html形式的结果报告。
这个问题就是由于.xsl文件不正确导致的,解决办法在网上找个靠谱的.xsl文件,或是理解.xsl文件原理自己编写。
说明了jenkins的性能测试报告不是直接读取jtl文件中的数据,仍需要通过.xsl文件转换。
5.邮件发送失败
查看日志可知,连接不到SMTP服务器,上网查了些资料没有找到直接说明的文章,其中有一篇文章说明要首先邮箱开通SMTP服务,然后尝试一下,发现可以解决问题,原因是需要在相应的邮箱开通SMTP服务,才可以发送邮件。开通邮箱的SMTP服务后会产生密码,将收到的SMTP服务密码填充到系统管理设置邮件中对应的输入框中,可以解决该问题
以上所述就是小编给大家介绍的《Jenkins+Jmeter+Ant持续集成》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 持续集成:数据库集成及快速构建
- ShareSDK集成及集成后遇到的一些问题【原创】
- 持续集成与持续部署宝典Part 3:创建集成环境
- 持续集成与持续部署宝典Part 2:创建持续集成流水线
- 禅道 12.3.stable 版本发布,全面集成八种单元测试框架,打通持续集成闭环
- 持续集成将死
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Domain-Driven Design Distilled
Vaughn Vernon / Addison-Wesley Professional / 2016-6-2 / USD 36.99
Domain-Driven Design (DDD) software modeling delivers powerful results in practice, not just in theory, which is why developers worldwide are rapidly moving to adopt it. Now, for the first time, there......一起来看看 《Domain-Driven Design Distilled》 这本书的介绍吧!