除了手动注册标记之外,pytest 还内置了一些标记可直接使用,每种内置标记都会用例带来不同的特殊效果,本文先介绍 3 种。
1. skip
skip 标记通常用于忽略暂时无法执行,或不需要执行的用例。
pytest 在执行用例时,如果发现用例有 skip 标记会无条件跳过,从而避免执行。
下面这个示例中,为用例使用了 skip
标记
# tests/test_mark_skip.yaml
test_name: 跳过用例
mark:
- skip # 跳过该用例,不执行
steps:
- request:
method: get
url: https://www.baidu.com
执行结果如下:
图 1.skip 标记使用例被跳过执行
2. skipif
skipif 标记通常用于动态判断是否执行的用例。
pytest 在执行用例时,如果发现用例有 skipif 标记,会判断标记中的表达式:
-
如果为真:跳过执行
-
如果为假:正常执行
下面这个示例中,为用例使用了 skipif
标记
# tests/test_mark_skipif.yaml
test_name: 跳过条件为真
mark:
- skipif: 1==1 # 跳过该用例,不执行
steps:
- request:
method: get
url: https://www.baidu.com
执行结果如下:
图 2. 条件为真时跳过执行
将 skipif 条件改为假
---
test_name: 跳过条件为假
mark:
- skipif: 1==2 # 不跳过该用例,正常执行
steps:
- request:
method: get
url: https://www.baidu.com
可以正常执行了
图 3. 条件为假时跳过执行
3. xfail
xfail 标记用来改变用例的预期结果。
一般来说,用例的预期结果执行过程中没有任何异常、错误。但是某些情况下可能预期用例执行过程中出现异常(例如断网)。
pytest 在执行用例时,如果发现用例有 xfail 标记:
-
如果出现异常,将结果改为 xfailed,意外预期内的失败
-
如果没有异常,将结果改为 xpassed,以为预期外的通过
创建三个用例,分别实现正常的通过、预期内外的失败,预期外的通过
# tests/test_mark_skipif.yaml
test_name: 失败的用例
steps:
- request:
method: get
url: http://x1x2c3x5.x6 # 错误的地址,注定失败
---
test_name: 预期内的失败
mark:
- xfail # 通过标记预期失败
steps:
- request:
method: get
url: http://x1x2c3x5.x6 # 错误的地址,注定失败
---
test_name: 预期外的通过
mark:
- xfail # 通过标记预期失败
steps:
- request:
method: get
url: https://www.baidu.com # 正确的地址会成功
执行结果如下:
图 4. 预期内的失败与预期外的通过
能看到这里说明是真爱,关注一下吧