HttpRunner HttpRunnerManager V2.0 版本

尹全旺 · May 04, 2018 · Last by bjxiehong replied at October 16, 2019 · 11539 hits

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进行加签加密后面会全部支持,谢谢大家支持

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 63 条回复 时间 点赞
尹全旺 #1 · May 04, 2018 作者

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

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

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

尹全旺 #4 · May 04, 2018 作者

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

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

尹全旺 #6 · May 16, 2018 作者
frank 回复

支持自定义调用函数

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

尹全旺 #8 · May 17, 2018 作者
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 修改了自己的邮箱账号,但是执行定时任务后,发送邮箱的账号还是楼主的邮箱账号 ,求解??

尹全旺 #12 · June 27, 2018 作者
wing 回复

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

尹全旺 回复

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

尹全旺 #14 · June 27, 2018 作者

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

尹全旺 回复

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

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

怎么打赏啊 微信扫不了

尹全旺 #18 · July 19, 2018 作者

不是贴了打赏码么😀

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

首先非常感谢楼主,也感谢构建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的问题。

@尹全旺 坐等调用java进行加签加密。目前写了一个本地多次调用没什么问题,通过前端加入后,第一次执行成功,第二次调用j提示vm oom了


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

铁锤 回复

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,这个版本兼容有问题。

35Floor has been deleted


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

Evan 回复

支持的,你得加上引号

phoenix 回复

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

Evan 回复

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

phoenix 回复

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

Evan 回复

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

phoenix 回复

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

43Floor has been deleted
Author only

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

请问大神,我按照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 提供的断言估计有些满足不了,这些可以自己去开发吗?

Author only

支持的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

64Floor has been deleted
niweizhong 回复

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

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

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up