我在百度上没有找到完整的可实施的接口自动化测试方案,要么是写了一半没说后续测试用例如何便捷的维护,要么就是都是环境搭建篇。
我经过了如下流程的摸索给出了这个比较适合的方案

【1】试过的几种方案

【1.1】第一阶段:用postman来做接口测试

用postman做接口测试,也就是在postman中test模块编写断言,单个接口单个接口的手动执行

【1.2】第二阶段:把postman集成到jenkins进行自动化测试

我在买《接口自动化测试持续集成Postman+Newman+Git+Jenkins+钉钉》之前,就实现了Postman+Newman+Jenkins+钉钉的集成方案。但是有几个问题我找不到解决方案才买了书:
为了方便维护测试数据,我们希望在接口测试中,把数据文件和编码分离,遇到的问题有:

1、多个接口的测试用例数据写在同一个csv里
一个collection中有n个接口,所有接口的测试数据都写在同一个cvs文件中。
如果把这些接口的测试用例数据写在一个数据文件中(假设数据文件有100条测试用例),那么每个接口都会遍历100次。可是,这100次中有些测试用例有些接口并不需要执行,会导致很多接口浪费时间在进行无意义的迭代

2、每个接口的测试用例数据都分别一个csv里
一个collection中有n个接口,每个接口都有自己的测试用例数据文件,
那么不管是newman还是postman的collection runner,一次都只能使用一个数据文件进行接口测试(这在jenkins集成就变得困难,我没思路怎么去实现集成)

3、我尝试了newman的--folder参数,在此前把一个colleciton的每个接口都放在不同文件夹中,那么实行了使用newman run每个接口,每个接口都能有自己独立的数据文件。
但是在jenkins上却变得维护困难,得有多个构建器才能实现,意味着每新增一个接口都需要增加一个构建器。
如下图
jenkins问题.png

书到了的第二天,我看完了,没有找到我要的方案,写了邮件给作者,作者一周后回复我说

Postman确实存在这个问题,对接口数据的参数化,实现的情况较复杂,实际上我的建议是。只把平时接口调试的过程中累积的一些接口文档备份下来作为日后测试的一个集合。如果你想深入的做接口自动化测试建议两个方案,第一,使用JMeter;第二,通过语言编写请求(比如Python中的requests的包)。

因此我放弃了postman作为接口测试的方案,后期维护可能力不从心

【1.3】现阶段:JMeter+SVN+Python+Jenkins实现自动化构建和自动化测试

也就是本文的主要内容
这里的JMeter用来做接口测试,而SVN用来托管测试脚本,Jenkins是持续集成平台,sPython脚本不是必须的,任意一门语言都行,因为Jenkins的构建脚本需要编写bat批处理命令,我不熟悉,因此简单的在Jenkins的构建批处理脚本中去调用Python脚本,从而我可以使用Python完整整个自动化测试的过程

【2】写在前面

【2.1】本文档实现的自动化构建和自动化测试方案流程

1、测试人员向SVN提交接口测试用例(jmx文件及数据文件等)
2、SVN通知Jenkins进行构建
3、Jenkins进入构建,调用Python构建脚本
4、Python脚本对全部接口测试用例调用JMeter进行测试,并把结果分析通知到Jenkins
5、Jenkins进行后续构建,比如通知到钉钉、发送邮件等
我做了非常多的细节处理,确定了该方案可实际用于项目中:
比如众多测试人员提交测试计划后,不同构建版本会有序存放,使得可以对应起来
在Jenkins控制台输出整个自动化测试过程的情况,包括执行进度、异常和断言情况。
执行Python和JMeter等地方进行了参数化处理,使得迁移部署不用修改太多东西
1589536022381-b843d910-c043-4700-aa15-8660d2616f10.jpeg

【2.2】环境准备

1、jenkins集成Tomat包:https://mirrors.tuna.tsinghua.edu.cn/jenkins/war/latest/
https://mirrors.tuna.tsinghua.edu.cn/jenkins/windows-stable/jenkins-2.204.5.zip
2、Python3.6
3、SVN的安装:https://www.yuque.com/oxa3qz/test/qqltp1
说明:
1、jenkins如果你下的不是集成包,是war项目包,则对应下面安装jenkins的第一种方式
2、Python3.6版本不是指定的,通常来说,Python 3.x都可以,尽量使用python3.6,避免一些诸如函数不再支持、语法变动等问题
3、SVN搭建,是用来作为接口测试用例仓库的地址

【2.3】安装Python环境

【2.3.1】关于多python环境切换问题

如果你电脑没有python2环境那是最好的了,这一小节就跳过。里面都是坑
基于不同开发测试环境的原因,有些项目不得不在python2.x下进行开发测试,而有些项目则在python3.x上进行,环境问题让人头大。
如果你的电脑原本有python 2.x,现在安装了python 3.x(先后无所谓,都可能有问题),则你可能会混淆python和pip等几个命令
强烈建议在执行以下脚本时测试如下命令:
打开CMD测试如下命令:

输入:python 输出的环境代表你当前的python默认运行环境
输入:py -2 -V 输出的版本应当为python 2.x
输入:py -3 -V 输出的版本应当为python 3.x
输入:pip -V 输出的python环境应当为python 2.x
输入:pip3 -V 输出的python环境应当是python 3.x

如果以上输出结果不对应,则需要修改,比如你的pip3,对应的python环境可能是python2.x(我们的二组测试服就有这个问题,软链接指向错了)
当你需要执行基于python2.x开发的脚本时使用py -2:

py -2 abc.py

当你需要执行基于python3.x开发的脚本时使用py -3

Py -3 def.py

当你需要安装一个第三方库到python2.x环境时使用pip install

pip install BeautifulSoup

当你需要安装一个第三方库到python3.x环境时使用pip3 install

pip3 install BeatufulSoup

【2.4】安装步骤

这里最后一步注意勾选Add Python 3.6 to PATH,方便自己调试,不勾选也没有关系

python安装.png

【2.5】更换pip软件镜像源

这个步骤不是必须的,但是不设置,下载第三方库会非常非常非常非常非常非常非常非常慢
1、找到pip的配置文件:pip.ini(如果找不到则自己新建一个txt,改名为pip)
我的电脑pip配置文件在:

C:UserslonelylizardAppDataRoamingpippip.ini

lonelylizard对应你的电脑用户名
2、打开文件,写入两行,这里我用的是清华镜像源,你用其他的也行:

[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple/

3、测试一下是否更换成功:打开CMD,输入如下内容:

pip3 install abc

如图你看到如图Looking in indexes的地址是清华源,说明配置生效

更换源测试.png

【2.6】安装必要的依赖

这些依赖是因为后面的构建脚本用到了,所以才要求安装

BeautifulSoup:pip3 install BeautifulSoup

【2.7】安装jenkins的两种方式

【2.7.1】使用jre+tomcat+jenkins.war部署

该种方式不建议,因为实际测试中,依赖tomcat的jenkins在执行bash命令时有些命令时不能正常调用的。比如执行newman,会提示不能内部或外部命令。而实际上系统的cmd可以正常调用

【2.7.1.1】安装JRE环境

建议安装java1.8。java的版本会和Tomcat版本有关系

【2.7.1.2】安装Tomcat

官网下载:https://tomcat.apache.org/download-70.cgi
我下载的是tomcat 7.0,要求java环境高于java 6
jenkins是一个tomcat项目,需要在jre环境下运行。
本机需要安装jre运行环境(这里先省略掉,因为我本机已安装和配置系统路径)

tomcat安装.png

修改tomcat端口,不修改也可以,只是jenkins的默认端口也是8080,总会需要修改一个。

修改tomcat端口.png

选择jre所在目录,如果java环境默认安装在C盘,则会自动寻找,如果在其他盘、其他目录,则需要手动指定

tomcat配置jre环境.png

修改tomcat的安装目录,这里建议改。不要默认安装到C盘,会导致一些权限问题

tomcat安装路径.png

安装完直接Run

tomcat run.png

会自动启动服务,启动后再右下角可以看到tomcat的图标,表示服务正在运行

启动tomcat服务.png

电脑任务栏检查tomcat.png

浏览器中访问:
localhost:8080
或者是
127.0.0.1:8080
如果你看到下面这个页面,说明安装成功,下面是tomcat预装项目

tomcat默认页面.png

【2.7.1.3】安装jenkins

把下载的jenkins.war放在tomcat的webapps目录下
浏览器访问:localhost:8080/jenkins
tomcat会自动解包部署jenkins.war

jenkins war.png

jenkins初始化页面.png

耐心等待出现如下图页面

jenkins密码.png

不要直接在资源管理器输入

C:WindowsServiceProfilesLocalService.jenkinssecrets\

或者

C:WindowsServiceProfilesLocalService.jenkinssecretsinitialAdminPassword

因为你没有权限直接访问。
在本地电脑资源管理器上输入:

C:WindowsServiceProfilesLocalService

回车,会要求授权,授权后一层一层进入

jenkins初始化密码位置.png

使用文本编辑器打开initialAdminPassword文件,复制这个密码到刚才打开的网页“解锁Jenkins”粘贴

初始化密码.png

粘贴密码.png

加载有点慢,耐心等待。
这里建议点击右上角的X,先进入到控制台,后续我们修改插件镜像源中心再进行下载插件(那时下载很快)

jenkins安装插件.png

jenkins就绪.png

【2.7.2】使用jenkins.msi直接安装部署

这个安装过程只需要选择安装目录即可。该msi包中集成了http服务和jre运行环境,非常便捷
修改管理员密码先。比如我修改密码为rrzuji2333

修改密码.png

接下来是更换插件镜像源,左边导航栏点击Manage Jenkins

更换jenkins镜像源.png

选择插件管理:Manage Plugins

管理插件页面.png

点击插件中心update center

插件更新页面.png

【2.7.3】必要的配置

安装简体中文插件:搜索localization-zh-cn
正在安装localization-zh-cn

安装中文插件中.png

关闭tomcat服务,再启动,启动后访问jenkins即可。

安装完成.png

【2.7.4】jenkins控制台输出乱码问题

jenkins乱码配置1.png

在jenkins管理-系统配置
配置全局变量:
键:LANG
值:zh.CH.UTF-8

jenkins乱码配置2.png

在jenkins安装目下找到jenkins.xml.如图位置加入:
-Difile.encoding=utf-8

jenkins配置修改编码.png

以管理员模式打开CMD:
关闭jenkins服务:net stop jenkins
开启jenkins服务:net start jenkins
现在不乱码了:

控制台不乱码截图.png

【2.7.5】设置更新源

官方更新源汇总:
http://mirrors.jenkins-ci.org/status.html#cn
jenkins中文社区镜像源汇总:
https://jenkins-zh.cn/tutorial/management/mirror/
中文社区更换镜像源教程:
https://jenkins-zh.cn/tutorial/management/plugin/update-center/
或者参考这里(由jenkins中文社区维护)
我居然找不到链接了,直接说:
进入底部的jenkins社区,点击设置更新中心地址,进入到设置更新源页面,在更新源设置页面点击提交,再点击获取。
再次回到jenkins社区,点击使用即可
备注:请在安装完localization-zh-cn插件后再进行本步骤

912.png

【2.8】Jenkins卸载方式

【2.8.1】jre+tomcat+jenkins.war部署的删除jenkins方式

卸载jenkins方法:
删除tomcat目录下的jenkins文件夹(可能需要先停止tomcat服务)
删除.jenkins文件夹

【2.8.2】jenkins.msi直接安装的卸载方式

系统控制台-jenkins,双击进入卸载

【2.9】SVN HOOK

要让jenkins自动构建有两种方案,一种是在jenkins项目上使用构建触发器,一种是在SVN服务器上配置hook,我选择了后者。

【3.0】配置SVN HOOK

1、先登录Jenkins,在首页面板选择Jenkins管理->Jenkins CLI

jenkins cli.png

2、下载jenkins-cli.jar
在Jenkins的面板中,找到Jenkins CLI。如图所示
下载cli.png

点击如图位置下载jenkins-cli.jar

cli下载2.png

3、把该文件复制到一个不会被容易动到的位置,比如我随意丢在了D盘的根目录下(不要学我,坏习惯)
4、在开始菜单找到VisualSVN Server,并打开,这是SVN服务器的管理程序
5、新建接口测试用例管理仓库。如图所示,接口测试用例仓库下有data、resulit和script(不是必要的,但是最好有,这是规范文件分离)

测试用例仓库.png

1、在接口测试用例仓库上右键单击,选择属性(Properties)

属性.png

2、选择Hooks选项卡
因为我们是要在仓库有进行提交后触发构建,所以选择的是Post-commit hook
选择编辑

SVN hook位置.png

3、在弹出的Post-commit hoot页面,填写如下内容
java -jar [jenkins-cli.jar路径] -s [jenkins访问地址] -auth [jenkins用户名]:[jenkins用户密码] build [jenkins项目名称]
示例:我的项目名称为JMeter_SVN_TEST,访问地址为http://localhost:8080,jenkins用户为admin/1122
java -jar D:/jenkins-cli.jar -s http://localhost:8080 -auth admin:1122 build JMeter_SVN_TEST
注意:
1、请先在你的cmd中执行:java 以确保java命令有效

svn hook配置.png

【3.1】SVN检出准备工作

4、在刚才的接口测试用例仓库的script目录下,新建一个文件,任意文件即可。创建后先别推送到SVN服务器
6、复制接口测试仓库地址

复制仓库地址.png

7、本地检出该仓库:在想要右键
选择TortoiseSVN->Export
注:按正常情况,你本地是有SVN客户端的,如果你没有客户端,请先按照部门SVN文档安装SVN用户端

检出.png

在下图1处输入接口测试用例仓库的SVN地址
2处是默认你当前的位置,为该仓库即将检出的位置
3处选择Immediate children,including folders,否则该仓库的空文件夹和子文件你本地可能不会有

检出地址.png

检出之后你的样子如下图,会有多个目录和子文件夹里的文件,说明你拉取的没有错

检出仓库.png

【3.2】jenkins配置SVN插件

jenkins安装svn插件,用来jenkins构建时读取测试用例,该插件本质上就是一个SVN客户端,jenkins项目正确配置了SVN插件后,则每次构建都会从SVN服务器拉取整个仓库到jenkins的workspace目录下面
插件中心搜索:svn
选择Subversion Plug-in即可
安装完重启jenkins

svn插件.png

新建一个项目:

新建项目.png

项目名称.png

jenkins项目配置SVN
1、在源码管理TAB下面,选中Subversion,如果你没有Subversion,说明你的svn插件没安装完,或者没重启jenkins
2、在2处输入SVN仓库地址,比如http://HAVOC-PC/svn/api_test/
3、在3处选择你的SVN账户,第一次你需要点击下面的添加按钮,添加一个账户,账户的名称和密码,就是你的SVN账户和密码
4、选择应用,再选择保存

设置svn账户.png

【3.3】测试钩子

累死累活,终于能开始测试jenkins自动构建了
现在进行简单的提交SVN测试
在SVN仓库(你本地的SVN目录,客户端)下新建一个txt文件,并上传到SVN服务器(该过程和普通提交SVN文件无差异)
在jenkins上检查该项目是否有构建记录。如果有构建记录,并且构建记录表明jenkins检出了SVN测试用例仓库。如下图红圈所示。有就表明Hook成功

测试钩子.png

【3.4】jenkins自动构建测试

如果你看到这一步,恭喜你,就差一点点了。
前面测试了SVN提交会自动触发jenkins构建,但是实际上不能叫构建,因为里面没有真实的对测试计划jmx进行自动化构建、测试和输出测试结果。

【3.4.1】构建脚本的核心内容

整个构建的核心是python脚本实现的,python脚本负责以下内容:
1、接受jenkins变量
2、遍历该项目的全部jmx文件
3、调用JMeter执行测试计划
4、检查测试计划生成的测试报告是否有失败和错误
5、反馈给Jenkins进行下一步处理

【3.4.2】整个自动化构建和自动化测试流程

自动化流程.jpeg

对项目添加构建脚本
构建文件:构建脚本还在完善,烂代码,不要介意。传送门
在JenkinsAndJMeter项目的配置项进来,构建器一栏添加一个windows batch commmand
如图,输入如下内容:

python.exe绝对路径 -u 构建脚本绝对路径 -ws %WORKSPACE% -jk %JENKINS_HOME% -pname %JOB_NAME% -bid %BUILD_ID%

栗子:

C:UserslonelylizardAppDataLocalProgramsPythonPython36python.exe -u D:jmeter_testJMeterAndJenkinsTestconst_JMeter.py -ws %WORKSPACE% -jk %JENKINS_HOME% -pname %JOB_NAME% -bid %BUILD_ID%

注意:
1、jenkins的batch窗口无法获得系统配置的变量,你不能直接输入python const_JMeter.py。必须是python.exe绝对路径,const_JMeter.py绝对路径。
2、路径中的-u参数表示python执行时不对输出进行缓冲,只有加了这个参数才能在控制台看到实时输出
3、后面的一系列参数都是jenkins提供的环境变量,传入给构建脚本处理,不可省略

构建脚本位置.png

注意啊,下图输入的内容不能换行,是自动换行的

构建脚本调用.png

【3.4.3】SVN提交,触发构建测试

OK,现在在你的测试用例仓库内提交1个测试计划jmx(请按照接口测试用例规范编写,如果不按规范编写,构建会抛出错误,根据错误修改)
示例jmx:
示例文件里有3个请求,共2个断言失败,一个断言成功

构建中.png

构建结果查看
查看控制台输出

构建结果.png

至此,JMeter+Jenkins集成调试完毕,完成了自动构建+自动测试
撒花

【3.5】部署jenkins构建通知机器人

在插件管理中搜索DingTalk插件
等待安装完成后重启jenkins

钉钉插件.png

在系统设置中,机器人一栏点击新增,选择钉钉机器人,
id不用填写,系统自动生成
名称:随意
webhook:钉钉自定义机器人创建时会提供webhook,复制下来粘贴上去
安全策略:和钉钉机器人的设置保持一致,这里我只是设置了关键词。

钉钉配置.png

应用完后,每一次构建完成,都会推送到钉钉群里

钉钉推送.png

【3.6】维护

测试结果文件位置:在jenkins安装目录下的result对应的项目里,项目内的编号文件夹为构建版本对应的测试结果
Jenkins项目位置:在jenkins安装目录下的workspace文件夹

维护.png