You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 04:50:18