Python测试用例if条件编写及pytest多测试目录执行脚本修改方案
问题解答
问题1:Python测试用例中的if条件判断编写
以pytest框架为例,编写测试用例中的if条件判断主要有两种常见场景:
场景1:测试函数内用if做结果校验
如果需要对测试结果做复杂条件判断后再断言,可以直接在测试函数中编写if逻辑。比如测试一个年龄判定函数:
# 待测试的业务函数 def is_adult(age): if age >= 18: return True return False # 测试用例 def test_is_adult(): # 测试成年场景 result = is_adult(20) if not result: assert False, "20岁应被判定为成年" # 测试未成年场景 result = is_adult(17) if result: assert False, "17岁应被判定为未成年"
场景2:覆盖被测试函数的if分支
如果目标是覆盖被测试函数内部的if/else分支,更推荐用参数化测试替代测试函数内的重复if判断,让代码更简洁:
import pytest @pytest.mark.parametrize("age, expected", [(20, True), (17, False), (18, True)]) def test_is_adult_parametrize(age, expected): assert is_adult(age) == expected
这种方式会自动遍历所有参数组合,覆盖被测试函数的所有if分支逻辑。
问题2:修改coverage+pytest脚本执行多目录测试用例
只需要在pytest的参数中同时指定tests/和unittests/两个目录即可,pytest支持同时传入多个测试目录作为执行目标。修改后的完整脚本如下:
script: | python3 -m coverage erase python3 -m coverage run -m pytest tests/ unittests/ -v --junitxml=junit/test-results.xml --capture=${{ parameters.pytest_capture }} TEST_RESULT=$? # Create coverage report even if a test case failed python3 -m coverage html python3 -m coverage xml python3 -m coverage report --show-missing --fail-under=${{ parameters.covFailUnder }} && exit $TEST_RESULT
修改说明:将原脚本中pytest tests/部分改为pytest tests/ unittests/,pytest会自动遍历两个目录下所有符合命名规则(默认test_*.py或*_test.py)的测试用例,coverage也会正常统计这部分测试的代码覆盖率。
内容的提问来源于stack exchange,提问作者Harshith k
相关产品推荐
相关产品推荐

