由于blog各种垃圾评论太多,而且本人审核评论周期较长,所以懒得管理评论了,就把评论功能关闭,有问题可以直接qq骚扰我

jmeter实现api自动化测试

自动化 西门飞冰 12392℃
[隐藏]

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。由于我使用的是我司的接口做测试,一些内容做了屏蔽。

image001
如果执行测试没有问题,就把测试计划保存为一个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文件,修改内容如下

image002
创建一个工作目录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的工作目录是这样的结构

image003

执行ant构建:出现SUCCESSFUL表示构建是成功的

image004

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界面出现如下内容:

image005

一个接口故障的示例:

image006

 

转载请注明:西门飞冰的博客-专注于Linux运维 » jmeter实现api自动化测试

喜欢 (1)or分享 (0)