jmeter接口自动化测试环境部署
注意:以下内容适应用于公司测试团队小,同时技术不足以开发或者不愿意投入时间精力开发接口自动化测试平台的测试团队。同时本文章内容是使用docker技术实现搭建,当然如果公司没有使用docker技术的也适用。将docker镜像看作是一台服务器即可。但是docker并不是虚拟机。他只是服务器中的一个进程。请读者不要混淆。
另外需要该文章pdf版本的读者可在百度网盘下载
链接:https://pan.baidu.com/s/1N7lkkh29YZgPB4RJF8Ywvg 密码:rked
一、概述
jmeter是做API和性能测试的一把利器。也是接口自动化测试的一种非常棒的一款开源的测试软件。本次接口自动化的环境搭建主要围绕着jmeter展开。主要用到的工具/应用程序有:jmeter+ant+apache/tomcat+jenkins+DingDing+SVN。搭建自动化测试环境的时候注意,无论是任何的框架或者说是架构都是围绕着简单、易用、功能强大三个特点来开展的。所以我们要做的就是尽可能能的减少重复性的操作。让使用者能够节省时间的同时尽可能的保证该架构的稳定性。
结构图如下:
注意:该内容讲解的所有内容均在docker镜像中操作、如果有自己服务器的同学可以直接使用服务器进行操作
二、环境准备环境搭建
(一)Linux docker环境搭建
1、centos安装docker
如果linux环境中安装了yum工具包那么直接使用yum install docker便可以直接安装了,在安装过程中如果询问直接‘y’就好
使用docker --version可以查看当前的docker版本
2、ubuntu安装docker
前提条件:Docker 要求 Ubuntu 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的 Ubuntu 版本是否支持 Docker。
通过 uname -r 命令查看你当前的内核版本
检查完版本后在命令行中输入wget -qO- https://get.docker.com/ | sh
输入当前用户的密码后,就会下载脚本并且安装Docker及依赖包。
安装完成后有个提示:
If you would like to use Docker as a non-root user, you should now consider
adding your user to the "docker" group with something like:
sudo usermod -aG docker runoob
Remember that you will have to log out and back in for this to take effect!
使用docker --version可以查看当前的docker版本
3、启动docker
service docker start
4、下载linux镜像文件
5、搜索镜像
搜索ssh镜像文件docker search ssh
6、下载镜像
下载镜像文件到本地 docker pull jdeathe/centos-ssh
7、检查与查看
查看镜像文件是否下载成功 docker images
8、运行docker镜像并开启所需端口
1)运行镜像 “docker run -it --name jmeterTest -d -p 7890:8080 -p 7891:22 -p 7892:80 jdeathe/centos-ssh”此命令会运行docker仓库中的jdeathe/centos-ssh镜像并重新命名为jmeterTest 并且会将镜像中的8080、22、80端口映射到docker宿主机的7890、7891、7892上。
2)查看正在运行的docker镜像 “docker ps”
3)进入docker镜像内执行sh命令 “docker exec -it jmeterTest bash”,如果此时发现主机名称变成了12位的字符便成功了,不过你会发现字符是你启动docker镜像的时候返回给你的前12位字符
(二)、安装JDK
1、下载
下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html,
2、上传
将jmeter压缩包上传到服务器,由于docker下载的镜像是比较干净的镜像所以有很多我们常见的命令不能执行,需要我们手动的去下载。所以先使用rz或者scp命令将压缩包上传到宿主机,退到宿主机只要执行exit命令就可以了
复制jmeter压缩文件到运行的镜像中
将镜像文件中的jmeter压缩包解压到镜像的usr/local目录下
新增jmeter“JAVA_HOME”环境变量,并修改完后让配置立即生效
查看java版本 java -version
(三)、安装jmeter
1、下载jmeter
地址:http://jmeter.apache.org/download_jmeter.cgi。在jmeter官网中有两处下载:Binaries为jmeter应用程序下载。Source为源码下载。下载的时候可以在Binaries处自己选择想要下载的格式,.tgz和.zip。这里我选择第一个.tgz。(两个是一样的,下载后只是解压格式不一样)
2、将jmeter压缩包上传到服务器。
复制jmeter压缩文件到运行的镜像中
将镜像文件中的jmeter压缩包解压到镜像的usr/local目录下
新增jmeter“JMTER_HOME”环境变量,并修改完后让配置立即生效
(四)、安装ANT
1、下载ANT
地址:https://ant.apache.org/bindownload.cgi
2、将jmeter压缩包上传到服务器。
复制jmeter压缩文件到运行的镜像中
将镜像文件中的jmeter压缩包解压到镜像的usr/local目录下
新增jmeter“ANT_HOME”环境变量,并修改完后让配置立即生效
3、配置ANT
将jmeter目录下的ant-jmeter-1.1.1.jar文件复制到ANT文件夹的lib目录下
(五)、安装svn
执行命令:yum install subversion安装完成后svn --version查看当前svn版本
(六)、安装apache
1、安装
执行命令:yum install -y httpd 暗转完成后输入httpd -v查看当前版本
查看完当前版本后访问该镜像,【http://ip地址:端口】
(七)、安装jenkins
1、下载
下载地址 :https://jenkins.io/download/ 选择一个与自己docker镜像相匹配的jenkins包,或者下载java的版本。这里为了教学方便所以选择下载java版本
2、将jenkins包上传到服务器。
复制jenkins包文件到运行的镜像中
运行jenkins
3、jenkins基础配置
启动后访问地址:http://ip地址:7890/
根据jenkins提示在docker镜像中找到对应路径文件,并打开复制内容,黏贴。黏贴后安装推介的插件
创建初始化帐号(最高权限)
三、文件环境准备
(一)、文件目录准备
1、svn新建jmeterCase
新建jmeterCase文件夹用于存放jmeter自动化测试脚本
(二)、jmeter脚本数据准备
(三)、ANT数据文件准备
新建一个.xml的ANT编译文件内容格式如下
<?xml version="1.0" encoding="utf-8"?>
<!--Project为整个量的根目录;name随便写,可自行更改;default默认执行什么任务,下面有个target name = "all";basedir为.代表当前目录-->
<project name="jmeter_test" default="all" basedir="/var/www/jmeterCase/case/">
<tstamp>
<!-- 这里是加入了年月日时分秒,用来加在报告的后缀上-->
<format property="time" pattern="yyyyMMddhhmmss" />
</tstamp>
<!-- 需要改成自己本地的 Jmeter 目录,写到bin目录的上一步就可以-->
<property name="jmeter.home" value="/home/ubuntu/softWare/qjclouds/apache-jmeter-5.0" />
<!-- jmeter生成jtl格式的结果报告的路径-->
<property name="jmeter.result.jtl.dir" value="/var/www/jmeterCase/report/jtl" />
<!-- jmeter生成html格式的结果报告的路径-->
<property name="jmeter.result.html.dir" value="/var/www/html/report" />
<!-- 生成的报告的前缀ReportName的value可以自定义值,下面的jtl和html的名字是用变量来的也不需要改 -->
<property name="ReportName" value="${caseName}" />
<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="mail_to" value="xxxx@xxxxx.com" />
<!-- 电脑地址,也不用,可以删除 -->
<property name="ComputerName" value="Admin" />
<!-- 对应到上面的,default为all,下面调用了两个:test和report-->
<target name="all">
<antcall target="test" />
<antcall target="report" />
</target>
<!-- 对应到上面的target为test -->
<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="/var/www/jmeterCase/case" includes="${caseName}.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为report -->
<target name="report">
<tstamp><format property="report.datestamp" pattern="yyyy/MM/dd HH:mm"/></tstamp>
<xslt classpathref="xslt.classpath" force="true" in="${jmeter.result.jtlName}" out="${jmeter.result.htmlName}" style="${jmeter.home}/extras/jmeter.results.shanhe.me.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>
注意:这里个modle的脚本文件名称用${caseName}代替了
(四)DINGDING文件
因为整个自动化结构都是由钉钉通知的所以首先要对钉钉消息进行模版化。在新建模版化json文件之前,我们需要先在DingDing上创建一个群,并在群内开启一个钉钉机器人,新建一个json文件内容如下:
{
"msgtype": "link",
"link": {
"text": "jmeter编译成功",
"title": "接口自动化环境通知!!!",
"picUrl": "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1547116083262&di=a123ecc9c1ae1b57809a51e83a81369a&imgtype=0&src=http%3A%2F%2F5b0988e595225.cdn.sohucs.com%2Fimages%2F20180623%2Fa55f0483026a41bf861e3c82afb7b9b4.jpeg",
"messageUrl": "http://xxx.xxx.xxx.xxx/report/${html}"
}
}
注意:这里个modle的脚本文件名称用${caseName}代替了
(五)、文件上传
将jmeter脚本名称与ANT编译文件名称改为一致的文件名称例如:demo.xml、demo.jmx。改完名称后将jmeter脚本上传到jmeterCase文件夹下case文件夹。
(六)、服务器文件目录准备
1、新建文件夹bin、DingDing
命令:mkdir 目录名称
2、模版文件上传
将demo.xml、demo.json文件上传到bin目录
3、检出jmeterCase目录
四、sh命令准备
(一)、创建新的ANT启动.xml文件sh
内容如下:
home=/var/www
cp ${home}/bin/demo.xml ${home}/bin/$1.xml
sed -i -e 's/${caseName}/'$1'/g' ${home}/bin/$1.xml
mv ${home}/bin/$1.xml ${home}/jmeterCase/case/$1.xml
svn add ${home}/jmeterCase/case/$1.xml
svn commit -m 新增$1.xml文件 ${home}/jmeterCase/case/$1.xml
(二)、发送钉钉消息sh
内容如下:
#定义jmeter自动化home文件夹
home=/var/www
if [ ! -f ${home}/jmeterCase/case/"$1".xml ]; then
sh -x ${home}/bin/createAntXML.sh $1
fi
#更新html报告文件夹
svn up ${home}/html/
#更新用例文件夹
svn up ${home}/jmeterCase/
#调用ant执行jmeter脚本并生成报告
ant -f ${home}/jmeterCase/case/$1.xml
#创建随机变量文件名
random=${RANDOM}
#遍历report目录下以参数$1开头的文件并排序,将内容吧写入到随机文件
ls -t ${home}/html/report | grep $1 >>${home}/html/report/${random}.txt
#读取随机文件的第一行文本
file=$(head -1 $home/html/report/${random}.txt)
#删除随机文件
rm -rf ${home}/html/report/${random}.txt
#删除钉钉消息文件
rm -rf ${home}/DingDing/$1.json
#复制消息文件
cp ${home}/DingDing/msg.json ${home}/DingDing/$1.json
#替换url
sed -i -e 's/${html}/'${file}'/g' ${home}/DingDing/$1.json
#替换消息标题
sed -i -e 's/jmeter编译成功/【'$1'】jmeter脚本编译成功,点击查阅:http:\/\/111.230.223.145\/report\/'$file'/g' ${home}/DingDing/$1.json
#读取json文件
json=$(head -n 100 ${home}/DingDing/$1.json)
#发送钉钉消息
if [ $(grep -c "class=\"failure\"" ${home}/html/report/${file}) -eq 1 ]; then
curl https://oapi.dingtalk.com/robot/send?access_token=992debb70f5fe66037383d5e7635e99cdc1608957affc6c4256127b500526c5a -H 'Content-Type: application/json' -H "Data_Type:msg" -X POST -d "${json}"
fi
注意:最后发送钉钉消息时将之前创建的DingDing机器人的token换成自己的“access_token”
五、jenkins配置
新建一个job
配置参数化构建
添加需要执行的命令