httprunner

摘要:
testsuite:用例集合(无序).env(可选):存储项目环境变量reports:运行后自动生成,无需创建3、常用命令hrun核心命令har2case格式转换命令,将har格式转换成json/yaml格式二、编写运行1、测试用例组织测试用例组织中三个基础概念:测试套件、测试用例、测试步骤测试用例集:对应一个文件夹,包含单个或多个测试用例文件,应该是完整且独立的,每条测试用例应该是都可以独立运行的测试用例:对应一个YAML/JSON文件,包含单个或多个测试步骤。

官网链接:https://cn.httprunner.org/prepare/testcase-structure/

一、安装框架介绍

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

1、安装以及依赖软件

  • 可运行平台:windows、Linux、macOS,推荐系统:Linux/macOS
  • 安装方式: pip install httprunner
  • 依赖的Python版本:Python 3.4及以上版本

2、项目文件结构

  • YAML/JSON(必须):测试用例文件,一个文件对应一条测试用例
  • debugtalk.py(可选):脚本函数(存储项目中逻辑运算函数)
  • 该文件将作为项目根目录定位标记,其所在目录即被视为项目工程的根目录
  • api : 存放base接口
  • testcase:组合api中的接口,场景自动化case组装。(又先后顺序)
  • testsuite:用例集合(无序)
  • .env(可选):存储项目环境变量
  • reports(自动生成): 运行后自动生成,无需创建

3、常用命令

  • hrun核心命令
  • har2case格式转换命令,将har格式转换成json/yaml格式
二、编写运行

1、测试用例组织

测试用例组织中三个基础概念:测试套件、测试用例、测试步骤

测试用例集(testsuite):对应一个文件夹,包含单个或多个测试用例(YAML/JSON)文件,应该是完整且独立的,每条测试用例应该是都可以独立运行的

测试用例(testcase):对应一个YAML/JSON 文件,包含单个或多个测试步骤。是测试步骤的 有序 集合,每一个测试步骤对应一个 API 的请求描述

测试步骤(teststep):对应 YAML/JSON 文件中的一个 teststep,描述单次接口测试的全部内容,包括发起接口请求、解析响应结果、校验结果等。无序 集合,集合中的测试用例应该都是相互独立,不存在先后依赖关系的;如果确实存在先后依赖关系,那就需要在测试用例中完成依赖的处理

①变量引用

接口用例中,取值时可以通过自定义,也可以引用其他已定义好的变量或参数,格式为$var

②函数引用

接口用例中,取值时除了自定义、引用其他变量外,还可以引用debugtalk.py定义的函数来获取到函数返回值,格式为${get_value()}

③编写用例注意事项

(1)extract响应结果的字段有 : status_code, cookies, elapsed, headers, content, text, json, encoding, ok, reason, url。如果响应结果中有多层嵌套,可通过content.xxx.0.id格式获取id,其中content是指响应内容,xxx是响应内容中的某个字段,0表示获取xxx数组中第一个内容。

(2)所有json/yaml和.env文件中格式错误都会导致执行失败。

.env编辑时需注意:从第一行开始编辑,结尾不要有空行,采用key=value,value不需用“”括起来,否则会变成value的一部分

(3)支持的检验器有eq(=)、lt(<)、le(<=)、gt(>)、ge(>=)、ne(!=)、str_eq、len_eq、len_gt、len_ge、len_lt、len_le、contains、contained_by、type_match、regex_match、startswith、endswith。

  • API目录下保存单个接口
# 测试名称(必须的),String
name: 查询实例
# 无条件跳过测试(可选的),String,跳过测试的说明
skip:
# 条件为 true 时跳过测试(可选的)
skipIf:
# 条件为 false 时跳过测试(可选的)
skipUnless:

# 变量(可选的), List,被上级(testcases,testsuite)覆盖
variables:
   # 设置变量,实例id
   instance_id: 'i-xxxxxx'
# 默认域名(可选的).String
base_url: http://test
# 请求参数(必须的), dict, 与request中的参数相同
request:
   method: GET
   url: /v3/instance
   params:
       # 通过 $+参数名称 的形式,应用变量
       instance_id: $instance_id
# 提取器(可选的), dict,提取返回参数 (content是responses,body内容)
extract:
   code: content.code

# 验证(可选的), list
validate:
   - eq: [$code , 200]
   - eq: [content.msg, "成功!"]

# 前置处理(可选的),list (可以修改request内容)
setup_hooks:

# 后置处理(可选的),list
teardown_hooks:

注:

  • 可以通过查看源码runner.py->Runner->_run_test方法查看具体信息
  • httprunnertimeout的默认值为120

api/DescribeInstances.yml

name: 安全组查询
base_url: ${ENV(url)} 
variables:
    InstanceId: "i-XXXXXXX"
    InstanceName: ""
    PageNumber: ""
    PageSize: ""
#skipIf: true
request:
    url: ""
    verify: false
    params:
        AccessKeyId: ${ENV(ak)}
        Version: '2017-11-10'
        Action: 'DescribeInstances'
        InstanceId: "$InstanceId"
        InstanceName: "$InstanceName"
        PageNumber: "$PageNumber"
        PageSize: "$PageSize"
    method: GET
    headers:
        host: ${ENV(host)}
setup_hooks:
    -  ${setup_request($request)}
validate:
    -  eq: ["status_code", 200]
exteact:
    - content

2、testcase中的优先级

  • base_url
  • testcase test > testcase config > testsuite test > testsuite config > api
  • variables
  • testcase config > testcase test > testcase_def config > testcase_def test > api
  • verify
  • testcase teststep (api) > testcase config > testsuite config

3、testsuites

参数化数据驱动

Httprunner2.0中支持testsuits中进行参数化和数据驱动,假如测试用例中定义了多个参数,那么测试用例在运行时会对参数进行笛卡尔积组合,覆盖所有参数组合情况。

1、参数情况分2种

(1)独立参数

(2)具有关联性的多个参数

2、指定数据源方式分3种

(1)在 YAML/JSON 中直接指定参数列表

httprunner第1张

httprunner第2张

(2)通过内置的P函数引用 CSV 文件

httprunner第3张

(3)调用 debugtalk.py 中自定义的函数生成参数列表

httprunner第4张

注:

# 使用默认的 report_template.html
hrun testcases/instance.yaml
# 使用自定义的模板,可以指定相对路径或绝对路径
hrun testcases/instance.yaml --report-template=templates/ens_test.html
# 控制台打印日志类型为debug(输出详细的请求),默认为INFO
hrun testcases/instance.yaml --log-level=debug
# 将login.yaml对应的logs输出:x.loaded.json, x.parsed.json, x.summary.json
hrun testcases/instance.yaml --save-tests
三、httprunner附录
hrun 命令行相关命令行参数
参数名称
参数值
参数说明
-h, --help
不带参数
查看帮助信息
-V, --version
不带参数
查看版本号
--no-html-report
不带参数
不生成测试报告
--html-report-name
HTML_REPORT_NAM
重命名html报告名称
--html-report-template
HTML_REPORT_TEMPLATE
自定义html报告模板,参数带上html模板的信息路径
--log-level
LOG_LEVEL
日志等级,如:debug
--log-file
LOG_FILE
指定日志文本保存路径
--dot-env-path
DOT_ENV_PATH
指定环境变量.env的详细路径
--failfast
不带参数
运到失败后停止测试
--startproject
STARTPROJECT
指定项目的根目录
--validate
[VALIDATE [VALIDATE ...]]
校验json格式
--prettify
[PRETTIFY [PRETTIFY ...]]
各式化json文件
Validator详细
No.
Comparator
Description
A(check), B(expect)
1
eq
value is equal
A == B
2
lt
less than
A < B
3
le
less than or equals
A <=B
4
gt
greater than
A >B
5
ge
greater than or equals
A >=B
6
ne
not equals
A != B
7
str_eq
string equals
str(A) == str(B)
8
len_eq, count_eq
length or count equals
len(A) == B
9
len_gt,count_gt
length greater than
len(A) > B
10
len_ge,count_ge
length greater than or equals
len(A) >= B
11
len_lt, count_lt
length less than
len(A) < B
12
len_le, count_le
length less than or equals
len(A) <= B
13
contains
contains
[1,2] contains 1
14
contained_by
contained by
A in B
15
type_match
A is instance of B
isinstance(A, B)
16
regex_match
regex matches
re.match(B, A)
17
startswith
start with
A startwith(B) is True
('abc' startwith 'ab')
18
endswith
ends with
A endswith(B) is True
('abc' endswith 'bc')
config参数
参数
是否必须
格式
详情
name
YES
string
测试用例的名称,在测试报告中将作为标题
variables
NO
list of dict
定义的全局变量,作用域为整个用例
parameters
NO
list of dict
全局参数,用于实现数据化驱动,作用域为整个用例
request
NO
dict
request 的公共参数,作用域为整个用例;常用参数包括 base_url 和 headers
request参数
参数  
是否必须
格式
详情
base_url
NO
String
测试用例请求 URL 的公共 host,指定该参数后,test 中的 url 可以只描述 path 部分
headers
NO
dict
request 中 headers 的公共参数,作用域为整个用例
teststeps参数详情
参数 
是否必须
格式
详情
name
YES
String
测试步骤的名称,在测试报告中将作为测试步骤的名称
request
YES
dict
HTTP 请求的详细内容;可用参数详见python-requests 官方文档
variables
NO
list of dict
测试步骤中定义的变量,作用域为当前测试步骤
extract
NO
list
从当前 HTTP 请求的响应结果中提取参数,并保存到参数变量中(例如token),后续测试用例可通过$token的形式进行引用
validate
NO
list
测试用例中定义的结果校验项,作用域为当前测试用例,用于实现对当前测试用例运行结果的校验
validate_script
NO
String
列表,每个元素对应一行 Python 代码。例如:validate_script: - "assert status_code == 201" - "a = response_json.get('args').get('a')" - "assert a == '1'"
times
NO
int
重复执行测试用例的次数
setup_hooks
NO
list
在 HTTP 请求发送前执行 hook 函数,主要用于准备工作
teardown_hooks
NO
list
在 HTTP 请求发送后执行 hook 函数,主要用户测试后的清理工作

免责声明:文章转载自《httprunner》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇动手学深度学习13-权重衰减c#异步async和await下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

git:将两个请求合并为一个请求

Gitrebase ihEAD~2解释:此命令可以以文本形式显示您提交的两次请求。如果数字2被4替换,则您最近四次提交的信息将显示如下:1 pick56a06efchange1:删除一个空白行2 pickedbeab5change2:addlogonMainActivity34#Rebase23198ba..Edbeab5onto23198ba5#6#命令:...

华为 HG526 破解实录(一)Cfg文件加解密工具

几天前,我去中国电信安装E169软件包,并发送了一个华为HG526无线路由猫和一个中兴xxx网络机顶盒(尚未开始制造麻烦)。当然,无线路由猫一如既往地被阉割了。搜索之后,我开始了我的快攻之旅。1.打开catdrop管理页面,使用telecomadmin和nE7jA%5m登录;2.将U盘插入猫。3.开放式管理=˃设备管理、备份配置。4.打开U盘,放下ctce8...

国产操作系统——银河麒麟V10 SP1使用小结

几天前,我看了国内操作系统Galaxy Kirin有了新更新的新闻,于是我开始了一个新系统=============================================个人评价:这个系统是一个国产操作系统。尽管使用了大量的Ubuntu和Windows设计,使用了Linux内核,但这是国产操作系统从无到有的开始,其意义和价值远远大于其使用价值。总之...

nginx配置跨域(CORS)、防盗链(valid_referers)、缓存(expires)、压缩(gzip)

它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服AJAX只能同源使用的限制。服务器根据这个值,在许可范围内,则在头信息包含Access-Control-Allow-Origin。...

JavaMail给QQ邮箱发邮件报错

org.springframework.mail.MailAuthenticationException:身份验证失败;nestedexceptionisjavax.mail.AuthenticationFailedException:535错误:http://service.mail.qq.com/cgi-bin/help?subtype=1&&a...

bootstrap删除模态框弹出并询问是否删除【通用删除模态框】

divclass=“模态对话框”&gt;divclass=“modal header”&gt;spanaria hidden=“true”&gt;h4class=“模态标题”&gt;divclass=“modal body”&gt;divclass=“模态页脚”&gt;...