HttpRunner HttpRunnerManager 正式发布

yinquanwang · 2018年03月04日 · 最后由 Shally 回复于 2018年05月04日 · 9059 次阅读
本帖已被设为精华帖!

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

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

贴个赞赏码哇,必须得赞赏一个。

debugtalk 回复

已经上传打赏码了😁

yinquanwang 回复

已打赏,继续努力


已部署成功,开始试用

使用新增模块功能是,填写好信息点击新增模块,但是在模块列表中并没有提交上去的模块信息。pycharm中似乎有没有看到post请求,请问是哪里的操作问题吗



yinquanwang 回复

已打赏,一起将 HttpRunner 发扬光大 😀

Nuanyang2333 回复

正在做饭😂,一会我看下,按理不会这样的!

debugtalk 回复

多谢前辈打赏😊,定不辜负期望

Byron 回复

多谢支持😊

Nuanyang2333 回复

非常抱歉,代码昨天提交时可能操作有误,添加模块功能被删掉了。。。现在已经修复,更新viws.py文件即可!

13楼 已删除

厉害~做出产品来了。

厉害了,终于出来了

666明天就训练开发试用

Lihuazhang 回复

😂 过奖了,产品还算不上

xq 回复

看来等了很久了😄

Lihuazhang 回复

感觉终究有一天 httprunner.org 域名会升值😂

debugtalk 回复

太长了……

@yinquanwang 能否制作个docker部署

下一步可以考虑延伸扩展支持其他协议,最后可以叫Xrunner哈

很赞,作为一枚测试,先提个bug为敬
如果有删除再添加的动作,这个id就会重复,然后提交参数就会。。。

chuanmeijia 回复

谢谢反馈,bug 麻烦提交到git上😄 ,我会统一处理的

支持开源!

zm · #26 · 2018年03月05日
仅楼主可见
harsayer 回复

这个提议不错,后面应该会弄

biyunfei 回复

这个会比较难,现在底层都完全依赖于 Python-requests 库,近期也计划整合新出的 requests_html 库,所以只能支持 HTTP(S) 协议。

seveniruby 将本帖设为了精华贴 03月05日 13:04

刚刚试了下,还需要这两个依赖包

pip install colorama
pip install colorlog
yuweixx 回复

多谢反馈

chuanmeijia 回复

你好,这个bug已经修复,多谢反馈

yinquanwang 回复

你好,这个项目具体点的安装方法有吗?小白安装起来有点困难

debugtalk HttpRunner 实现 Jinja2 自定义报告模板 中提及了此贴 03月05日 17:49
hujunalex1 回复

①、将项目拉clone至本地,并按照requirements.txt安装必要的依赖库;
②、安装mysql服务端,推荐使用mysql5.7+,安装方法参考下面链接即可https://jingyan.baidu.com/article/cd4c2979033a17756f6e6047.html
安装过程中可能会弹出提示缺少vs2015等必要组件的窗口,此时,点击底下“execute”即可,时间较长,耐心等待;
安装完成后,只需命令行新建QCMANAGER数据库,后面会用到;
进入数据库命令行状态:mysql -u root -p xxxxx(密码);
新建数据库:create database qcmanager;
③、更改HttpRunnerManager/settings里DATABASES相关配置:USER、PASSWORD、HOST、PORT;基本就是改下密码就行了;
④、命令行运行django命令:makemigrations(生成数据库迁移脚本)、migrate(应用数据库脚本生成相应数据库表结构);
这里可能要进入到项目的目录下,因为需要查找manage.py文件。然后命令行运行python manage.py makemigrations,然后再运行python manage.py migrate;
该项目是用python3来编写的,所以运行项目最好安装python3.6,不然会提示很多语法和编码的错误;
命令行运行runserver启动服务(开发者模式):python manage.py runserver 8000,然后打开地址http://localhost:8000/api/register/
应该够详细了吧😁

好像用例需要一个一个往里面添加,后面是否会支持现成yml格式用例批量导入呢?

37楼 已删除
jeo 回复

后面会支持的,只是现在还没来得及做

jeo 回复

666

有没有演示地址?

已部署,一直关注着。学习学习。

厉害啊!加油加油。

昨天拉的代码,按照说明的部署下来也没有什么问题。但是,为什么注册后一直登录不进去,也没有任何提示信息呢??日志里面也没有任何报错信息。。。

44楼 已删除
Donly 回复

我错了。。。。注册之后到登录页面,系统自动填写了邮箱,但是其实应该是用户名,所以一直登录不了,,,,

嗯,现在真遇到一个问题。模块列表中有模块,但是在新增配置和用例到时候,module无法加载出模块列表,无法选择模块。这样保存到时候就会提示“请先选择模块”。。

Donly 回复

这个我发现是前端的问题,你在项目的下拉框中选择一下,模块就能出来了

Donly 回复

需要点击下项目才会触发ajax请求到后台拿到模块信息哦😁

Donly 回复

😅 这个也是我的错,应该要先点击一下project,然后才会加载module列表。我看见project已经选上了,以为会自动加载molue列表。。。

louqqson008 回复

这个是我故意设计成这样的😁 😁 倒让大家踩坑了,后面我还是改成页面初始化就加载模块信息吧

新增模块怎么一直开小差呀0.0想这些错误 我好在哪里可以看 然后分析是为啥

jeo 回复

谢谢啦

安装mysqlclient依赖时报错了,有没有知道怎么改的亲呀

➜  HttpRunnerManager git:(master) ✗ sudo pip install mysqlclient==1.3.12
Password:
The directory '/Users/macpro/Library/Caches/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
The directory '/Users/macpro/Library/Caches/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
Collecting mysqlclient==1.3.12
  Downloading https://mirrors.aliyun.com/pypi/packages/6f/86/bad31f1c1bb0cc99e88ca2adb7cb5c71f7a6540c1bb001480513de76a931/mysqlclient-1.3.12.tar.gz (89kB)
    100% |████████████████████████████████| 92kB 4.2MB/s
    Complete output from command python setup.py egg_info:
    /bin/sh: mysql_config: command not found
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/private/tmp/pip-build-yqjpse8f/mysqlclient/setup.py", line 17, in <module>
        metadata, options = get_config()
      File "/private/tmp/pip-build-yqjpse8f/mysqlclient/setup_posix.py", line 44, in get_config
        libs = mysql_config("libs_r")
      File "/private/tmp/pip-build-yqjpse8f/mysqlclient/setup_posix.py", line 26, in mysql_config
        raise EnvironmentError("%s not found" % (mysql_config.path,))
    OSError: mysql_config not found
boxuezhai 回复

开小差?啥意思,之前代码有点问题 麻烦整体更新下 ,现在应该是可以的

kellyung 回复

是不是没有装mysql服务端哦

yinquanwang 回复


[06/Mar/2018 15:59:39] "POST /api/add_module/ HTTP/1.1" 500 21088

yinquanwang 回复

找到解决办法了
ln -s /usr/local/mysql/bin/mysql_config /usr/local/bin/mysql_config
参考了这个文章:https://www.cnblogs.com/fengtengfei/p/5642173.html

已部署,谢谢楼主,加油

boxuezhai 回复

我本地测试没有发现这个现象,这个出现原因可能是前端请求后台超时

yinquanwang 回复

试了好多次 发现都是这样0.0
这个接口文件是在哪个文件里呀 我去看看
还有就是我们设置的登录时间是多少呀 有时候莫名奇妙就要重新登录了

boxuezhai 回复

session默认有效期为10min,在setting.py里

添加模块视图 views.py:

建议你开启前端调试工具看下,

yinquanwang 回复

请问,新增模块,日期有什么格式吗?
TypeError: expected string or bytes-like object
[06/Mar/2018 17:56:53] "POST /api/add_module/ HTTP/1.1" 500 20521

Jacc 回复

这个异常后台捕捉了啊,不会抛出来的!你先从数据库复制个时间,我明天看下。。。

建议组织个群,大家试用时学习交流下

Jacc 回复

我用这样日期格式可以:2018-03-25

kellyung 回复

果然,这样就可以:2018-03-06 21:32 ;输一串数字就会报那个“开小差”的错

Jacc 回复

我明天看下这个,本地我测试过没这个问题

yinquanwang 回复

嗯嗯,我新建一条用例,点运行,会报错(见截图),不知道是不是python版本问题
Traceback (most recent call last):
AttributeError: 'int' object has no attribute 'split'
ERROR Internal Server Error: /api/run_batch_test/
Traceback (most recent call last):
TypeError: run_batch_test() takes 1 positional argument but 2 were given

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
AttributeError: 'int' object has no attribute 'split'
[06/Mar/2018 21:53:26] "POST /api/run_batch_test/ HTTP/1.1" 500 134622

另外我用的驱动是pymysql,mysql是用docker起的,应该跟这个关系不大吧。。

Jacc 回复

和mysql没关系,看起来是前端提交了int类型的表单数据,后台用的切割字符串,所以报错,我本地没有问题,明天看了回复你

yinquanwang 回复

这个问题我发现过,忘记给作者提了,之后我找到逻辑提一下bug吧

yinquanwang 回复

这个看样子需要优先判断一下数据的类型再进行处理

Jacc 回复


我这边测试下来时间非法后台会返给前段的,不知你的代码是不是最新的呢

Jacc 回复

本地测试下来,无论是test,module,project运行都不会有问题

yinquanwang 回复

我刚重新clone了一遍代码,还是报昨天的错。。这样的话有可能是环境的问题

628448476,我建了个qq群,大家有问题在里面交流吧,一起完善

支持下,昨天开始安装,还没有安装成功。。

@yinquanwang 你好,支持环境选择配置嘛?比如,同一个用例,分别选择开发环境,或者线上环境来运行?

仅楼主可见
tq0fqeu 回复

去阿里水平不够😭

仅楼主可见
Jacc 回复

啊啊啊我终于找到这个问题的原因了,case_name为数字时就会出现这个问题,而且为数字时修改用例还会提示“用例或配置已在该模块中存在,请重新命名”;
还有一个小问题,在test report页面,detail那里的点击按钮,当我点击traceback按钮后,再点log那个,log按钮经常为鼠标指针,变成小手反应迟钝;
还有一个建议,用例添加修改页面能不能不要左右滑动的,当我用鼠标选择某一行内容时,随便一拉就滑到别的页面了

@yinquanwang 你好,目前发现一个bug 【Comparator】每次选择的是【string_equal】但是加载出来就会变成【equal】,

这个已经修复,请更新

还有就是,目前发现在做结果断言的时候,没法对接口比较深的返回值进行解析,这是我使用方法有误么?

可以的呀,参考httprunner说明,支持json任意层次的,还有正则提取也可以

yinquanwang 回复

好的,我研究下怎么使用,谢谢

tq0fqeu 回复

近期打算去深圳,不能来杭州😂

仅楼主可见
harsayer 回复

加我qq把1263374981

xiaox196 测试平台从搭建到放弃 (二) 注册功能 中提及了此贴 03月12日 17:07

为啥我的登陆不成功??也没有报错?还有想问下你的数据库 <:makemigrations(生成数据库迁移脚本)、migrate(应用数据库脚本生成相应数据库表结构)>具体要怎么做,是不我的这个库没有创建成功

wenpeng 回复

查询下你的db是否有相应的表,然后登陆不是用邮箱,是用户名登陆,如果用户名或者密码错误没有做提示的

谢谢,已经可以了

断言应该如何添加?

仅楼主可见
仅楼主可见

支持,这是一个平台最基本的东西吧

大佬用的Python几哦



跟我想写的好像啊,我目前前端就写了3个配置的增删改查


为什么我的界面长这么丑

songxiang 回复

你用了django的admin方便呀,前端页面很难受,自己写的说不定更丑

letme 回复

我看demo的界面很漂亮,难道这个还需要二次开发吗?

songxiang 回复

这个是后台管理界面,django自带的,系统界面不是这样啊

106楼 已删除

😂 感谢楼主的分享。
弄了一天终于部署到自己服务器上了,django部署的坑是真不少。。

看了下密码居然是明文的,,emmm我觉得可以考虑将密码进行一种加密算法后存到数据库
然后用户登录的时候用同样的加密算法加密后和数据库的数据进行校验,这样安全性会不会好一点?

有java版的吗

楼主好,这边运行python manage.py makemigrations这条命令报错,报错内容为“django.db.utils.OperationalError: (1049, "Unknown database 'httprunner'")”,麻烦看下是什么情况哈

FengYeLoveCode 回复

你新建数据库HttpRunner了吗,settings里是这个名字

Jacc 回复

感谢答复,这边已经处理好了


怎么校验response中的 body里面的json串的某个key的值?

HeartBeat 回复

看了代码才知道,采用.的方式,如下方式就能正确取到response中的字典或列表的某个值

github上有类似的基于flask的接口自动化平台:
一些设计思想可以参考,比如定时任务
https://github.com/liwanlei/FXTest

FrancisJen 回复

好的呢

没明白配置列表和extract那边怎么用?

HeartBeat 回复

可以看下httprunner脚本编写教程,抽取的可以给后面的test用也可以作为断言,json抽取 :content.key形式

kasi · #119 · 2018年04月12日
仅楼主可见
yinquanwang · #120 · 2018年04月12日 作者
仅楼主可见
letme 回复

老哥用的登录页面模板跟我用的一样😎

yinquanwang 回复

好的,灰常感谢。

二维码扫不出来

仅楼主可见

谢谢作者的无私分享

yinquanwang 关闭了讨论 05月04日 15:58
yinquanwang 关闭了讨论 05月04日 15:58
yinquanwang 重新开启了讨论 05月04日 15:58
yinquanwang 关闭了讨论 05月04日 15:59
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册