接口自动化持续测试
1. 简介
文档目的
编写接口自动化持续测试文档,是为了指导魔方测试人员进行接口自动化测试。
项目简介
随着魔方版本的更新、迭代,魔方测试用于回归测试的时间越来越长,需要考虑使用自动化手段去进行魔方功能的回归,解放测试人员。之前尝试过使用java+selenium数据驱动的ui自动化,因为选择的是网络上现有的框架,测试效率低,用例维护不方便。且ui变动后原先的测试用例都要调整。本次选择jmeter+ant+jenkins架构进行接口自动化持续测试。Jmeter主要生成接口测试脚本,ant调用jmeter执行脚本,生成报告。Jenkins进行持续集成测试。
变更记录
2. 服务部署
将所需要的安装包上传到/home/jmeter_packages路径下。有以下安装包:
软件 |
版本 |
jdk |
jdk-8u45-linux-x64.tar.gz |
Jmeter |
apache-jmeter-5.4.1.tgz |
apache-ant |
apache-ant-1.9.15-bin.tar.gz |
jenkins |
jenkins-2.138.4-1.1.noarch.rpm |
Jmeter部署
Meter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器, 等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言
Jmeter使用需要jdk,所以先部署jdk。本次使用jdk-8u45-linux-x64.tar.gz安装jdk。
# cd /home/jmeter_packages
# mkdir /home/java && mv jdk-8u45-linux-x64.tar.gz /home/java/
# cd /home/java && tar -zxvf jdk-8u45-linux-x64.tar.gz
# alternatives --install /usr/bin/java java /home/java/jdk1.8.0_45/bin/java 3
# alternatives --config java ###选择刚刚添加的jdk
Selection Command
-----------------------------------------------
*+ 1 /home/java/jdk1.8.0_45/bin/java
Enter to keep the current selection[+], or type selection number: 1
# java -version ###出现版本号表示jdk部署成功
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)
Jdk安装完成后配置jmeter,先解压jmeter安装包。
# mkdir /home/jmeter && mv apache-jmeter-5.4.1.tgz /home/jmeter
# cd /home/jmeter && tar -zxvf apache-jmeter-5.4.1.tgz
修改/etc/profile文件,设置jmeter变量环境,在文件的最后添加一下内容:
# vim /etc/profile
export JMETER_HOME=/home/jmeter/apache-jmeter-5.4.1
export PATH=$JMETER_HOME/lib/ext/ApacheJMeter_core.jar:$JMETER_HOME/lib/jorphan.jar:$JMETER_HOME/lib/logkit-2.0.jar:$JMETER_HOME/bin:$PATH
# source /etc/profile
# jmeter -v ###出现jmeter版本信息表示jmeter部署完成。
修改jmeterinproperties文件,将输出格式由csv修改为xml。
# cd /home/jmeter/apache-jmeter-5.4.1/bin/
# sed -i 's/#jmeter.save.saveservice.output_format=csv/jmeter.save.saveservice.output_format=xml/' jmeter.properties
Ant部署
Apache Ant,是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具。将ant安装包上传到对应路径后进行解压。
# cd /home/jmeter_packages
# mkdir /usr/local/ant && mv apache-ant-1.9.15-bin.tar.gz /usr/local/ant
# cd /usr/local/ant/ && tar -zxvf apache-ant-1.9.15-bin.tar.gz
添加环境变量。
# vim /etc/profile
export ANT_HOME=/usr/local/ant/apache-ant-1.9.15
export PATH=$PATH:$ANT_HOME/bin
# source /etc/profile
# ant -v ###出现版本号表示安装成功
Apache Ant(TM) version 1.9.15 compiled on May 10 2020
Trying the default build file: build.xml
Buildfile: build.xml does not exist!
Build failed
Jmeter和ant部署完成后,需要将/home/jmeter/apache-jmeter-5.4.1/extras/目录下的ant-jmeter-1.1.1.jar放到/usr/local/ant/apache-ant-1.9.15/lib/目录下。
# cp /home/jmeter/apache-jmeter-5.4.1/extras/ant-jmeter-1.1.1.jar /usr/local/ant/apache-ant-1.9.15/lib/
添加build.xml文件,内容如下:
# mkdir /home/test_jmeter/ && cd /home/test_jmeter
# vim build.xml
<?xml version="1.0" encoding="UTF-8"?>
<project name="test_jmeter" default="all" basedir=".">
<tstamp>
<format property="time" pattern="_yyyyMMdd_HHmm" />
</tstamp>
<property name="encoding" value="UTF-8" />
<!-- 需要改成自己本地的 Jmeter 目录-->
<property name="jmeter.home" value="/home/sdd/jmeter/apache-jmeter-5.4.1" />
<property name="report.title" value="test_jmeter"/>
<!-- jmeter生成jtl格式的结果报告的路径-->
<property name="jmeter.result.jtl.dir" value="/home/sdd/test_jmeter/resultLog" />
<!-- jmeter生成html格式的结果报告的路径-->
<property name="jmeter.result.html.dir" value="/home/sdd/test_jmeter/resultLog" />
<!-- 生成的报告的前缀-->
<property name="ReportName" value="TestReport" />
<property name="detail" value="_detail" />
<property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${ReportName}${time}.jtl" />
<property name="jmeter.result.htmlNamedetail" value="${jmeter.result.html.dir}/${ReportName}${time}${detail}.html" />
<property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${ReportName}${time}.html" />
<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="/home/sdd/test_jmeter/" 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">
<tstamp> <format property="report.datestamp" pattern="yyyy/MM/dd HH:mm:ss" /></tstamp>
<!-- 生成明细报告-->
<xslt
in="${jmeter.result.jtlName}"
out="${jmeter.result.htmlNamedetail}"
style="${jmeter.home}/extras/jmeter.results.shanhe.me.xsl">
<param name="dateReport" expression="${report.datestamp}"/>
</xslt>
<!-- 生成简单报告-->
<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="${report.datestamp}"/>
</xslt>
<!-- 因为上面生成报告的时候,不会将相关的图片也一起拷贝至目标目录,所以,需要手动拷贝 -->
<copy todir="${jmeter.result.html.dir}">
<fileset dir="${jmeter.home}/extras">
<include name="collapse.png" />
<include name="expand.png" />
</fileset>
</copy>
</target>
</project>
将jmeter脚本上传到/home/test_jmeter/。
Jenkins部署
Jenkins是一个独立的开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。前身是Hudson是一个可扩展的持续集成引擎。可用于自动化各种任务,如构建,测试和部署软件。
禁用selinux,关闭防火墙。
# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config && setenforce 0
# systemctl stop firewalld && systemctl disable firewalld
进入安装包所在目录,进行安装。
# cd /home/jmeter_packages
# yum -y localinstall jenkins-2.138.4-1.1.noarch.rpm
### /usr/lib/jenkins/jenkins.war WAR包
### /etc/sysconfig/jenkins 配置文件
### /var/lib/jenkins/ 默认的JENKINS_HOME目录
### /var/log/jenkins/jenkins.log Jenkins日志文件
编辑 /etc/sysconfig 下 jenkins 文件,只修改端口和JENKINS_USER。
# vim /etc/sysconfig/jenkins
JENKINS_USER="root"
JENKINS_PORT=”9999”
修改数据存储位置
# mkdir -p /home/jenkins && rm -rf /var/lib/jenkins && cd /var/lib/
# ln -s /home/jenkins jenkins && chmod 777 /home/jenkins && cd /home/jenkins
设置开机自启动
# systemctl enable jenkins && sudo systemctl restart jenkins
修改jenkins插件下载源
# sed -i 's/https/http/g' /home/jenkins/hudson.model.UpdateCenter.xml
重启jenkins,使配置生效
systemctl restart jenkins
访问登录, http://IP:9999,查看密码。
cat /var/lib/jenkins/secrets/initialAdminPassword
填下密码并继续,选择安装推荐插件(等待吧,比较耗时),注意由于网络问题,可能有些插件无法安装成功。
继续,点击 使用admin账号继续 ,也可以创建一个管理员账号。进入jenkins URL 设置页面,点击保存并完成。
点击开始使用jenkins,如果出现页面白屏, systemctl restart jenkins ,刷新页面即可重新登录即可。
Jenkins配置ant,点击系统管理>系统配置
填写admin用户邮箱:
填写发件人邮箱:
返回首页开始新建任务。
新建任务,输入名称,选择“构建一个自由风格的软件项目”,点击确定
General选择丢弃旧的构建
触发器选择定时构建,设置每小时执行一次:00 * * * *
构建时选择ant,并填写配置信息
执行shell命令,将最新的测试报告放到项目的workspace路径。
timestamp=`date +%Y%m%d%H%M%S`
rm -f ./resultLog/*.html
mkdir /home/sdd/test_jmeter/resultLog/$timestamp
cp /home/sdd/test_jmeter/resultLog/*.jtl /home/sdd/test_jmeter/resultLog/$timestamp/
cp /home/sdd/test_jmeter/resultLog/*.html /home/sdd/test_jmeter/resultLog/$timestamp/
cp /home/sdd/test_jmeter/resultLog/TestR*.html ./resultLog/
rm -f /home/sdd/test_jmeter/resultLog/latest/*.jtl
rm -f /home/sdd/test_jmeter/resultLog/latest/*.html
cp /home/sdd/test_jmeter/resultLog/*.jtl /home/sdd/test_jmeter/resultLog/latest/
cd /home/sdd/test_jmeter/resultLog/latest
mv *.jtl latest.jtl
rm -f /home/sdd/test_jmeter/resultLog/*.jtl
mv /home/sdd/test_jmeter/resultLog/*.html /home/sdd/test_jmeter/resultLog/latest
构建完成后生成html报告。
构建失败后发送邮件。
保存后,选择开始执行任务。
JMETER_HOME:/home/sdd/jmeter/apache-jmeter-5.4.1
ANT_HOME:/usr/local/ant/apache-ant-1.9.15
在服务器上完成架构搭建,后续只需要将生成的jmeter脚本上传到/home/sdd/test_jmeter/路径下即可自动执行脚本