HttpRunner

MIT
Python 2.7/3.4/3.5/3.6
Linux/Unix/macOS/Windows
九毫 · 2017年11月06日 · 16424 次阅读 · 69 条评论

HttpRunner 是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份YAML/JSON脚本,即可实现自动化测试、性能测试、线上监控、持续集成等多种测试需求。

设计理念

  • 充分复用优秀的开源项目,不追求重复造轮子,而是将强大的轮子组装成战车
  • 遵循约定大于配置的准则,在框架功能中融入最佳工程实践
  • 追求投入产出比,一份投入即可实现多种测试需求

核心特性

  • 继承 Requests 的全部特性,轻松实现 HTTP(S) 的各种测试需求
  • 测试用例与代码分离,采用YAML/JSON的形式描述测试场景,保障测试用例具备可维护性
  • 测试用例支持分层机制,充分实现测试用例的复用
  • 测试用例支持参数化和数据驱动机制
  • 使用 skip 机制实现对测试用例的分组执行控制
  • 支持热加载机制,在文本测试用例中轻松实现复杂的动态计算逻辑
  • 基于 HAR 实现接口录制和用例生成功能(har2case
  • 结合 Locust 框架,无需额外的工作即可实现分布式性能测试
  • 执行方式采用 CLI 调用,可与 Jenkins 等持续集成工具完美结合
  • 测试结果统计报告简洁清晰,附带详尽统计信息和日志记录
  • 具有可扩展性,便于扩展实现 Web 平台化(HttpRunnerManager

文档

评论列表
九毫 发表于 2017年11月08日

完整的用户文档:http://httprunner.readthedocs.io/

九毫 发表于 2017年11月09日

新增项目域名:http://httprunner.top/

当前还只是跳转到文档,后续会做一个项目主页出来。

chenling5652 发表于 2017年11月10日

报错啊

九毫 发表于 2017年11月10日

@chenling5652 有问题在项目的GitHub上提 issue 吧。

Vincent 发表于 2017年11月13日

给李老师点个赞

恒温 发表于 2017年11月14日

产品化,国际化

九毫 发表于 2017年11月15日

HttpRunner 开始支持 HAR ,意味着同时支持了一大堆主流工具,包括 Fiddler/Charles/Chrome/Firefox/HttpWatch 等等,以此实现脚本录制和生成功能。
https://github.com/HttpRunner/har2case

lsy 发表于 2017年11月20日

支持顶一个,har导入的很实用

西神神 发表于 2017年11月27日

有中文版的文档么。。正在学习英文

九毫 发表于 2017年11月28日

@shenshen
有中文文档,不过还很不完善;英文文档先凑合着看吧

lionel126 发表于 2017年12月01日

not just ? more than?

曾先僧 发表于 2017年12月06日

支持下,支持 PB 数据类型吗?

李入宁 发表于 2017年12月07日

安装失败 提示: error: Microsoft Visual C++ 10.0 is required. Get it with "Microsoft Windows SDK 7.1": www.microsoft.com/download/details.aspx?id=8279
这个是必须要安装vs2010吗?

九毫 发表于 2017年12月08日

@bingbohe
纯粹的Python包,跟vs2010没关系。你先确保你本地的Python环境正常,以及pip工具可用。

九毫 发表于 2017年12月08日

@mr_zeng
HttpRunner是一个面向HTTP协议的接口测试工具,与编程语言无关,也没有是否支持某种数据类型之说。

九毫 发表于 2017年12月08日

@leo126 感谢指正,貌似我没法编辑内容和描述了。

李入宁 发表于 2017年12月09日

我换easy_install 安装成功了 @debugtalk

西神神 发表于 2017年12月20日

又重新看了下,除了语言不一样,设计思想真是一模一样啊。。除开性能部分

发表于 2018年01月08日

弱弱问下传参格式只支持json吗?

程明远 发表于 2018年01月16日

英文文档看起来还较为吃力,期待中文文档,先点个赞

Leo 发表于 2018年01月17日

求大佬再给个中文文档,毕竟很多人看英文看的比较吃力

九毫 发表于 2018年01月19日

中文文档和案例会有的

九毫 发表于 2018年02月17日

中文使用手册来啦:http://cn.httprunner.org/

ChelseaZhang 发表于 2018年03月05日

试用一下,第一个接口调用就提示:UnicodeEncodeError: 'ascii' codec can't encode characters in position 168-169: ordinal not in range(128)
本地python环境是2.7.10

onlyloveyou_123 发表于 2018年03月10日

请问支持接口线上监控吗,类似elk

yc 发表于 2018年03月14日

我也是,接口调用提示:UnicodeEncodeError: 'ascii' codec can't encode characters in position 168-169: ordinal not in range(128)
python环境是2.7.5

锐洪 发表于 2018年03月14日

用例不支持断言中文吗?

九毫 发表于 2018年03月15日

@815475897 @linyc 在Python2下可能会存在编码的问题,切换到Python3后就不会有该问题了。
另外,我本地使用Python2无法复现,可否将你们的脚本发给我,方便我调试修复下?

九毫 发表于 2018年03月15日

@Ryan.Li 支持中文的,建议使用 Python 3,可以避免编码问题。

九毫 发表于 2018年03月21日

@815475897 @linyc Python 2.7 版本下 UnicodeEncodeError 的问题已修复。

请升级到 1.2.3 及之后的版本。

$ pip install -U httprunner --pre
ChelseaZhang 发表于 2018年03月23日

@debugtalk 我已经更新到最新的版本了,UnicodeEncodeError的问题已经好了
但是我现在出现另外一个问题想请教下,我目前mac上的本地python环境有两套,python2.7及python3.6,每次我通过hrun运行的时候都会使用python2来跑,即使我将默认的python环境改成python3也不生效,目前我是通过debug模式在run的时候指定运行环境是python3,可以在hrun的时候指定python版本吗

bauul 发表于 2018年04月02日

楼主这个做了多久啊,感觉要花好长时间,然后好多的细节

九毫 发表于 2018年04月02日

@815475897 不能,你安装 httprunner 的时候就已经是在特定的 Python 版本下了。如果你要在 Python 3.6 下运行 hrun,那你就得在 Python 3.6 下安装。

推荐使用 pyenv 来管理 Python 环境。

九毫 发表于 2018年04月02日

@carl 你可以看下 GitHub 中的代码提交记录,挺长时间了。的确是很多细节,只有逐步迭代优化了。

ChelseaZhang 发表于 2018年04月10日

现在httprunner有群可以沟通交流吗

银光 发表于 2018年04月12日

如何做jenkins持续集成?

王华 发表于 2018年04月13日

楼主能帮我看下是怎么回事吗?
pip install git+https://github.com/HttpRunner/HttpRunner.git#egg=HttpRunner
Collecting HttpRunner from git+https://github.com/HttpRunner/HttpRunner.git#egg=HttpRunner
Cloning https://github.com/HttpRunner/HttpRunner.git to /private/var/folders/gm/10yg5f51571d1jbvvg7vwkyw0000gq/T/pip-build-ms6DrD/HttpRunner
Requirement already satisfied (use --upgrade to upgrade): requests in /Library/Python/2.7/site-packages/requests-2.3.0-py2.7.egg (from HttpRunner)
Collecting PyYAML (from HttpRunner)
Could not fetch URL https://pypi.python.org/simple/pyyaml/: There was a problem confirming the ssl certificate: [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:590) - skipping
Could not find a version that satisfies the requirement PyYAML (from HttpRunner) (from versions: )
No matching distribution found for PyYAML (from HttpRunner)

我的python版本是

Python 2.7.10 (default, Feb 7 2017, 00:08:15)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)] on darwin
Type "help", "copyright", "credits" or "license" for more information.

王华 发表于 2018年04月13日

@debugtalk 有内部沟通群吗?能否建一个QQ群,有问题可以交流

九毫 发表于 2018年04月13日

@yuwanghua12 没有建群,因为QQ/微信群的沟通效率并不高,而且我平时也没有时间看群里的内容。
遇到问题建议先翻下 GitHub 的历史 issues,若没有,那就在上面新开一个issue吧。

你刚发那个问题,SSL证书报错,多半是你本地开启了抓包工具造成的。

王华 发表于 2018年04月16日

本地抓包工具没有开启

zhangwenkal 发表于 2018年04月17日

@debugtalk $ pip install -r requirements-dev.txt 你的git工程里面没有找到这个requirements-dev.txt文件啦

近涛 发表于 2018年04月19日

pipenv run python -m unittest discover windows下,进入git下来的Httprunner根目录后执行这个命令,提示ERROR:root:500 Server Error: INTERNAL SERVER ERROR for url: http://127.0.0.1:5000/api/users/1000 这个是啥情况啊?

王华 发表于 2018年04月23日

实践发现mac下 Python2.7 不支持,升级Python到3.6可以安装成功

小弥勒 发表于 2018年04月26日

存在一个这样的问题:我extract接口A的ID,传入下一个接口B的header中,但是ID是一个int值,此时会提示类型的报错,因为header中的引用值必须是string

九毫 发表于 2018年04月26日

有问题麻烦在项目中提 issue,我会逐一处理的。

ChelseaZhang 发表于 2018年05月02日

有个问题想请教下,能在执行过程中sleep几秒吗

九毫 发表于 2018年05月03日

@815475897 可以使用 setup_hooks 或者 teardown_hooks ,在里面进行 sleep 的

wuhao 发表于 2018年05月09日

git拉下来源码之后,能否自己修改源码来使用呢?
另外,pip安装了httprunner,git拉下来源码,再install 源码中的Setup.py这步是否多余?发现会再新拉下一个build目录

wuhao 发表于 2018年05月09日

build目录里面还有有个lib/httprunner目录,和最外层的httprunner目录内容一样,都是built_in.py等内容,所以不知道这个setup.py的作用是什么

李洁 发表于 2018年05月09日

怎么把上一个接口返回的一个参数,放到下面执行接口的url种

caige 发表于 2018年06月23日

@debugtalk 请问下,脚手架分层里面,api、suit、testcases能备注吗?

ChelseaZhang 发表于 2018年07月04日

suite的config能否支持parameters

jcgao 发表于 2018年07月06日

运营测试用例,总是报这个错
ERROR: runTest (httprunner.task.TestCase)

/api/get-token

Traceback (most recent call last):
httprunner.exception.FunctionNotFound: get_sign not found in recursive upward path!

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
httprunner.exception.ParamsError: get_sign is not defined in bind functions!

caige 发表于 2018年07月19日

@debugtalk httprunner,做类似于qq空间那种互评的,能不能在一条testcase里面实现?我现在思路是:A登录、发说说,B登录、回复,全部在一个testcase里面,但是感觉好像不大对

hu 发表于 2018年07月20日

求教楼主,我在安装的时候,在这一步,输入命令:pipenv install --dev后提示:“To activate this project's virtualenv,run pipenv shell”,然后我又输入pipenv shell,提示:AttributeError:'module' object has no attribute 'run',我该怎么解决这个问题呢?急,在线等!谢谢楼主!!!

da-pengTT 发表于 2018年07月30日

好像,ansible的playbook ,接口测试行业的剧本吗?

da-pengTT 发表于 2018年07月30日

大佬,能像ansible搞成 自定义模块 就牛逼了~😄

chrls.chen 发表于 2018年08月10日

ERROR: runTest (httprunner.task.TestCase)

/api/get-token

Traceback (most recent call last):
httprunner.exceptions.FunctionNotFound: get_sign not found in recursive upward path!

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
httprunner.exceptions.ParamsError: get_sign is not defined in bind functions!

九毫 发表于 2018年08月10日
薛蕾 发表于 2018年08月23日

请教楼主,我用了httpmanager,在页面上写测试用例的时候如何在请求中带入cookie呢@debugtalk

DarkLi 发表于 2018年08月22日

@debugtalk 我在debugtalk.py里定义了一个code函数,在测试用例中调用的时候说找不到这个函数呢 是不是哪里没写对

Traceback (most recent call last):
FunctionNotFound: code not found in debugtalk.py module!
module mapping: {'variables': {}, 'functions': {}}

penghu2 发表于 2018年10月10日

中文的域名为啥老是访问不了

doudou-china 发表于 2018年10月11日

python 2.7.3
httprunner 1.5.13
linux
校验中文时,报这个错误:
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-11: ordinal not in range(128)
@debugtalk

九毫 发表于 2018年10月11日

@penghu2 用的是 github pages,不知道是不是偶尔会被墙。

已经上HTTPS了, https://cn.httprunner.org

九毫 发表于 2018年10月11日

@doudou-china Python 2 维护真的好心累,升级 Python 3 吧,后续 2 应该不再维护了。

简单 发表于 2018年10月12日

python 2.7.15报错
用python脚本运行报错
os.system("hrun C:\Users\ws\Desktop\login.yml")

WARNING Python 2 will retire in 445 days, why not move to Python 3?
ERROR !!!!!!!!!! exception stage: load tests !!!!!!!!!!
RuntimeError: maximum recursion depth exceeded while calling a Python object

直接在dos命令行里运行正常,这是什么原因?
@debugtalk

doudou-china 发表于 2018年10月12日

好的,我升级下Python,多谢您啦
@debugtalk

扯蛋的青春丶 发表于 2018年10月24日

@debugtalk

api: def: search_house($page, $pagesSize)
sutie: api: search_house(, ) 2个值都为空 执行用例时实际传入的是 : search_house(‘’, 'sSize')

会飞的西瓜 发表于 2018年12月14日

大佬,有Windows的安装教程么?