搭建的初衷
现状
目前,基于我们组所需要测试的点,很大一部分都是跟接口相关的,不管是我们系统内部的接口还是第三方(外部系统)的接口。部分接口还涉及到对传输数据的加密解密处理,那么,在日常的测试工作中,难免需要开发为我们提供加解密的工具或者我们自己编写小工具进行测试。随着接口数量的增多,我们为每一个项目开发的小工具也越来越多,每个小工具的使用方法也不太相同,隐性的增加了一些维护成本和使用成本。其实很多方法都是可以复用的,WEB接口测试的方法也都大致相同,那我们是否可以考虑整合一下,做一个统一的测试平台呢?
常规接口测试工具
WEB接口测试的方法,通常都是模拟客户端向服务器发送请求,服务器处理后返回请求结果,然后在检查返回的结果是否符合预期,检查返回的数据格式、字段以及异常请求时服务器是否返回异常等等,尤其涉及第三方接口时,需要考虑接口的安全性,是否可以随意获取等等。
那常规的接口我们可以使用像Loadrunner、Jmeter、Postman、Fiddler这类性能测试工具或抓包工具来模拟请求,当然熟悉Python或其他开发语言的话,也可以使用类似httpclient、httplib之类的库自行编写脚本模拟客户的请求。
需要解决的痛点
基于我们所测试的接口特点、不涉及加密加签的接口都可以使用已有的测试工具来模拟客户端请求来测试、那么涉及到加密加签的接口我们就需要自行编写小工具来进行测试了。
不能使用现成的工具是因为基于我们所测试的接口特点不能满足我们的测试需求:
1. 数据的加密解密算法不同
2. 数据的加签验签算法不同
3. 签名的位置,一些要求放在Headers中传输,一些要求当做Body参数传输
4. 接口请求有时效限制
如果用现成的工具来测试,我们需要单独生成这些数据后再拼成完整的请求数据,过程会异常麻烦。所以我们需要为不同的项目编写测试小工具来测试,为了我们编写的小工具更具备通用性,降低使用和维护成本,让没有编码基础的测试人员也能轻松完成这类接口的测试工作,方便回归测试,就有了搭建这么一个接口测试平台的想法。
平台框架图
平台预览
登录、注册
个人信息管理
设置
单接口测试
多接口测试配置
任务管理
测试报告
扩展功能
部署说明(Linux)
环境准备
测试平台是基于Python 3.5开发的,所以需要Python 3以上版本,推荐安装Python 3.5
使用了tornado web开发框架,了解tornado。
安装需要的模块
- pip install tornado sqlalchemy apscheduler pymysql pycrypto
如果在安装模块的过程中还缺少其他模块,请自行根据提示进行安装。
另外还使用了前端框架Bootstrap
代码部署
将源码上传到服务器的任意位置、基于规范,建议上传到存放web应用的统一目录中。
Nginx配置
- upstream tornadoes {
- server 127.0.0.1:19090;
- server 127.0.0.1:19091;
- server 127.0.0.1:19092;
- server 127.0.0.1:19093;
- server 127.0.0.1:19094;
- server 127.0.0.1:19095;
- server 127.0.0.1:19096;
- server 127.0.0.1:19097;
- server 127.0.0.1:19098;
- server 127.0.0.1:19099;
- }
- server {
- listen 9999;
- server_name 172.20.20.86;
- access_log off;
- index index.html index.htm index.py;
- root /opt/APITest_platform;
- location / {
- proxy_pass http://tornadoes;
- include public_config/proxy.conf;
- }
- location /static/ {
- root /opt/APITest_platform/static;
- if ($query_string) {
- expires max;
- }
- }
- location ~ .*\.(gif|jpg|jpeg.png@!medium|bmp|swf|flv|ico|eot|ttf|svg|woff|woff2)$ {
- expires 30d;
- access_log off;
- }
- location ~ .*\.(js|css)?$ {
- expires 7d;
- access_log off;
- }
- }
启停脚本
- #!/bin/bash
- # tornado服务启停脚本
- function startservice(){
- for i in 19090 19091 19092 19093 19094 19095 19096 19097 19098 19099
- do
- if [ $i -eq 19090 ];then
- nohup python3 /opt/APITest_platform/app.py --port=$i --monitor=on --log_file_prefix=/opt/APITest_platform/log/apitest-$i.log > /dev/null 2> &1 &
- else
- nohup python3 /opt/APITest_platform/app.py --port=$i --log_file_prefix=/opt/APITest_platform/log/apitest-$i.log > /dev/null 2> &1 &
- fi
- echo"started port $i's service"
- done
- }
- function stopservice(){
- for i in 19090 19091 19092 19093 19094 19095 19096 19097 19098 19099
- do
- kill -9`ps aux | grep "port=$i" | grep -v "grep" | awk 'NR==1 {printf $2}'`
- echo"stoped port $i's service"
- done
- }
- if [ "$1" = "start" ];then
- startservice
- elif [ "$1" = "stop" ];then
- stopservice
- elif [ "$1" = "restart" ];then
- stopservice
- startservice
- else
- echo"Please input like this:\"$0 start [stop | restart]\""
- fi
启动命令说明
- $python app.py --port=9999 --monitor=off
使用说明
注册、登录
个人信息管理
设置
项目管理
新增项目
禁用项目
删除项目
成员管理
配置自定义参数
配置自定义方法
在配置自定义参数时,Function类型的参数,需要根据项目需求配置自定义方法,具体步骤如下:
1. 进入源码中的encryption目录
2. 打开customfunc.py文件
3. 在customfunc.py文件末尾添加新增的方法
4. 打开config.py文件
5. 找到自定义方法配置所在位置,新增一行配置
6. 重启服务
Host配置
Host配置用于通过切换域名指向不同的ip地址来达到测试不同测试环境的目的。
新增HOST
删除HOST
禁用 / 启用HOST
接口配置
新增接口
删除接口
接口完整性检查配置
接口默认请求HEADERS配置
接口默认请求BODY配置
加解密配置
新增配置
删除配置
新增加解密处理方法
1. 进入encryption目录
2. 如果需要添加的加解密方法不在系统预设的AES、DES、DES3三大类中,可以在encryption目录中新建一个加密类文件
3. 打开function.py文件,参考该文件中的方法在文件末尾新增处理方法。
4. 打开config.py文件,配置加解密方法
5. 保存配置后重启服务
单接口测试
批量接口测试配置
新增测试接口
选择测试接口
立即执行任务
预约执行任务
扩展功能
加密调试
解密调试