
HttpRunner接口自动化测试框架
文章平均质量分 92
HttpRunner 通用测试框架是大疆开发的一款开源通用自动化测试框架,本系列专题以接口测试为目的,结合实践案例介绍如何通过 HttpRunner 实现接口自动化测试。
该框架支持以 JSON/YAML 文件格式编写测试用例,执行后自动生成测试报告。支持用例分层思想和参数化数据驱动。
捉虫客
专注软件测试领域。学习,积累,分享,进步,顺便求职(软件测试)
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
自动化接口测试框架:HttpRunner 系列文章目录
自动化接口测试框架:HttpRunner 系列文章目录接口测试方兴未艾,自动化接口测试又是其中的重要手段,在这个过程中,测试框架的引用是必不可少的,业内有不少成熟的自动化测试框架,本系列文章旨在学习和分享 HttpRunner 这个通用测试框架的使用,以及进行相应的案例分析。为了方便进行检索,将相关文章及链接制作了一个目录,后期有时间随时进行更新。...原创 2020-04-28 10:22:46 · 1150 阅读 · 0 评论 -
A01_HttpRunner 介绍
A01_HttpRunner 介绍本系列专题分享,我们以 “自动化接口测试” 为目的,介绍如何通过 HttpRunner 框架进行自动化接口测试。HttpRunner 是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份 YAML 或 JSON 脚本,即可实现自动化测试、性能测试、持续集成等多种测试需求。HttpRunner 是由大疆(是的,无人机的...原创 2020-04-17 14:23:33 · 500 阅读 · 0 评论 -
A02_安装HttpRunner
A02_安装HttpRunner本次安装我们直接使用当前已发布的最新版本: v2.2.5通过 GitHub Releases 标签下可以看到当前最新的版本发布时间是2020年2月5日,如果要学习该版本的源码,可以直接点击“zip”链接进行下载。后续章节中我们也会一起看这里的部分源码,以加强对框架的理解。源码链接地址:https://github.com/httprunner/ht...原创 2020-04-17 14:33:33 · 419 阅读 · 2 评论 -
A03_一个简单的接口案例说明
A03_一个简单的接口案例说明一. 被测接口说明学习接口测试就要有实际接口的案例,这里我们使用 pm25.in 站点提供的用于学习和测试的公开接口,通过对接口的访问,可以实时获取 PM 2.5 的空气质量数据。接口说明官网地址:http://www.pm25.in/api_doc接口的主要功能1. pm25.in 是免费提供空气质量数据的一个公益性网...原创 2020-04-17 14:48:06 · 602 阅读 · 0 评论 -
A04_开始于一个简单的测试用例
A04 _开始于一个简单的测试用例HttpRunner 的测试用例支持两种文件格式:YAML 和 JSON下面两张图就是编写的测试用例,完成的是同样的测试内容,完全等价。但明显右边用YAML编写的测试用例更加简洁,而且用 YAML 来编写 HttpRunner 的测试用例,学习成本也是极低的。后续的章节中,我们也是以 YAML 作为用例的编写方式。两种测试用例格...原创 2020-04-17 15:33:00 · 351 阅读 · 0 评论 -
A05_再写一个 YAML 格式的测试用例
A05_再写一个 YAML 格式的测试用例YAML到底是什么?YAML 是 “YAML Ain't a Markup Language”(YAML 不是一种标记语言)—— 设计时的本意YAML 是 “Yet Another Markup Language” (仍是另外一种标记语言) —— 出来后的实际YAML 比较适合用来表达层次结构式(hierarchica...原创 2020-04-17 15:47:09 · 512 阅读 · 0 评论 -
A06_写一个针对 PM2.5 接口的测试用例
A06_写一个针对 PM2.5 接口的测试用例下面完成一个针对前文介绍过的 PM2.5 接口的测试用例。确定请求方式针对不同的请求方法,HttpRunner 用例中附加的参数也要使用不同的关键字,这里我们先简单来谈,后续章节参考源码再进行细致的分析:GET方式,通过URL传输请求字符串:使用 params 关键字附加请求参数 POST方式,请求内容类型为x-www-f...原创 2020-04-17 18:11:45 · 284 阅读 · 0 评论 -
A07_测试用例的格式验证
A07_测试用例的格式验证在用文本编辑工具编写测试用例的时候,有些格式的使用和参数的书写容易出现错误,此时可以使用 HttpRunner 提供的用例验证功能来检测用例格式是否合法。如果合法再进行用例的执行操作。命令格式: hrun --validate <用例文件名>命令举例: hrun --validate PM.json命令执行成功,会输...原创 2020-04-20 16:45:44 · 349 阅读 · 0 评论 -
B01_接口测试前置知识补充:请求提交类型
B01_接口测试前置知识补充:请求提交类型在 HttpRunner 中,共计支持 9 种类型的请求方法,这些类型可见于 common.schema.json 文件中,分别是:GET、POST、OPTIONS、HEAD、PUT、PATCH、DELETE、CONNECT、TRACE。注意:这里面所有请求方法的名称全部是由大写字母组成,我们在编写HttpRunne...原创 2020-04-22 14:43:04 · 293 阅读 · 0 评论 -
B02_接口测试前置知识补充:POST请求之Content-Type
B02_接口测试前置知识补充:POST请求之Content-Type通过 HttpRunner 进行接口测试的时候,根据接口不同的设计需求,需要提交不同类型的数据,进而在编写测试用例的时候还要选择不同类型的关键字(json/params/data/upload 等),那么到底如何选择呢,我们还是从 POST 请求提交数据的类型说起。在 HTTP 请求中,如果使用 POST ...原创 2020-04-22 15:05:09 · 493 阅读 · 1 评论 -
B03_接口测试前置知识补充:cookie和session
B03_接口测试前置知识补充:cookie和sessioncookie,可以翻译成“曲奇”或者“小饼干”,指用户通过浏览器访问网站时,网站为了记录用户浏览历史,辨别用户身份等储存在用户本地上的一小份数据。有时也用其复数形式 cookies。session,可以翻译成“会话”,是服务器分配在自己内存或数据库中的一块区域,用于存储登录后的用户信息,和 cookie 结合后可以辨别发...原创 2020-04-22 15:10:44 · 341 阅读 · 0 评论 -
B04_接口测试前置知识补充:Token、JWT和OAuth2
B04_接口测试前置知识补充:Token、JWT和OAuth2在接口测试中,Token 也是一个躲不过去的关卡。这一章节中我们简单说说和 Token 相关的内容吧:Token 技术的特点和实现原理分析 JWT 技术分析 OAuth2.0 授权框架 Refresh Token 和 Access Token 防范 CSRF 攻击1. Token ...原创 2020-04-22 15:20:05 · 364 阅读 · 0 评论 -
B05_接口测试前置知识补充:正则表达式
B05_接口测试前置知识补充:正则表达式正则表达式(Regular Expression),通常被用来检索符合某个特定规则的文本内容。也常被简写为 regex 或 regexp。在使用 HttpRunner 进行接口测试的时候,经常需要从返回的响应文本(HTML)中提取部分内容,实现变量的赋值或者断言。如下图所示。正则表达式可以使用“元字符(...原创 2020-04-22 15:26:32 · 492 阅读 · 0 评论 -
B06_接口测试前置知识补充:HTTP响应状态码
B06_接口测试前置知识补充:HTTP响应状态码在使用 HttpRunner 进行接口测试的时候,最常用到的一类断言方式就是判断接口返回的响应状态码,所以这里对各类型的 HTTP 响应状态码进行简要介绍。HTTP 状态码(HTTP Status Code):是用以表示服务器对请求进行响应后,表示结果状态的3位数字代码。被置于响应头的第一行(也叫响应行)中。以 Firefox...原创 2020-04-22 15:33:50 · 795 阅读 · 0 评论 -
C01_HttpRunner测试框架文件编写规范:JSON文件规范引入
C01_HttpRunner测试文件编写规范:JSON文件规范引入无规矩不成方圆。HttpRunner 的测试用例规定了使用 JSON/YAML 格式编写,那这就需要提前对用例的格式做好规范,HttpRunner 专门定义了相关的规范文件,使其符合 JSON Schema 语法规范。HttpRunner 的规范定义所在源码文件夹为:httprunner-2.5.5\http...原创 2020-04-22 15:48:11 · 811 阅读 · 0 评论 -
C02_HttpRunner测试框架文件编写规范:testcase 测试用例编写规范
C02_HttpRunner测试框架文件编写规范:testcase 测试用例编写规范HttpRunner 测试用例(testcase)的编写规范分别定义在三个 json 文件中:testcase.schema.v1.json:用例规范版本1,将测试步骤定义在“test”区域下。 testcase.schema.v2.json:用例规范版本2,将测试步骤定义在“teststep”需求...原创 2020-04-22 16:32:23 · 714 阅读 · 0 评论 -
C03_HttpRunner测试框架文件编写规范:request 请求规范
C03_HttpRunner测试框架文件编写规范:request 请求规范在 HttpRunner 的接口文件和测试用例文件中,都可以实现对接口的请求操作。在请求中有哪些关键字可以使用,我们继续参考该规范的说明。请求(request)的规范说明位置:common.schema.json#/definitions/request注意:该请求中可以使用的关键字与 re...原创 2020-04-22 16:38:51 · 534 阅读 · 0 评论 -
C04_HttpRunner测试框架文件编写规范:config 配置规范
C04_HttpRunner测试框架文件编写规范:config 配置规范在 HttpRunner 的测试用例(testcase)和测试用例集合(testsuite)文件中都可以使用 config 关键字。但是注意,在接口文件(api)中是没有这个关键字的。关于 config 配置区域,主要用于进行全局的处理。例如将 url 中相同的内容设置到 base_url ,在后...原创 2020-04-22 16:43:58 · 570 阅读 · 0 评论 -
C05_HttpRunner测试框架文件编写规范:api 接口文件规范
C05_HttpRunner测试框架文件编写规范:api 接口文件规范在接口测试中,除了对单个接口进行测试,还经常涉及多个接口进行联合测试,接口会被复用。为了更好地对接口描述进行管理,HttpRunner 可以使用独立的 JSON/YAML 文件对接口描述进行存储,即每个文件对应一个接口描述。另外,官方建议 API 描述需要尽量保持完整,做到可以单独运行。每个 api...原创 2020-04-23 21:30:36 · 430 阅读 · 0 评论 -
C06_HttpRunner测试框架文件编写规范:suite 测试用例集合文件编写规范
C06_HttpRunner测试框架文件编写规范:suite 测试用例集合文件编写规范当测试用例数量比较多以后,为了方便管理和实现批量运行,通常需要使用测试用例集来对测试用例进行组织,因此 HttpRunner 提出了“测试用例集合(testsuite)”的概念。在 HttpRunner 中,引入了测试分层的设计:测试用例集(testsuite):包含单个或多个测...原创 2020-04-23 21:31:15 · 429 阅读 · 0 评论 -
D01_用例中设置变量(variables)
D01_用例中设置变量(variables)在编写用例的时候,如果一项硬编码的数据,反复多次出现,可以将其提取出来设置为变量,然后分别进行调用,提高用例的灵活度。HttpRunner 支持变量申明(variables)和引用($var)的机制。如某系统登录页面,其表单代码如下。编写 YAML 格式的测试用例如下:表单提交方式为 POST,没有指...原创 2020-04-23 21:40:22 · 459 阅读 · 0 评论 -
D02_用例中提取数据:extract 关键字简要说明
D02_用例中提取数据:extract 关键字简要说明HttpRunner 编写用例的时候,支持从响应中提取需要的数据,赋值给变量或者进行断言等相关操作。提取数据关键字:extract支持的提取方式:regex 方式,通过正则表达式从 HTML 文本中提取指定内容。如: <td width="\d{3}">(.*)</td>del...原创 2020-04-23 21:45:16 · 421 阅读 · 0 评论 -
D03_用例中提取数据:regex 正则方式
D03_用例中提取数据:regex 正则方式在 httprunner 中可以通过正则表达式进行文本内容的提取:从响应的实体中进行正则提取 响应的实体必须是“JSON”或者“HTML文本”类型 格式为: <左边界>(提取内容的正则表达式)<右边界> 常用提取的正则: (.*) 代表边界里面可以是“任意字符出现任意次数”\httprunne...原创 2020-04-23 21:49:38 · 350 阅读 · 0 评论 -
D04_用例中提取数据:delimiter 界定符方式
D04_用例中提取数据:delimiter 界定符方式在 httprunner 中可以通过界定符的连接方式提取指定的内容。界定符起到了连接的作用,类似路径的表达方式,一般作用域逐渐降低,如: 中国.北京.海淀.西二旗。无论JSON格式还是HTML文件,都有类似的嵌套结构存在,这就为界定符提供了用武之地。\httprunner-2.5.5\httprunner\re...原创 2020-04-23 21:53:29 · 287 阅读 · 0 评论 -
D05_用例中提取数据:delimiter 界定符方式源码解读
D05_用例中提取数据:delimiter 界定符方式源码解读在 HttpRunner 中提取数据时,根据界定符的方式进行提取,涉及到的内容包括如下:["status_code", "encoding", "ok", "reason", "url"] cookies elapsed headers ["body", "content", "text", "json"]...原创 2020-04-23 21:57:40 · 288 阅读 · 0 评论 -
D06_用例中提取数据:案例实践
D06_用例中提取数据:案例实践在 HttpRunner 中提取数据时,根据界定符的方式进行提取,涉及到的内容包括如下:["status_code", "encoding", "ok", "reason", "url"] cookies elapsed headers ["body", "content", "text", "json"]用例1提取...原创 2020-04-23 22:03:10 · 288 阅读 · 0 评论 -
D07_用例中提取数据:elapsed 响应时间提取案例
D07_用例中提取数据:elapsed 响应时间提取案例在 HttpRunner 中提取数据时,根据界定符的方式进行提取,涉及到的内容包括如下:["status_code", "encoding", "ok", "reason", "url"] cookies elapsed headers ["body", "content", "text", "json"]...原创 2020-04-23 22:10:33 · 604 阅读 · 0 评论 -
D08_用例中提取数据:headers 响应头提取案例
D08_用例中提取数据:headers 响应头提取案例在 HttpRunner 中提取数据时,根据界定符的方式进行提取,涉及到的内容包括如下:["status_code", "encoding", "ok", "reason", "url"] cookies elapsed headers ["body", "content", "text", "json"]...原创 2020-04-23 22:14:18 · 399 阅读 · 0 评论 -
D09_用例中提取数据:content 响应实体提取案例
D09_用例中提取数据:content 响应实体提取案例在 HttpRunner 中提取数据时,根据界定符的方式进行提取,涉及到的内容包括如下:["status_code", "encoding", "ok", "reason", "url"] cookies elapsed headers ["body", "content", "text", "json"]...原创 2020-04-24 09:49:20 · 325 阅读 · 0 评论 -
E01_HttpRunner断言:validate 总述
E01_HttpRunner断言:validate 总述一个完整的测试用例中应该包括“预期结果”和“实际结果”字段,而二者内容是否一致,是判断测试用例是否执行通过的标准。在自动化测试中,这个判断过程是由“断言(Assert)”来实现的。HttpRunner 框架中提供了多种类型的断言以供使用。在 HttpRuner 框架源码中主要有三个文件涉及断言相关内容:htt...原创 2020-04-24 09:55:19 · 931 阅读 · 0 评论 -
E02_HttpRunner断言:断言类型列表
E02_HttpRunner断言:断言类型列表在 comparators.py 文件中,定义了可以使用的断言类型:equals: 是否相等 less_than: 小于 less_than_or_equals: 小于等于 greater_than: 大于 greater_than_or_equals: 大于等于 not_equals: 不等于 string_equ...原创 2020-04-24 09:59:42 · 1727 阅读 · 0 评论 -
E03_HttpRunner断言:比较器的名称
E04_HttpRunner断言:比较器的名称在 HttpRunner 中,将断言使用的比较器进行了名称的统一,每个比较器的名称可以有多种别名,如 equals 可以简写成 eq 、 == 或者 is 等名称。 象 eq、ge、gt 等写法,和 Linux 中的 shell 脚本比较符名称相同,可以进行类比记忆。各比较器的名称整理如下:具体的名称列表可以...原创 2020-04-24 14:40:58 · 347 阅读 · 1 评论 -
E04_HttpRunner断言:可断言的响应属性
E04_HttpRunner断言:可断言的响应属性通过 response.py 源码文件的错误提示信息中,我们可以看到进行断言时可以涉及到哪些响应的属性。httprunner-2.5.5\httprunner\response.py我们从以下几个角度看看断言编写的例子headers elapsed encoding reason ok te...原创 2020-04-24 14:51:07 · 1038 阅读 · 0 评论 -
F01_HttpRunner关联:关于 SessionID 问题
F01_HttpRunner关联:关于 SessionID 问题HTTP 是一个无状态的协议,每次请求之后不会留下任何痕迹。就像是有一个失忆的家伙,从来记不住是谁到过他家里,客人必须每来一次都重新告诉他姓名。如果碰到这么一个傻服务器,这就麻烦了,每访问一个页面都要重新输入一次用户名和密码,这肯定要让人崩溃的。于是为了避免这种问题的发生,就需要一个机制来记忆每个用户的身份,即...原创 2020-04-24 14:56:09 · 343 阅读 · 0 评论 -
F02_HttpRunner关联:提取固定名称方式的 SessionID
F02_HttpRunner关联:提取固定名称方式的 SessionID接着上一章项目案例分析,SessionID 存在于临时 cookie 中,HttpRunner 可以从cookie中直接提取需要的值,而且要求 cookie 的键名称必须是固定不变的,提取方式为:extract: - 变量名称: cookies.键名称为了验证返回响应内容的正...原创 2020-04-24 15:01:30 · 291 阅读 · 0 评论 -
F03_HttpRunner关联:通过正则提取 SessionID
F03_HttpRunner关联:通过正则提取 SessionID一旦返回响应的 cookie 中,键名称是变化不固定的,则前面的方法就无法适用了。此时我们首先可能会想到对变化的内容进行正则处理,接下来就试一试吧。分析系统的 cookie结构,首先对“键名称”进行正则处理,固定部分保持不变,剩余部分替换为正则表达式:extract: - si...原创 2020-04-24 15:05:40 · 498 阅读 · 0 评论 -
F04_HttpRunner关联:通过头域匹配方式提取 SessionID
F04_HttpRunner关联:通过头域匹配方式提取 SessionID从响应结构进行分析,cookie 出现在响应的头域内(headers),而且不管服务器返回了多少个cookie,浏览器再次请求的时候,都会把这些所有的cookie附加上。那么我们能否把问题简化?不再费劲的取出某个cookie的名称和值,而是一股脑提取所有cookie,不管有用没用,后面再发...原创 2020-04-24 15:10:44 · 348 阅读 · 0 评论 -
F05_HttpRunner关联:使用提取到的 SessionID
F05_HttpRunner关联:使用提取到的 SessionID我们要实现关联的目的是模拟用户身份访问接口,这就需要:从前面步骤的响应中获取用户身份(本案例是保存在cookie中) 拿到该用户身份后访问其他接口资源那么整个用例的基本结构就变为:- config: name: 测试用例- test: name: 测试步骤1 ...原创 2020-04-24 15:13:51 · 442 阅读 · 0 评论 -
G01_HttpRunner重定向:WordPress 登录抓包分析
G01_HttpRunner重定向:WordPress 登录抓包分析有时候我们执行测试用例,提取内容和断言均失败,分析后发现提取数据的页面并不是我们预期的页面,原来都是重定向惹的祸,HttpRunner 自动跟随系统进行了重定向处理。本次实验我们用本地部署的 WordPress 项目(博客系统)来演示。该项目可以直接使用 XAMPP 快速搭建测试环境。还是从绕不过的登...原创 2020-04-25 12:38:21 · 618 阅读 · 0 评论 -
G02_HttpRunner重定向:WordPress 编写登录用例
G02_HttpRunner重定向:WordPress 编写登录用例针对 WordPress 编写登录的测试用例这里有个小问题,通过前面抓包我们知道,实际登录时第一个请求返回的是302状态码,重定向后返回的是200状态码,那么在用例中的断言,是断言302还是断言200呢?HttpRunner 的请求实际是对 requests 模块的封装,而在 request...原创 2020-04-25 12:38:44 · 319 阅读 · 0 评论