基于之前的 react+unittest+flask 的接口自动化平台开发经验,和趟过的坑,我重新开发了这个接口自动化平台。
平台前端采用的 antd+dva+umi 的 antd-pro 模板,结合平台业务设计开发。后端采用的 flask+sqlalchemy+Blueprint,结构化更加清晰,ORM 的数据库操作更加稳定。自动化脚本的执行部分,我采用的是扩展性和针对性更强的 jmeter。
demo
有特殊网络要求的,可以 download 代码编译部署。如果服务器能连上外网,可以直接通过我已经封装的 docker 镜像安装。
已知 Centos 安装的容器会有异常,建议使用其他系统。
优化了原来的容器时区问题,已经启动了的同学也不必担心,把原来的容器停止后,再创建个新的即可,数据是取得数据库,不会变。
# docker run --env PATH=/root/apache-jmeter-5.0/bin:$PATH -t -i -d -p 8089:80 -p 9022:22 --name=iat6 ownerworld/iat:0.0.6 /bin/start.sh "root:root@127.0.0.1:3306"
这种需要你有一定的运维基础和开发经验。默认你已有 node 和 python 环境。
$ git clone https://github.com/t880216t/IAT.git
$ cnpm i
$ npm run build
生成的 dist 文件夹便是前端部署文件
服务端代码在 server 文件夹中,用的 python flask 框架不需要打包,建议用 gunicorn 启动。(确保你已经在 server 文件夹中)
$ pip install -r requirements.txt
$ gunicorn -w4 -b 0.0.0.0:5000 run:app
本项目开源,欢迎 star,你可以基于自己的需求开发。当然有好的建议或迫切的需要,也欢迎提issues,南京地区非工作时间我也可以提供场外交流 ,新年快乐。
有疑问欢迎也欢迎进群交流:
很炫酷啊,学习学习
使用 py 生成 jmeter 的 jmx 脚本,为什么会这样设计,调用 jmeter,需要 jmeter 层面需要配置什么么。
之前我也有写过用 urllib+unittest 的,考虑到后期平台的扩展,决定用 jmeter,它本身已经很强大了,但团队化协作不方便。如果不是用 docker 镜像安装,需要配置个 jmeter 的环境变量。
问一下第一张图是用什么画的呀
win 开发环境部署怎么弄,gunicorn 是不是 Unix 才行
开发环境不需要配置 gunicorn,直接 python run.py 即可。如果你是 ide,右键 run.py 运行。
是每起一个任务就会起一个 jmeter 的 docker 容器去执行去吗
不是,docker 只有一个,是我部署服务端的,可有可无,看你怎么部署。
每个任务会单独调用 jmeter 命令行,去执行对应任务 jmx 的文件。
使用 docker 安装完成启动后,web 界面的用户名和密码是什么呢?
使用默认的这个登录,或者随意注册提交的时候有这个报错:
请求错误 500: http://172.18.124.26:8089/api/auth/login
服务器发生错误,请检查服务器。
这个从哪个日志中可以看出来报错的原因吗?
win7+pycharm 遇到了点问题
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
开始检查定时任务
[2019-01-30 13:42:56,023] ERROR in app: Exception on /api/IAT/taskList [POST]
Traceback (most recent call last):
File "D:\cjprojects\venv\iatenv\lib\site-packages\flask\app.py", line 1982, in wsgi_app
response = self.full_dispatch_request()
File "D:\cjprojects\venv\iatenv\lib\site-packages\flask\app.py", line 1614, in full_dispatch_request
rv = self.handle_user_exception(e)
File "D:\cjprojects\venv\iatenv\lib\site-packages\flask\app.py", line 1517, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "D:\cjprojects\venv\iatenv\lib\site-packages\flask\app.py", line 1612, in full_dispatch_request
rv = self.dispatch_request()
File "D:\cjprojects\venv\iatenv\lib\site-packages\flask\app.py", line 1598, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "D:\cjprojects\IAT\server\app\IAT\api.py", line 366, in taskList
"add_user": row_data.username,
AttributeError: 'NoneType' object has no attribute 'username'
127.0.0.1 - - [30/Jan/2019 13:42:56] "POST /api/IAT/taskList HTTP/1.1" 500 -
请求任务信息失败,正在重试...
python+jmeter 这个想法有个性,我喜欢,git 持续关注
请问下响应断言的值每天不一致支持吗?
测试用例有没有版本管理,比如一个用例版本 1 适合旧系统,版本 2 适合新系统,新旧系统同时都在用,且都在迭代
如果迭代版本参数有变化,可以复制个改下参数配置,这相当于一个新用例。如果只是接口版本号变了,可以增加一个新版本的任务里面指定某个全局的请求参数。不知道你新老接口是怎么区分的,可以给个例子我看看。
请问这是啥错!
请求异常了,看着和像是服务器配置的问题。你是 mac 么,参考下Mac 环境下 Safari 无法访问 127.0.0.1
@81—1 启动打开来是 hello world
print e。。。。这让 py3 怎么通过。。。
这个是服务端的接口地址,你要访问 WEB 网页的地址。如果是按照 docker 装的,那么是http://localhost:8089
接口有签名怎么实现呢
使用方法二,已经在 IDE 运行起来了,前端 web 页面的访问地址是啥呀?localhost:8089 试了不好用。
8089 是 docker 方式的端口,前端你用
$ npm run start:no-mock
默认会打开 8000 端口
数据库连接的配置文件为 IAT/server/app/init.py
app.config["SQLALCHEMY_DATABASE_URI"] = "mysql+pymysql://root:root@127.0.0.1:3306/IAT?charset=utf8mb4"
db 文件在 IAT/server/db_sql/IAT.sql
先新建一个数据库名字为 IAT,在导入上面 sql 即可。
用例是如何新增管理的?
你是自己 download 的代码?
这样启动开发服务器
$ cd IAT
$ npm i
$ npm run start:no-mock
也可以自己打包成静态文件部署。
问题解决了没,我也遇到是这个问题。我是在阿里云的服务器安装的 docker,启动之后注册登录报 500,应该是数据库没连接上导致的,但是还未解决。
打包部署哪里,生成 dist 文件后,还需要配置什么吗? 走 Nginx?还是默认不用直接 gunicorn 启动
定时任务和即时任务进去就报 500,怎么破
File "D:\API\IAT\server\app\IAT\api.py", line 366, in taskList
"add_user": row_data.username,
AttributeError: 'NoneType' object has no attribute 'username'
127.0.0.1 - - [21/Feb/2019 11:20:43] "[1m[35mPOST /api/IAT/taskList HTTP/1.1[0m" 500 -
dist 打包出来后看个人习惯部署,gunicorn 只是启动的服务端。以 nginx 为例,dist 的文件放到 www 文件夹里,nginx 配置 api/请求的路径代理到 gunicorn 启动的服务上。
@jojotester @renfenghui 我兼容下了下可能的报错,如果是 docker 安装的,重启下容器即可。
平台体验了挺好,就是没感受到用 JMETER 的优点在哪;扩展下和针对性是什么?
如果单纯做业务接口测试,其实底层哪个框架都一样。Jmeter 本身作为性能测试工具,可以做更多性能测试任务(目前还在规划)
作者,建个 QQ 群或者微信群吧,可以供大家讨论,以及可以为作者贡献一些
我把环境部署到其他机器上,登陆的时候直接掉的我本地的接口,这个怎么解呢?
花了一个下午终于安装好了 ,本人遇到几个小问题发一下供后面小伙参考
环境是 linux+python3.7
print (xxx)
; except Exception as e:
gunicorn -w4 -b 0.0.0.0:5000 run:app`` 会报
gunicorn: command not found```app.config["SQLALCHEMY_DATABASE_URI"]
修改数据库配置No module named 'MySQLdb'
的情况
import pymysql
pymysql.install_as_MySQLdb()
npm run start:no-mock
启动后台
python run.py
import binascii
salt = binascii.hexlify(os.urandom(16)).decode()
password = hashlib.sha256((password + salt).encode('utf-8')).hexdigest() # length 64
多谢,比我整理的完善。
有计划 集成 jenkins 么
用例用文件夹来组织的,文件夹/子文件夹和 jmeter 的测试计划/线程组/逻辑控制器是怎么对应的?
demo 的账户是多少?
看 log 是依赖有问题,你在工程里单独装下这个库试试。
$ npm install @antv/data-set
src/pages/document.ejs
中关于引用包data-set.min.js
访问不成功,因为本地开发环境对网络有所限制;@antv/data-set/dist
中的data-set.min.js
并将其拷贝至工程的 public 目录下,并更新document.ejs
中<script src="/data-set.min.js">
;jm 开源了这么多年,确实比较牛 B
不好意思,由于是第一次用 docker ,所以不太清楚 ‘使用配置好的 mysql’。 比方说 现在本地已经有个 mysql 了,也新建了 iat 数据库了,并且从 GitHub 上下载了 IAT/server/db_sql/IAT.sql 文件,并导入了 。我的 mysql 用户名密码举例说是 root 和 123456。
我如何从 docker 上拉取您配置好的镜像?主要就这一步不会,您上面给的命令,如果直接用的话,如下图所示,我想着应该是我缺了 mysql 相关配置的一些参数导致的,所以问一下(虽然很小白,但是问了以后估计就能明白怎么指定 mysql 配置了)截图中 root 后面的 123456 是我以为那是密码所以把原来的 root 改成了我的 123456。先感谢。
提个需求:如果接口服务器的 IP 和端口变了,是不是要重新编辑所有的接口,是否有参数可以配置?或者说是我没找到修改的地儿?
不用,这个是在创建任务时才指定的,全局都是一个,接口用例中如果有单独的请求域名或端口,可以通过 beanshell 去处理。如下
String path = ctx.getCurrentSampler().toString();
path = path.replaceAll("https://xxx.xxxx.com", "http://xxx.xxx.com:8081");
sampler.setPath(path);
您好,报这个错怎么解决
URL 上支持自定义参数吗
请问怎么做参数传递呢
求大佬指教
Starting standalone test @ Wed Dec 04 20:37:05 CST 2019 (1575463025134)
Waiting for possible Shutdown/StopTestNow/HeapDump/ThreadDump message on port 4445
Warning: Nashorn engine is planned to be removed from a future JDK release
summary + 1 in 00:00:00 = 6.7/s Avg: 0 Min: 0 Max: 0 Err: 1 (100.00%) Active: 1 Started: 1 Finished: 0
summary = 1 in 00:00:00 = 6.6/s Avg: 0 Min: 0 Max: 0 Err: 1 (100.00%)
Tidying up ... @ Wed Dec 04 20:37:05 CST 2019 (1575463025768)
... end of run
excute script sucess
'encoding' is an invalid keyword argument for this function
task fail,please check jmeter env
disconnect client sucess
调试接口的时候提示这个该怎么解决,我设置了 jmeter 的环境变量,我设置的有问题吗?
export JMETER_HOME=/data/program/jmeter
export CLASSPATH=$JMETER_HOME/lib/ext/ApacheJMeter_core.jar:$JMETER_HOME/lib/jorphan.jar:$JMETER_HOME/lib/logkit-2.0.jar:$CLASSPATH
export PATH=$JMETER_HOME/bin:$PATH:$HOME/bin
requirements.txt 这个依赖文件在哪里可以获取
建议尽快增加 jenkins 的支持,可以放入持续集成中,测试环境部署后,执行相关任务,然后结果反馈
请问在那设置用户自定义的变量,和 http 请求默认值
你好,感兴趣的装了试试,到了调度接口日志总有 “"GET /socket.io/?EIO=3&transport=polling&t=N5yjYXN&sid=63178b349d5e41b0861327f7ad3e3817 HTTP/1.1" 400 -” 错误,是为什么啊?
楼主还在吗,加群进不去啊
楼主还在么?最近在做公司的安全监测项目,要做一个自动化测试平台,看到楼主的项目基本满足我的所有设想,想问一下,如果想把楼主的项目作为一个子项目嵌入在我的项目中,应该怎样对接呢?我这边用的时 django
楼主帮忙分析一下这是个啥错误
您好 楼主,我是拿 docker 安装的,现在访问报如下错误,有其他人也遇到这样的情况吗?
抱歉 docker 版本的没有更新,新版本目前只有手动部署。详见:https://github.com/t880216t/iat
楼主我找到原因了,mysql 我刚开始安装在宿主机(因为 init.py 配置的 root:root@localhost:3306,导致 docker 一直访问本地 mysql),后来在 docker 容器里面安装 mysql,再导入库就没问题了。话说楼主啥时候更新 docker 哈,菜鸟一枚还想学习下~
我是在 mac 上使用 docker 部署的,能正常登录注册,但是导入 jmx 文件就报错,有同学遇到过相关问题吗?
1.使用 git clone 将代码下载到本地
2.进入 Server 路径,python run.py 启动后端
3.进入 UI 路径,npm run start 启动前端,此时浏览器打开 localhost:8000 进入项目页面
这时后,localhost:8000 的页面提示 403,楼主这个怎么解决呢,谢谢