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 + yaml 框架 - 1.我们发布上线了!

pytest文档73-pytest+yaml实现接口自动化框架之用例参数关联

pytest + yaml 框架 -10.allure 生成报告

pytest + yaml 框架 -10.allure 生成报告

pytest + yaml 框架 -9.logging日志输出和保存

pytest + yaml 框架 -8.一个yaml 文件可以支持多个用例了