1.介绍
文章介绍了通过jmeter事先录制api脚本,然后使用ant进行编译,最后生成html的接口测试报告,并且通过web展示。
这种测试主要应用于持续集成环境中,在运维部署代码完成之后,迅速对所有接口或者部分接口(录制一些过程,比如登录,购物)进行测试,测试完成之后把html的测试报告访问地址以邮件的形式发送给相关人员。
2.环境安装
(1)安装java
tar xf jdk-8u65-linux-x64.tar.gz -C /usr/local/ cd /usr/local/ ln -s jdk1.8.0_65/ jdk echo "JAVA_HOME=/usr/local/jdk" > /etc/profile.d/java.sh echo "export PATH=\$JAVA_HOME/bin:\$PATH" >> /etc/profile.d/java.sh source /etc/profile.d/java.sh java -version
(2)安装jmeter
wget http://apache.fayea.com//jmeter/binaries/apache-jmeter-3.0.tgz tar xf apache-jmeter-3.0.tgz -C /usr/local/ cd /usr/local/ ln -s apache-jmeter-3.0/ jmeter
(3)安装ant
tar xf apache-ant-1.9.7-bin.tar.gz -C /usr/local/ cd /usr/local/ ln -s apache-ant-1.9.7/ ant
优化ant执行路径
echo "export ANT_HOME=/usr/local/ant" > /etc/profile.d/ant.sh echo "export PATH=\$ANT_HOME/bin:\$PATH" >> /etc/profile.d/ant.sh source /etc/profile.d/ant.sh
3.准备工作
(1)使用jmeter添加需要测试的api,并且添加了断言,判断接口的返回值是否正确。线程组设置属性均为1。由于我使用的是我司的接口做测试,一些内容做了屏蔽。
如果执行测试没有问题,就把测试计划保存为一个jmx的文件,这个文件中的内容就是自动化接口测试的内容。
(2)将jmeter所在目录下的extras子目录里的ant-Jmeter-1.1.1.jar复制到Ant所在目录lib子目录之下,这样Ant运行时才能找到”org.programmerplanet.ant.taskdefs.jmeter.JMeterTask”这个类,从而成功触发JMeter脚本
cp /usr/local/jmeter/extras/ant-jmeter-1.1.1.jar /usr/local/ant/lib/
(3)将jmeter.results.shanhe.me.xsl放到jmeter的extras目录下
说明:jmeter.results.shanhe.me.xsl文件是jmeter生成测试报告的web页面,也可以使用其他样式的页面替换,如果不使用此样式文件,则是jmeter默认样式。
4.环境配置
修改jmeter目录下的bin/jmeter.properties文件,修改内容如下
创建一个工作目录result_log放测试报告,script存放录入接口生成的jmx文件
mkdir /data/jmeter-test/{result_log/{html,jt1},script} -p
复制两个图片:
cp /usr/local/jmeter/extras/collapse.png /usr/local/jmeter/extras/expand.png /data/jmeter-test/result_log/html/
设置build.xml
[root@node1 jmeter-test]# cat build.xml <?xml version="1.0" encoding="utf-8"?> <project name="jmeter_test" default="all" basedir="."> <tstamp> <format property="time" pattern="-yyyy-MM-dd-hh-mm" /> </tstamp> <!-- 需要改成自己本地的 Jmeter 目录--> <property name="jmeter.home" value="/usr/local/jmeter/" /> <!-- jmeter生成jtl格式的结果报告的路径--> <property name="jmeter.result.jtl.dir" value="/data/jmeter-test/result_log/jtl/" /> <!-- jmeter生成html格式的结果报告的路径--> <property name="jmeter.result.html.dir" value="/data/jmeter-test/result_log/html/" /> <!-- 生成的报告的前缀 --> <property name="ReportName" value="api-auto-test" /> <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="ComputerName" value="will" /> <target name="all"> <antcall target="test" /> <antcall target="report" /> </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="/data/jmeter/script/" includes="*.jmx" /> </jmeter> </target> <target name="report"> <xslt in="${jmeter.result.jtlName}" out="${jmeter.result.htmlName}" style="${jmeter.home}/extras/jmeter.results.shanhe.me.xsl" /> <!-- 因为上面生成报告的时候,不会将相关的图片也一起拷贝至目标目录,所以,需要手动拷贝 --> <copy todir="${jmeter.result.html.dir}"> <fileset dir="${jmeter.home}/extras"> <include name="collapse.png" /> <include name="expand.png" /> </fileset> </copy> </target> </project>
最后jmeter的工作目录是这样的结构
执行ant构建:出现SUCCESSFUL表示构建是成功的
5.web页面显示测试报告
由于测试报告是生成在linux平台,无法直接看到测试报告,所有需要搭建一个apache或者Nginx将测试报告通过web页面的形式提供出来。
软件安装,并删除默认配置文件
yum -y install httpd rm -f /etc/httpd/conf.d/welcome.conf
将配置文件中的如下内容进行修改
yum -y install httpd rm -f /etc/httpd/conf.d/welcome.conf
修改为
DocumentRoot "/data/jmeter/result_log/" <Directory "/data/jmeter/result_log/">
启动服务:
/etc/init.d/httpd start
访问web界面出现如下内容:
一个接口故障的示例:
转载请注明:西门飞冰的博客 » jmeter实现api自动化测试