加法测试示例¶
yaml加法测试是指:在yaml中编写进行相加的两个数以及预期结果,并由pytest加载、执行、判断。
其步骤类型单一,且不需要任何第三方组件,适合新手练习。
设计用例¶
假设在进行加法测试时,需要3个值:
num1: 第一个数字
num2 : 第二个数字
expected_results:预期的计算结果
则在yaml中可以这样表示
num1: 111
num2: 222
expected_results: 333
为符合插件要求,需要加上必填字段,即为
# test_add.yaml
name: 加法测试
steps:
- num1: 111
num2: 222
expected_results: 333
如果在测试用例需要包含多个步骤,或多组断言,可以在steps中继续增加内容
# test_add_multiple_steps.yaml
name: 加法测试
steps:
- num1: 111
num2: 222
expected_results: 333 # 成功的用例
- num1: 111
num2: 999
expected_results: 333 # 失败的用例
- num1: 111
expected_results: 333 # 不符合要求的用例
自此yaml用例已设计完毕,pytest执行结果如下:
(.venv) C:\demo\pytest-yaml-demo>pytest
================================== test session starts ===================================
platform win32 -- Python 3.12.0, pytest-8.3.4, pluggy-1.5.0
cachedir: .pytest_cache
rootdir: C:\demo\pytest-yaml-demo
configfile: pytest.ini
plugins: yaml-1.1.0
collected 2 items
test_add.yaml::加法测试 PASSED
test_add_multiple_steps.yaml::加法测试 PASSED
=================================== 2 passed in 0.02s ====================================
实现钩子¶
此时pytest虽然能够识别、加载用例内容,却没有根据用例步骤进行具体动作的执行。
既没有进行加法运算,也没有对结果进行断言。
接下来通过实现钩子将yaml用例步骤变为具体的用例动作
# conftest.py
from pytest_yaml import YamlItem
def pytest_yaml_run_step(item: YamlItem):
step = item.current_step # 取出当前测试步骤内容
# 对内容进行校验
if set(step.keys()) != {"num1", "num2", "expected_results"}:
raise ValueError("用例格式不正确")
# 执行测试步骤
results = step["num1"] + step["num2"]
# 自定义断言
assert results == step["expected_results"]
return True
实现钩子后重新启动pytest
(.venv) C:\demo\pytest-yaml-demo>pytest -vs
================================== test session starts ===================================
platform win32 -- Python 3.12.0, pytest-8.3.4, pluggy-1.5.0
cachedir: .pytest_cache
rootdir: C:\demo\pytest-yaml-demo
configfile: pytest.ini
plugins: yaml-1.1.0
collected 2 items
test_add.yaml::加法测试 PASSED
test_add_multiple_steps.yaml::加法测试 FAILED
======================================== FAILURES ========================================
________________________________________ 加法测试 _________________________________________
:
Step No: 1
Step Content:
--------------------
num1: 111
num2: 999
expected_results: 333
--------------------
C:\demo\pytest-yaml-demo\conftest.py:18: AssertionError
assert 1110 == 333
================================ short test summary info ================================
FAILED test_add_multiple_steps.yaml::加法测试
============================== 2 failed, 1 passed in 0.03s ==============================
首先看到的是,这个用例 执行失败了
再细看失败原因,正式由于第二个测试步骤 断言失败了
- num1: 111
num2: 999
expected_results: 333 # 失败的用例
备注
注意:此时 current_step_no 为1,因为从0开始计算
和普通的pytest测试用例一样的是, 当某个测试步骤执行失败,那么后续的都不再继续执行 。
所以我们只能看到第二个步骤失败,看不到第三个步骤失败(因为它没有执行)
如果你有多个测试步骤,力求每一个步骤都进行能够执行,可以考虑把步骤分散的不同的用例中中。
按照一般的测试原则,用例之间相互隔离。 所以就算某个用例失败了,其他用例也会继续执行
这里有一个小技巧:
我们不需要真的创建三个yaml文件,
只需要在同一个yaml在文件通过 ---
进行分隔,即可模拟出三个yaml文件的效果
# test_add_multiple_cases.yaml
name: 加法测试-成功
steps:
- num1: 111
num2: 222
expected_results: 333 # 成功的用例
---
name: 加法测试-失败
steps:
- num1: 111
num2: 999
expected_results: 333 # 失败的用例
---
name: 加法测试-出错
steps:
- num1: 111
expected_results: 333 # 不符合要求的用例
执行结果如下:
(.venv) C:\demo\pytest-yaml-demo>pytest -vs
================================== test session starts ===================================
platform win32 -- Python 3.12.0, pytest-8.3.4, pluggy-1.5.0
cachedir: .pytest_cache
rootdir: C:\demo\pytest-yaml-demo
configfile: pytest.ini
plugins: yaml-1.1.0
collected 3 items
test_add_multiple_cases.yaml::加法测试-成功 PASSED
test_add_multiple_cases.yaml::加法测试-失败 FAILED
test_add_multiple_cases.yaml::加法测试-出错 FAILED
======================================== FAILURES ========================================
_____________________________________ 加法测试-失败 _____________________________________
:
Step No: 0
Step Content:
--------------------
num1: 111
num2: 999
expected_results: 333
--------------------
C:\demo\pytest-yaml-demo\conftest.py:18: AssertionError
assert 1110 == 333
_____________________________________ 加法测试-出错 _____________________________________
:
Step No: 0
Step Content:
--------------------
num1: 111
expected_results: 333
--------------------
C:\demo\pytest-yaml-demo\conftest.py:13: ValueError
用例格式不正确
================================ short test summary info ================================
FAILED test_add_multiple_cases.yaml::加法测试-失败
FAILED test_add_multiple_cases.yaml::加法测试-出错
============================== 2 failed, 1 passed in 0.03s ==============================
从执行结果可以看到,1个成功2个失败
失败的原因分别是因为 断言失败 和 用例格式不正确
小节¶
至此,便实现了单一步骤类型的yaml加法测试,
你可以在测试用例中补充更多的步骤,或者创建更多的yaml文件里补充测试用例。
也可以修改用例的格式或步骤执行方式,实现其他类型的测试。