HttpRunner初探

介绍

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

此文档适用于全新发布的 HttpRunner 2.x 版本

核心特性

继承 Requests 的全部特性,轻松实现 HTTP(S) 的各种测试需求

采用 YAML/JSON 的形式描述测试场景,保障测试用例描述的统一性和可维护性

借助辅助函数(debugtalk.py),在测试脚本中轻松实现复杂的动态计算逻辑

支持完善的测试用例分层机制,充分实现测试用例的复用

测试前后支持完善的 hook 机制

响应结果支持丰富的校验机制

基于 HAR 实现接口录制和用例生成功能(har2case

结合 Locust 框架,无需额外的工作即可实现分布式性能测试

执行方式采用 CLI 调用,可与 Jenkins 等持续集成工具完美结合

测试结果统计报告简洁清晰,附带详尽统计信息和日志记录

极强的可扩展性,轻松实现二次开发和 Web 平台化

运行环境

HttpRunner 是一个基于 Python 开发的测试框架,可以运行在 macOS、Linux、Windows 系统平台上。

Python 版本:HttpRunner 支持 Python 3.4 及以上的所有版本,并使用 Travis-CI 进行了持续集成测试,测试覆盖的版本包括 2.7/3.4/3.5/3.6/3.7。虽然 HttpRunner 暂时保留了对 Python 2.7 的兼容支持,但强烈建议使用 Python 3.4 及以上版本。

操作系统:推荐使用 macOS/Linux

安装方式

HttpRunner 的稳定版本托管在 PyPI 上,可以使用 pip 进行安装。

$ pip install httprunner

如果你需要使用最新的开发版本,那么可以采用项目的 GitHub 仓库地址进行安装:

$ pip install git+https://github.com/HttpRunner/HttpRunner.git@master

版本升级

假如你之前已经安装过了 HttpRunner,现在需要升级到最新版本,那么你可以使用-U参数。该参数对以上三种安装方式均生效。

$ pip install -U HttpRunner$ pip install -U git+https://github.com/HttpRunner/HttpRunner.git@master

安装校验

在 HttpRunner 安装成功后,系统中会新增如下 5 个命令:

httprunner: 核心命令

ate: 曾经用过的命令(当时框架名称为 ApiTestEngine),功能与 httprunner 完全相同

hrun: httprunner 的缩写,功能与 httprunner 完全相同

locusts: 基于 Locust 实现性能测试

har2case: 辅助工具,可将标准通用的 HAR 格式(HTTP Archive)转换为YAML/JSON格式的测试用例

httprunner、hrun、ate 三个命令完全等价,功能特性完全相同,个人推荐使用hrun命令。

运行如下命令,若正常显示版本号,则说明 HttpRunner 安装成功。

$ hrun -V2.0.2$ har2case -V0.2.0

测试准备

抓包分析

在开始测试之前,我们需要先了解接口的请求和响应细节,而最佳的方式就是采用 Charles Proxy 或者 Fiddler 这类网络抓包工具进行抓包分析。

获取 HAR 数据包

在转换生成测试用例之前,需要先将抓取得到的数据包导出为 HAR 格式的文件。在Charles Proxy中的操作方式为,选中需要转换的接口(可多选或全选),点击右键,在悬浮的菜单目录中点击【Export...】,格式选择HTTP Archive(.har)后保存即可;假设我们保存的文件名称为 demo.har。

fiddler的操作方式,选择HttpArchive


转换生成测试用例,然后,在命令行终端中运行 har2case 命令,即可将 demo.har 转换为 HttpRunner 的测试用例文件。

使用 har2case 转换脚本时默认转换为 JSON 格式。

加上 -2y/--to-yml 参数后转换为 YAML 格式。


两种格式完全等价,YAML 格式更简洁,JSON 格式支持的工具更丰富,大家可根据个人喜好进行选择

运行测试

HttpRunner 在命令行中启动测试时,通过指定参数,可实现丰富的测试特性控制。

$ hrun -h

usage: hrun [-h] [-V] [--log-level LOG_LEVEL] [--log-file LOG_FILE]            [--dot-env-path DOT_ENV_PATH] [--report-template REPORT_TEMPLATE]            [--report-dir REPORT_DIR] [--failfast] [--save-tests]            [--startproject STARTPROJECT]            [--validate [VALIDATE [VALIDATE ...]]]            [--prettify [PRETTIFY [PRETTIFY ...]]]            [testcase_paths [testcase_paths ...]]One-stop solution for HTTP(S) testing.positional arguments:  testcase_paths        testcase file pathoptional arguments:  -h, --help            show this help message and exit  -V, --version        show version  --log-level LOG_LEVEL                        Specify logging level, default is INFO.  --log-file LOG_FILE  Write logs to specified file path.  --dot-env-path DOT_ENV_PATH                        Specify .env file path, which is useful for keeping                        sensitive data.  --report-template REPORT_TEMPLATE                        specify report template path.  --report-dir REPORT_DIR                        specify report save directory.  --failfast            Stop the test run on the first error or failure.  --save-tests          Save loaded tests and parsed tests to JSON file.  --startproject STARTPROJECT                        Specify new project name.  --validate [VALIDATE [VALIDATE ...]]                        Validate JSON testcase format.  --prettify [PRETTIFY [PRETTIFY ...]]                        Prettify JSON testcase format.

指定测试用例路径

使用 HttpRunner 指定测试用例路径时,支持多种方式。

使用 hrun 命令外加单个测试用例文件的路径,运行单个测试用例,并生成一个测试报告文件:

$ hrun filepath/testcase.yaml

将多个测试用例文件放置到文件夹中,指定文件夹路径可将文件夹下所有测试用例作为测试用例集进行运行,并生成一个测试报告文件:

$ hrun testcases_folder_path


failfast

默认情况下,HttpRunner 会运行指定用例集中的所有测试用例,并统计测试结果。

对于某些依赖于执行顺序的测试用例,例如需要先登录成功才能执行后续接口请求的场景,当前面的测试用例执行失败后,后续的测试用例也都必将失败,因此没有继续执行的必要了。

若希望测试用例在运行过程中,遇到失败时不再继续运行后续用例,则可通过在命令中添加--failfast实现。

$ hrun filepath/testcase.yml --failfast

日志级别

默认情况下,HttpRunner 运行时的日志级别为INFO,只会包含最基本的信息,包括用例名称、请求的URL和Method、响应结果的状态码、耗时和内容大小。

若需要查看到更详尽的信息,例如请求的参数和响应的详细内容,可以将日志级别设置为DEBUG,即在命令中添加--log-level debug

保存详细过程数据

为了方便定位问题,运行测试时可指定 --save-tests 参数,即可将运行过程的中间数据保存为日志文件

$ hrun filepath/testcase.yml --save-tests

测试报告

使用 HttpRunner 执行完自动化测试后,会在当前路径的 reports 目录下生成一份 HTML 格式的测试报告。

默认情况

默认情况下,生成的测试报告文件会位于项目根目录的 reports 文件夹中,文件名称为测试开始的时间戳


默认报告样式

在 HttpRunner 中自带了一个 Jinja2 格式的报告模版,默认情况下,生成的报告样式均基于该模版(httprunner/templates/default_report_template.html)。

测试报告形式如下:

在 Summary 中,会罗列本次测试的整体信息,包括测试开始时间、总运行时长、运行的Python版本和系统环境、运行结果统计数据



Vaildators写在yaml或者json中


性能测试

HttpRunner 通过复用 Locust,可以在无需对 YAML/JSON 进行任何修改的情况下,直接运行性能测试....

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,165评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,720评论 1 298
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,849评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,245评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,596评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,747评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,977评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,708评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,448评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,657评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,141评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,493评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,153评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,890评论 0 198
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,799评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,685评论 2 272

推荐阅读更多精彩内容