Skip to content

An interface automation test solution that uses Jmeter+Ant based on Python

License

Notifications You must be signed in to change notification settings

leeyoshinari/ATI_Jmeter

Repository files navigation

ATI_Jmeter

介绍

本项目是一整套使用Jmeter+Ant+Python完成接口自动化测试的解决方案;特别是多系统的测试任务执行,要比网上的教程方便的多。

整体架构图:
structure

功能:

  1. 使用Jmeter维护接口测试用例;
  2. 使用Ant执行测试任务,并生成测试报告;
  3. 使用Python完成邮件发送及任务调度;
  4. 通过get请求触发任务执行,调度方式灵活;
  5. 具有定时功能,可周期性或者定时执行测试任务;
  6. 通过监控端口,当服务重启后,可自动执行测试任务;
  7. 支持自动从git拉取最新版本;

实现:

  1. 使用Ant执行Jmeter脚本,并生成测试报告;
  2. 考虑到邮件正文内容可读性,定制化修改测试报告模板;
  3. 使用正则表达式提取测试报告中的信息,重新组合成邮件正文;
  4. 通过get请求触发测试任务的执行;
  5. 通过多线程和队列的方式执行测试任务;
  6. 使用aiohttp框架启动后台服务,将测试报告加入到静态资源中,可通过链接访问;
  7. 每次执行测试任务前,自动从git拉取最新版本;如git pull时需要登录,需要提前配置免登录;

生成的测试报告:

  1. Ant生成的测试报告,长这个样子 长这个样子
  2. 邮件收到的测试报告,长这个样子 长这个样子

部署

1、Jmeter和Ant部署参考网上教程,主要介绍测试报告模板修改和build.xml文件

测试报告模板是在jmeter自带模板的基础上修改的,主要修改详见res文件夹中的report截图,说明如下,其他小的修改这里不赘述,可使用文档比较工具自行比较查看,也可在线文档比较 ;

(1) 截图中标注的修改1和修改5,因为默认模板带有2个png的静态文件,生成测试报告时必须带上这2个静态文件,否则测试报告页面不好看,因此,需要去掉这2个静态文件;
(2) 截图中标注的修改2,测试报告一般重点关注测试失败的用例,因此,需要把测试失败的用例展示在前面;
(3) 截图中标注的修改3,把标题改成中文,因为测试报告会发给较多的人;如果你在外企工作,可以改成英文,但是相对应的脚本中的正则表达式也需要修改;
(4) 截图中标注的修改4,添加了一个空的span标签,用于添加自定义的内容,提高发送的测试报告邮件的可读性;
(5) 其他未标注出来的修改点,主要是默认模板没有我想看到的数据,把一些没有展示的数据展示出来,把一些“没用的”数据隐藏起来,以及一些样式的修改;

build.xml文件如下,具体配置已详细说明。强调:为了方便测试报告统一管理,也为了能够自动发送邮件,所有系统的build.xml中的测试报告路径必须是同一个文件夹
build文件

2、克隆repository
git clone https://github.com/leeyoshinari/ATI_Jmeter.git

3、用例编写
在编写JMeter用例时,需要读取配置文件config_default.txt中的变量,然后将变量传递到JMeter中。
读取变量的方法是在beanshell中写Java脚本完成的,具体Java脚本详见beanshell中的脚本。

4、测试用例放置

(1)所有测试用例放在一个统一的文件夹中,例如testCase文件夹;
(2)针对不同系统的不同测试用例,可单独再放入一个文件夹中管理,例如:百度的测试用例放在baidu中、百度的BVT测试用例放在baidu_bvt中、腾讯的测试用例放在tencent中;
(3)每个系统的测试用例文件夹中,都需要放一个配置好的build.xml文件;注意:所有系统的测试报告路径必须是同一个文件夹;
(4)测试用例文件夹具体结构如下:
文件夹结构

强烈建议文件夹及文件名称使用英文
为什么要按照上面的要求放置测试用例?这样放置方便执行测试任务,通过get或post请求http://ip:port/run?systemName=baidu就可以执行百度的测试用例。
get请求,jmeter参数和邮件信息为默认值,post请求传的参数可以覆盖默认值。
post请求传参示例:{"params": {"ip": "127.0.0.1", "port": "9998"}, "email": {"subject": "腾讯接口自动化测试报告", "receiveName": "tencent_all", "receiveEmail": "aaa@baidu.com"}}

5、修改配置文件config.conf

(1)线程池大小,建议设置1就够了;如确实调度较多测试用例的执行,可酌情增加;
(2)测试用例路径和测试报告路径,建议使用绝对路径;其中测试报告路径应和build.xml文件中的路径保持一致;
(3)如接口自动化脚本维护在git上,可配置git本地仓库路径,每次执行任务前,自动从git上拉取最新版本,默认拉取主分支;前提是已经clone到本地了;
(4)邮件发送配置,请确认SMTP服务配置正确;邮箱登录密码配置,请在sendEmail.py文件中第70行设置,如果密码不想让其他人看到,请将该py文件进行编译,或者直接将这个repository打包,具体打包方法,请往下看;

6、运行

Linux:
nohup python3 server.py &
Windows
python server.py

7、打包
经过前5步,如果该repository可以启动,且执行测试任务成功,则可以进行打包,使用pyinstaller进行打包。
pyinstaller安装自行查找教程,须确保安装正确,否则打包会报错,下面直接进行打包:

(1)进入ATI_Jmeter文件夹,执行命令:

pyinstaller -F server.py -p schedule.py -p logger.py -p config.py -p sendEmail.py -p testing.py --hidden-import logger --hidden-import schedule --hidden-import config --hidden-import sendEmail --hidden-import testing

(2)打包完成后,在当前路径下会生成dist文件夹,进入dist文件夹即可找到可执行文件server;
(3)将配置文件config.conf拷贝到dist文件夹下,并修改配置文件;
(4)如需要部署在其他服务器上,可将dist整个文件夹拷贝到其他服务器,启动server
nohup ./server &

8、CI/CD,以Jenkins为例,在Jenkins构建后操作中增加一个get请求,请求的url为http://IP:PORT/run?systemName=系统名称,此处系统名称应和testCase用例文件夹中的对应的系统名称保持一致。

9、如果你所在的项目还没有用到CI/CD,或者项目本身有较多配置项,每次手动更改配置重启项目后,也想自动执行测试任务;亦或是你不想配置CI/CD,则需要执行客户端;
进入client文件夹,将脚本和配置文件拷贝到项目所在的服务器上,运行即可,也可以按照步骤6的方式进行打包。

修改配置文件config.conf:

(1)系统名称必须和测试用例文件夹中的名称保持一致,例如可配置成baidu;如需测试多个系统,名字用英文逗号,隔开;
(2)系统端口号即系统占用的端口号;如需监控多个系统的端口,端口用英文逗号,隔开;
注意:如测试多个系统,系统名称的排序和系统端口的排序必须保持一致

注意

1、如需部署client,部署的服务器必须支持netstat命令,以便根据端口号查进程号;仅支持Linux系统;
2、已经测试的版本:Jmeter-5.2.1、Ant-1.10.7
3、另外还有一个项目,使用Python编写的接口自动化测试框架,用Excel维护测试用例,感兴趣的话可以点我

Requirements

  1. aiohttp>=3.6.2
  2. GitPython>=3.1.2
  3. requests
  4. Python 3.7+

About

An interface automation test solution that uses Jmeter+Ant based on Python

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published