HttpRunner HttpRunnerManager V2.0 版本

尹全旺 · 2018年05月04日 · 最后由 phoenix 回复于 2020年10月13日 · 10911 次阅读

HttpRunnerManager

由于年后工作地方更换,V2.0 版本这才迟迟与大家见面,新版本主要增加了定时任务,异步执行,报告持久化、日志保存以及数据类型支持,QQ 群欢迎提问:628448476。https://github.com/HttpRunner/HttpRunnerManager

流程说明

  1. 登录后首先选择新增一个项目,录入一些基本信息
  2. 用例或者配置信息是属于模块的,所以为刚才添加的项目添加子模块,默认只有一级子模块
  3. 添加完毕后我们可以看到项目列表或者模块列表相关信息,可以看到下属一个子模块,用例配置都为 0
  4. 平台已经支持环境管理,当前这一步不是必须的,接口 url 建议只写地址,host 和 port 单独写在环境里面比较好
  5. 接下来就是添加用例或者配置,注意:用例里的 variables 支持定义变量,在当前 test 有效,也就是说 request 的请求数据,headers,validate 都可以 $key 形式引用,extract 是抽取接口返回值,可以给 validate 引用也可以给 include 的 test 引用,自定义的函数支持 $(fun()) 方式引用,config 可以录入接口的基本请求参数和 headers,只需在用例的 include 引入就好
  6. 配置或者用例添加好后可以在列表查看,可以单个用例或者用例批量运行,同步方式
  7. 也可以按照模块或者项目单个或者批量形式,默认异步执行,后期增加选项选择同步还是异步方式
  8. 支持添加定时任务,cortnab 表达式,注意模块为空就是整个项目为维度,当然也支持模块级的定时任务
  9. 任务可以在线查看,可以开启或者关闭删除等,但是不支持二次编辑,如果信息错误必须删除重新添加
  10. 所有异步执行的或者定时任务报告都会存储在数据库,可在线查看,目前没有提供下载功能
  11. 任务执行状态可在线查看,实时监控,需要自己更改 base.html 任务监控 a 标签的 url 地址,为 flower 服务 ip 地址即可

部署说明

  1. 安装 mysql 数据库服务端 (推荐 5.7+),并设置为 utf-8 编码,创建相应 HttpRunner 数据库,设置好相应用户名、密码,启动 mysql

  2. 修改:HttpRunnerManager/HttpRunnerManager/settings.py 里 DATABASES 字典相关配置:NAME(默认 HttpRunner)
    USER(用户名,建议 root 用户,需要有增删改查权限!)、PASSWORD(对应登录用户名密码)、HOST(数据库所在服务器 ip 地址)
    PORT(数据库服务监听端口,默认 3306)

  3. 安装 rabbitmq 消息中间件,service rabbitmq-server start 启动服务,访问:http://host:15672/#/ host 即为你部署 rabbitmq 的服务器 ip 地址
    username:guest、Password:guest, 成功登陆即可

  4. 修改:HttpRunnerManager/HttpRunnerManager/settings.py 里 BROKER_URL = 'amqp://guest:guest@127.0.0.1:5672//'将 127.0.0.1 替换为步骤 3 的 host

  5. 命令行窗口执行 pip install -r requirements.txt 安装工程所依赖的库文件

  6. 命令行窗口切换到 HttpRunnerManager 目录,执行 python manage.py makemigrations ApiManager 生成数据库迁移脚本

  7. 执行 python manage.py migrate 对应 HttpRunner 数据库生成相应表结构

  8. 执行 python manage.py createsuperuser 根据提示输入用户名,邮箱,密码

  9. 执行 python manage.py runserver

  10. shell 或 dos 窗口切换到 HttpRunnerManager 目录执行:python manage.py celery -A HttpRunnerManager worker --loglevel=info 启动 worker

  11. shell 或 dos 窗口切换到 HttpRunnerManager 目录执行:python manage.py celery beat --loglevel=info 开启定时任务配置

  12. CLI 窗口执行:celery flower 访问:http://localhost:5555/dashboard 即可查看任务列表和状态

  13. 浏览器输入:http://127.0.0.1:8000/api/register/ 注册用户,开始享用

  14. 浏览器输入http://127.0.0.1:8000/admin/ 输入步骤 6 设置的用户名、密码,登录后台运维管理系统

后期计划

HttpRunner 数据驱动,hook 功能还未来得及开发,3.0 版本会同步支持,邮件提醒,报告下载,运行方式选择以及调用 java 进行加签加密后面会全部支持,谢谢大家支持

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 70 条回复 时间 点赞

欢迎大家有问题群里随时提问

尹全旺 回复
  1. 创建相应 HttpRunner 数据库,默认就是用 127.0.0.1 是否可以?
  2. service rabbitmq-server start 直接启动失败
  3. clone 代码后,安装不符合版本,我的是 python3.6

更新下依赖库,最后一个名字写错了

rabbitmq 这个安装请自行百度,直接默认安装就 ok 一般

接口进入到数据库的数据核对。
例如:跟数据库的数据进行检查,后面会支持么?

frank 回复

支持自定义调用函数

写的相当详细了,近期我准备一下 Docker 镜像

Byron 回复

昨天更新了手册,docker 部署好了 pull 分享下呗😀

大海 回复

这个数据表结构,怎么说。

[2018-05-25 10:56:32,640: ERROR/MainProcess] consumer: Cannot connect to amqp://guest:**@127.0.0.1:15672/: Socket closed.
Trying again in 2.00 seconds...

想问一下我的 mq 配置是不是有什么问题 一直连不上。。

在 setting,py 修改了自己的邮箱账号,但是执行定时任务后,发送邮箱的账号还是楼主的邮箱账号 ,求解??

wing 回复

不会吧,我看别人改了是用的自己的啊

尹全旺 回复

我使用 emails.py 调试是可以用自己都邮箱账号发送的,修改后重新启动服务,定时任务发送邮箱的账号就还是你的默认账号

邮箱代码里确实是从配置拿的,我知道了,你改了后没有重启 workwer,beat 那些服务吧,都需要重启的

尹全旺 回复

解决了,感谢楼主,重启服务后生效了

建议 大神添加 data 参数关键字的描述,便于其他人维护

怎么打赏啊 微信扫不了

不是贴了打赏码么😀

任务监控请求无法访问到内容,怎么设置

首先非常感谢楼主,也感谢构建 httprunner 的大神。
小白请教一个问题,登录之后的 cookie 如何传到下一个用例呢?是在 extract 中设置了,然后直接在第二个用例中使用 $ 变量引用吗?

端口 5672

请问一下:
第 5 步安装 requirements 文件,提示 “Command "python setup.py egg_info" failed with error code 1 in /private/var/folders/4p/b0vm78h9117gwc3xvsnm5f_r0000gp/T/pip-install-5vep_v_g/mysqlclient/”

我是 Mac 用到 Python3.7

安装之后整个项目的 CSS 样式都失效了,听说是 cdn.bootcss.com 挂了,换了网址还是 404。。。。。

异步执行后没生成报告,是什么原因呢?

第六步是什么意思?按手册操作这一步报错呀?

点击项目管理的 debugtalk.py 不能编辑,是什么问题,需要再哪个目录下建 debugtalk.py 嘛,哪位大拿指点一下,感谢

post 请求,json 值有中文,使用了 json 里的内容签名,失败。

json:{
"username": "我",
"openId": "123456789012345678910004",
"orderId": "201810311510431100"
}

而返回的 body 是

body | b'{"username": "\u6211", "openId": "123456789012345678910004", "orderId": "201810311510431100"}'
应该是提交申请的时候,没有转换编码,导致我的签名失败。
签名规则使用了 body 签名。找了很久,不知道是不是 unittest 的问题。

47楼 已删除


启动任务失败有人知道什么原因吗?

铁锤 回复

pip 下这个模块就可以了

1、本地开发环境部署都没有问题 (可以看下我上传的截图),登录 HttpRunnerManager 平台设置了定时任务,但是就是不能生成报告。
PS:celery 用的版本是 4.2

2、各种服务和定时任务有关的截图如下:





Q 群满了,进不去,想问问,我发现这个 manager 里面用的 httprunner 是 1.5.8 版本的,我是看着 2.+ 的文档来学习 hrun 的,来到学用 manager 的时候,发现有些 2.0 的特性用不了了,请问目前是不是这样情况?还是我哪里没做对?

大佬,请教个问题我在本地搭建了 HttpRunnerManager 的环境后,然后创建了一个用例,在运行时报错 AttributeError,can't set attribute。具体的信息在附件中。麻烦有时间的话解答一下。

说明:我将 ApiManager 中的 tasks.py 和 views.py 文件中的 from httprunner import HttpRunner, logger 修改为了 from httprunner.api import HttpRunner,logger,不知道会否有影响

guanle1994 回复

你用的是 python3.7 吗?如果是,请换成 3.6,这个版本兼容有问题。

40楼 已删除


请问楼主 json 格式不支持参数变量吗?

Evan 回复

支持的,你得加上引号

phoenix 回复

谢谢大佬,能帮忙告诉我下在 httprunnermanager 怎么取返回包里的键值

Evan 回复

如果是简单的 json,直接装在 extra/validate 中提取就好了,语法是 “data.yourkey.yourkey”。
如果结构体比较复杂,建议自己写个正则表达式的函数,调用就可以了

phoenix 回复

好,谢谢,因为才搭建好这个平台,拿来做项目有些细节还不是很清楚,像这种上传文件的请求,请问怎么设置呢?

Evan 回复

目前来看平台并不支持上传文件,你的自己开发这个功能

phoenix 回复

谢谢大佬,希望大佬早点把这个功能开发出来😂

32楼 已删除
仅楼主可见

这么好的项目,必须打赏,作者加油~~

请问大神,我按照 github 上的 md 执行到第九步的时候,启动监控会出现 module 'tornado.web' has no attribute 'asynchronous'


是因为 tornado 的版本太高了么

Ronny 回复

我也遇到同样的问题,问下你那边解决了吗?

Ronny 回复

我这边解决了,requirement.txt 中加入 tornado == 5.1.1 ,然后 pip install tornado == 5.1.1 即可,参考 这个https://github.com/HttpRunner/HttpRunnerManager/issues/137

httprunner 提供的断言估计有些满足不了,这些可以自己去开发吗?

仅楼主可见

支持的 python 版本是什么版本呢

当然可以自定义断言函数,在断言时调用即可

Sun-shroom 回复

最好使用 python3.6,3.7 会有意想不到的惊喜~~~

phoenix 回复

好的,谢谢。


完全按步骤搭建的,也没报错,删掉各种东西重装也是这样,操作哪里的几个空白包括删除功能也无效,所有的浏览器都是这样

而且别的地方也不同,基本白色灰色,网上的人家的都是红色绿色蓝色

cmhtdv 回复

同样遇到这样的问题,给一下解决方案:

  1. 初步判断是 CSS 问题 , 2.F12 打开调试。看一下是哪个请求错误。我这边发现是 amazeui.min.css, 这个 css 问题下载错误。
  2. 直接访问上述请求的地址,发现的确是这个服务有问题。
  3. 果断在网上找了另外一个地址:http://cdn.clouddeep.cn/amazeui/1.0.1/css/amazeui.min.css
  4. 然后将这个地址替换掉 templates 目录下 base.html 中对应的地址即可。 刷新页面,可以了。 另外:如果怕这个新的服务也挂掉,可以将这个 css 文件下载到本地,然后在 base.html 文件中将 css 的地址指到本地这个文件即可。
cmhtdv 回复

在线的 amazeui 的 css 和 js 都访问不了导致的。我把它们都换成本地的就可以了。

在用例列表运行用例就这样,如何解决

cmhtdv 回复

打断点调式啊,得看到这里调用的堆栈才好判断

cmhtdv 回复

如果你没动过框架的东西,基本就是你的用例写有问题,把你的用例发出来

phoenix 回复

Traceback:

File "D:\Python37\lib\site-packages\django\core\handlers\exception.py" in inner

  1. response = get_response(request)

File "D:\Python37\lib\site-packages\django\core\handlers\base.py" in _get_response

  1. response = self.process_exception_by_middleware(e, request)

File "D:\Python37\lib\site-packages\django\core\handlers\base.py" in _get_response

  1. response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "D:\HttpRunnerManager\HttpRunnerManager\activator.py" in process

  1. result = fun(request, index) if index else fun(request)

File "D:\HttpRunnerManager\ApiManager\views.py" in wrapper

  1. return func(request, *args, **kwargs)

File "D:\HttpRunnerManager\ApiManager\views.py" in run_test

  1. runner.summary = timestamp_to_datetime(runner.summary, type=False)

Exception Type: AttributeError at /api/run_test/
Exception Value: can't set attribute

phoenix 回复

我就按着这教程的 https://sutune.me/2018/08/05/httprunner/ 创建单个接口的简单测试而已。第一个用例运行就出错了

http://www.httpbin.org/get # 请求方式为 GET

yetingjian 回复

你好 你这个文件能发出来么 现在也是遇到这个问题 一直显示很丑 换成这个还是不对其http://cdn.clouddeep.cn/amazeui/1.0.1/css/amazeui.min.css

11楼 已删除
niweizhong 回复

老哥,你的这个问题解决了么

大佬,请教一个问题,在执行到 celery flower 时候报错
,找了半天也没找到解决办法,请问这个怎么办呢?

如果两个环境的数据源不一样,怎么切换呢,比如说,测试环境和预部署的登陆账号肯定是不一样的,配置列表里面配置了两套数据,然后用例还是写用例的时候设置的配置,怎么去一键切换所有用例的配置呢

w770762632 回复

有两种方式:
1、组装测试集时,形成内部循环,类似写~查~删~写,可以跨环境。
2、每次都写不同的数据,可以在 debug 中动态获取,如需区分环境,需要将平台环境列表传递给 debug,自己定义判断规则即可,也可以做到跨环境。

请问用例列表的运行是哪个方法,我在 pycharm 调试 HttpRunnerManager-master\ApiManager\view.py 的 run_test 插入断点,运行是没有进入断点,请问什么原因?

钢镚 回复

这个问题解决了吗?我也遇到这个问题了

执行用例(单个和批量)报这个错,大家有遇到没?怎么解决的?

大家好!请问执行 python3 manage.py runserver 8899
Performing system checks...

System check identified no issues (0 silenced).
August 06, 2020 - 15:10:17
Django version 1.8, using settings 'HttpRunnerManager.settings'
Starting development server at http://127.0.0.1:8899/
Quit the server with CONTROL-C.
然后浏览器输入 127.0.0.1:8899 就报下面的错误
2020-08-06 15:10:30,768 [django.request:170] [base:get_response] [WARNING]- Not Found: /
[06/Aug/2020 15:10:30]"GET / HTTP/1.1" 404 74
2020-08-06 15:12:46,506 [django.request:170] [base:get_response] [WARNING]- Not Found: /
[06/Aug/2020 15:12:46]"GET / HTTP/1.1" 404 74
2020-08-06 15:57:28,591 [django.request:170] [base:get_response] [WARNING]- Not Found: /
[06/Aug/2020 15:57:28]"GET / HTTP/1.1" 404 74
[06/Aug/2020 15:57:28]"GET /favicon.ico HTTP/1.1" 301 0
2020-08-06 15:57:28,774 [django.request:170] [base:get_response] [WARNING]- Not Found: /static/assets/img/favicon.ico
[06/Aug/2020 15:57:28]"GET /static/assets/img/favicon.ico HTTP/1.1" 404 103

这个怎么解决啊!!🙏

请教一个问题:
一组用例中,提取上一个用例返回值中的某一个字段值(int 型)作为下一个用例传参时,如何转换为 string 型?
【我试了一种曲线救国的方法:在第 2 个用例中添加变量,变量值就是上一条用例的返回值,类型选择为 string,然后再在第 2 个用例传参时,引用这个变量】但是这个方法没用,不能这样间接转换类型

小叮当 回复

你这都走到大门口了,非得要绕一圈走后门~~😏

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册