需要留心的地方
关于基础部分不再赘述,参照jmeter即可。但是有一些使用过程中个人觉得应该留心的点及自己爬过的一些坑记录一下
参数化和关联 一起使用时
网上的例子多将参数化和关联分开case介绍,辣么如果我想从参数化返回的结果中提取关键字用于下一个case的参数时,如果使用呢。
只需要在前一个测试用例中定义多个正则提取器即可,就可以做到参数化与关联一起使用,如图。
批量执行脚本
关于ant+jmeter接口批量执行测试用例,需要做的步骤准备依次是(以windows为例):
- jdk安装及配置
- ant安装及配置
- jmeter安装及配置
- jmeter>bin目录下,存放脚本文件xxx.jmx;jmeter目录下创建report文件夹用于存储测试结果报告
- 将JMeter所在目录下extras子目录里的ant-JMeter-1.1.1.jar复制到Ant所在目录lib子目录之下
- jmeter默认保存的文件是csv格式,修改jmeter.properties配置文件,jmeter.save.saveservice.output_format=xml
- 在ant的bin目录下创建一个build.xml文件。copy代码并做一定修正(代码详细参照如下网页)
- cmd中cd到ant的bin目录下,鼠标拖拽命令ant.bat后回车。执行后去report陆慕下即可查看报告详情了
https://my.oschina.net/MrToStudy/blog/718602
注意:用ant.bat命令执行后,会再report目录下生成测试报告文件。关于测试报告还有两个问题需要解决
解决方案:修改ant>bin目录下的build.xml文件。其中蓝字部分是必须要添加的内容。文件详细build.xml
通过如上修正,完美搞定如上两点的报告格式问题。
关于搭建持续集成测试接口平台(jmeter+ant+jenkins)
需要特别注意的几个地方:
- build.xml内需要修改的一些地方,其中特别强调这几行代码一定要加上
- bulid.xml此处操作的build.xml是指ant内的bulid.xml文件(而且这个文件是自己新建的,新建的,新建的!内容嘛,当然是网上copy的再根据实际自己改改),而不是指jmeter/extra文件下的bulild.xml
- 将此bulid.xml与.jmx文件放到一个目录
- 关于jmeter 构建里的ant Invoke配置时,Build File处填的是如上bulid.xml的文件路径,而不是.jmx文件。如下图
关于环境配置详情,这个网页写的比较好。并亲测好用~
http://www.51testing.com/html/67/n-3723567.html
09/29为止,目前根据build.xml文件配置内容,cd到ant/bin目录下时,执行ant.bat时输出的是旧的报告模板。用jenkins自动构建的时候,用的是自定义后的报告模板
默认模板style:jmeter-results-detail-report_21.xsl
改了之后的模板style:jmeter-results-shanhe-me.xsl
JDBC Request
拜托各位大侠在写博客的时候,能不能标明你用的版本号。能不能再细致一点。我能说我翻了一天才终于绕过这些个坑,把环境调通吗,都是泪啊。。。。。。
操作步骤(因为我本机用的是mysql数据库(而不是oracle,所以此步骤为mysql的操作。)
-
本机的mysql数据库搭建略
-
Test Plan>Thread Group下创建JDBC Connection Configuration。详细如下图。此处需要注意Database URL处jdbc:mysql://localhost:3306/autotest?serverTimezone=UTC必须加上"?serverTimezone=UTC"
否则会报这个错:Caused by: java.sql.SQLException: The server time zone value
'�й���ʱ��'
is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value
if
you want to utilize time zone support.
-
JDBC Driver class应设置为:com.mysql.cj.jdbc.Driver. 如果设置为com.mysql.jdbc.Driver,会报错找不到这个driver。此处为新版jdbc驱动的原因
- Add>Sampler>JDBC Request。其中Variable Name必须与JDBC Connection Configuration中的Variable Name Bound to Pool中的Variable Name一致。
- 添加View Results Tree Listner即可查看结果,大功告成~~~
注意:jdbc驱动jar文件需要去mysql网站上下载合适的版本,并且放到jmeter的lib文件夹下后,重启jmeter使其生效。
官网上下载后,解压zip包中的mysql-connector-java-8.0.12.jar文件(解压后还有一些其他文件,不用copy那些文件,只需要包内的.jar文件)
JDBC Request参数化:
- Test plan中设置参数并赋值
- 在jdbc request sql文中引用变量有两种方式:一种是sql文中直接引用;另一种方式是sql稳重使用?占位符方式,parameter value中添加具体引用的参数。如下图:
分布式测试jdbc数据库时
windows上远程测试linux服务器上的mysql数据库时。除了将jdbc驱动jar文件放到lib目录下之外。如下配置好测试参数后,会报错
Cannot create PoolableConnectionFactory (null, message from server: "Host '10.34.163.70' is not allowed to connect to this MySQL server")
错误原因是因为使用远程登录的用户不允许从远程登录。
解决方法:命令授权后,mysql配置文件接收所以ip链接:https://blog.csdn.net/timo1160139211/article/details/72831771
分布式环境搭建
windows与linux分布式环境(master机器在windows上,slave机器在linux上)
是的,已经在坑里趴了2天了。slave机器上执行完毕,但master机器上一直收不到slave的测试结果(view result tree一直为空)。此处暂时放一放。
当然了,还是成功跳过过一些小坑坑的,解决方法如下:
- 报no such object in table错误:需要更改slave机器上的server port
- 报Engine is busy - please try later:master上先remote stop all,然后重新运行slave上的jmeter-server
windows与linux分布式环境(master机器和slave机器都放到linux上)
执行思路。三台机器上都安装jmeter环境完毕。并都可以用非GUI模式执行windows上传过来的jmx脚本。之后再挑其中一台作为master机器,其他两台作为slave机器来执行脚本。
问题来了。目前,CGWEBQA7501上用非GUI模式执行成功,并将结果文件夹下载到windows,查看其中的.html文件生成的报告。但是CCWEBQA1501上非GUI模式无法执行jmx脚本。
解决方法:用CGWEBQA7501的lib文件替换掉CCWEBQA1501的lib文件即可。有一些jar插件库不同导致的。具体的需要哪些jar库需要继续深入研究
问题又来了:
按照如上思路进行后,在linux master机器上执行非GUI分布式测试命令,报如下错误
命令详细:jmeter -n -t baiduBasicTest.jmx -r -l baidu_request_results.jtl -e -o /usr/myapp/apache-jmeter-3.2/Reports
Creating summariser <summary>
Created the tree successfully using baiduBasicTest.jmx
Configuring remote engine:
10.113
.
167.25
:
1099
Connection refused to host:
10.113
.
167.25
; nested exception is:
java.net.ConnectException: Connection refused (Connection refused)
Failed to configure
10.113
.
167.25
:
1099
Configuring remote engine:
10.113
.
185.196
:
1099
Connection refused to host:
10.113
.
185.196
; nested exception is:
java.net.ConnectException: Connection refused (Connection refused)
Failed to configure
10.113
.
185.196
:
1099
Stopping remote engines
Remote engines have been stopped
Error in NonGUIDriver java.lang.RuntimeException: Following remote engines could not be configured:[
10.113
.
167.25
:
1099
,
10.113
.
185.196
:
1099
]
|
惊不惊喜,意不意外。今天来再在linux分布式环境上执行脚本后。居然成功了。上面的问题不发生了。哇咔咔~~~~~~~~~~~~~~~~~~
快乐的记录一下非GUI模式下执行命令后输出的报告。
非GUI命令
命令为:jmeter -n -t xxxxxxx.jmx -r -l test_result_namexxxx.jtl -e -o /usr/myapp/....testReport
- -n: 非GUI模式执行Jmeter
- -t:执行测试文件所在的位置及文件名
- -r:远程将所有agent启动用在分布式测试场景下,不是分布式测试只是单点就不需要-r
- -l:指定生成测试结果的保存文件,jtl文件格式
- -e:测试结束后,生成测试报告
- -o:指定的文件及文件夹(必须事先不存在)
注意:指定生成的报告文件夹必须不存在,否则会执行失败。如上述的路径下testReport必须不存在
需要深入学习的地方
- Bean Shell用法(调用自己写的或者外部的一些工具类,引用外部的一些java文件,class文件,jar包文件等
https://www.cnblogs.com/puresoul/category/736960.html - lib及lib/ext下的jar插件文件的作用,不同的功能需要用到哪些插件的库文件。比方说,Add>Threads>jp@gc-PerfMon Metrics Collector
- jmeter html报告内参数的详细含义
遗留问题
- ant+jmeter ant.bat执行测试用例后,没有收到邮件通知
-
csv打开乱码问题(目前是改用.txt方式打开)
-
csvread函数方式传参时,读取txt文件参数为乱码
- windows作为master分布式执行时,linux slave机器上测试结果无法返回
- linux上启动jmeter agent时报错 Can't accept TCP connections(CGWEBQA7501)
关于性能测试
Jmeter只是冰山一角,性能测试涉及到很多内容。除了上述说的工具使用之外,还包括性能指标分析,性能监控,性能调优等各方面内容。