pytest + yaml 框架 -18.sleep 和skip/skipif 功能实现
Posted 上海-悠悠
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pytest + yaml 框架 -18.sleep 和skip/skipif 功能实现相关的知识,希望对你有一定的参考价值。
前言
环境要求
Python 大于等于3.8版本,(低于python3.8版本不支持)
Pytest 7.2.0 最新版
v1.1.4 发布新增3个关键字
- 1.sleep 添加用例之间的sleep 等待时间
- 2.skip 跳过用例功能
- 3.skipif 条件为真时跳过用例
- 4.查找用例规则优化(之前仅支持查找test开头.yml后缀的用例,现在优化成可以支持.yaml 和 .yml 后缀用例, yaml用例名称可以test开头也可以test结尾,跟pytest查找用例规则保持一致)
pip 安装插件, 最新版本v1.1.4
pip install pytest-yaml-yoyo
sleep 功能示例
sleep 功能实现time.sleep() 等待时间,sleep参数可以是int类型和float 类型
get请求:
name: GET请求示例
sleep: 5
request:
method: GET
url: http://httpbin.org/get
validate:
- eq: [status_code, 200]
sleep 也可以是一个变量,引用config设置的变量值
config:
variables:
x: 2.5
get请求:
name: GET请求示例
sleep: $x
request:
method: GET
url: http://httpbin.org/get
validate:
- eq: [status_code, 200]
sleep 执行顺序按写的顺序执行,如果放到request 前,那就在请求前先执行,放到request后,在请求后执行
skip 跳过用例
pytest 实现跳过用例有2种方式
@pytest.mark.skip(reason="no way of currently testing this")
def test_the_unknown():
...
或者在用例里面跳过
import pytest
if not pytest.config.getoption("--custom-flag"):
pytest.skip("--custom-flag is missing, skipping tests", allow_module_level=True)
本插件采用的第二种实现方式,在用例里面添加pytest.skip()
skip 关键字后仅支持一个参数,那就是跳过的原因。使用示例
get请求:
name: GET请求示例
skip: 功能缺失,暂时跳过此用例
request:
method: GET
url: http://httpbin.org/get
validate:
- eq: [status_code, 200]
运行用例可以看到
如果用例是多个步骤组成的,也可以在步骤中跳过
teststeps:
-
name: step1--
request:
method: GET
url: http://httpbin.org/get
validate:
- eq: [status_code, 200]
-
name: step2--
skip: 功能缺失,暂时跳过此用例
request:
method: GET
url: http://httpbin.org/get
validate:
- eq: [status_code, 200]
那么会按顺序执行,第一个步骤会执行,第二个步骤因为有skip,就跳过了
如果还有第三个步骤,那么一旦遇到skip ,整个用例就会结束,skip 跳过的是用例,而不是步骤!
skipif 满足条件跳过
skipif 后面参数是一个表达式,当表达式运行结果为真,那么就跳过用例
config:
variables:
x: 100
get请求:
name: get
skipif: $x > 50
request:
method: GET
url: http://httpbin.org/get
validate:
- eq: [status_code, 200]
skipif 还可以在多个用例中使用,当前面接口返回数据a,判断a满足条件就跳过后面用例
case1:
name: get
request:
method: GET
url: http://httpbin.org/get
extract:
xx: $.url
validate:
- eq: [status_code, 200]
case2:
name: get
skipif: "'org' in '$xx'"
request:
method: GET
url: http://httpbin.org/get
validate:
- eq: [status_code, 200]
skikif 后面的参数需是字符串表达式,通过eval()函数运行后得到结果,判断是否为真,为真的时候通过当前用例。
以上是关于pytest + yaml 框架 -18.sleep 和skip/skipif 功能实现的主要内容,如果未能解决你的问题,请参考以下文章
pytest文档73-pytest+yaml实现接口自动化框架之用例参数关联
pytest + yaml 框架 -10.allure 生成报告
pytest + yaml 框架 -10.allure 生成报告