1. Pytest的简单学习记录

1.1. 引发错误的方法

1 使用断言 assert 2 with pytest.raises('Error') 例如: with pytest.raises(TypeError) 如果正常的引发异常则通过,没有抛出异常或抛出的异常类型不正确,则测试失败 另一种方式判断异常信息

with pytest.raises(ValueError) as excinfo:
exception_msg = excinfo.value.args[0]
assert exception_msg == "自定义的错误信息"

1.2. 参数选项

1.2.1. -s

允许运行的过程中打印输出(允许print) example : pytest -s

--collect-only 仅收集将要执行的测试(不运行) example : pytest --collect-only

1.2.2. -k

使用表达式来查找要运行的测试 k为关键词,将运行所有包含关键词的测试 example : pytest -k "baidu"

1.2.3. -m

使用标签来运行标记的测试 example : 假定标签为 run_these_test 先打标签:@pytest.mark.run_these_test def test_member_access(): 运行标记的测试: pytest -m run_these_test

1.2.4. -x

当运行到失败的测试时立刻停止 example : pytest -x

1.2.5. --tb=no

不打印报错信息

1.2.6. --maxfail="num"

规定最大失败次数,如果超过失败次数则停止运行 example : pytest --maxfail=2

1.2.7. -l / --showlocals

如果测试失败,将会在测试中打印局部变量 example : pytest -l

1.2.8. --lf / --last-failed

仅仅执行上次执行失败的测试 example : pytest --lf

1.2.9. --ff / --failed-first

在执行完上次失败的测试后再执行上次正确的测试 example: pytest --ff

1.2.10. -v

打印出测试的详细情况 example : pytest -v

1.2.11. -q \ --quit

打印出测试的简略情况

1.2.12. --tb=(no, style, line, short, long)

展示测试失败时,错误信息(回溯信息)的详细程度

1.2.13. --durations="num"

如果你传入 --durations = 0,它会按照从最慢到最快的顺序报告所有内容。


1.3. 冒烟测试

冒烟测试 对测试中的部分进行标记,在运行测试时仅仅运行标记的子集,冒烟测试的目的是有选择的快速运行标记过的测试项以方便开发人员对系统健康的一部分进行了解。

1.3.1. - 标记方法

# smoke为标记用的字符串,可以自定义
@pytest.mark.smoke
def test_list()
    ...
    return ...

1.3.2. - 运行冒烟测试

$ pytest -v -m 'smoke' test_filename.py

如果有其他标记项,则运行的命令可以是

  1. pytest​​ ​​-v​​ ​​-m​​ ​​'smoke and not get'​​ ​​test_api_exceptions.py
  2. pytest​​ ​​-v​​ ​​-m​​ ​​'smoke and get'​​ ​​test_api_exceptions.py
  3. ​​pytest​​ ​​-v​​ ​​-m​​ ​​'get'​​ ​​test_api_exceptions.py

以下的教程基本为 如何跳过 或 主动抛出错误的情况, 一般会有参数说明reason。 如果执行时要显示说明 需要执行时添加参数 -rs

1.3.3. 跳过某个测试 skip

如果有个API接口暂不确定,或者需要单独测试你应当跳过这个API的测试

@pytest.mark.skip(reason="原因")

1.3.4. 有条件的跳过某个测试 skipif

@pytest.mark.skipif(有效的Python表达式)

例子:

@pytest.mark.skipif(tasks.__version__ <'0.2.0', reason='not supported until version 0.2.0')

1.3.5. 跳过某测试模块 importskip

@pytest.importskip("模块名")

也可以根据模块的版本跳过

@pytest.importskip("模块名",minversion="version_num") 例子:

@pytest.importskip("docutils")
@pytest.importskip("docutils", minversion="0.3")

1.3.6. 意料之中的失败 xfail

可以使用xfail标记指示您希望测试失败。一个常见的用例是当你发现在你的软件中的错误,你写一个测试记录软件如何应该的行为。在您修复错误之前,此测试当然会失败。为避免测试失败,请将测试标记为xfail。修复错误后,删除xfail标记并进行回归测试,确保错误不会再次发生

strict参数

建议设置strict=True以确保XPASS(意外通过)时,测试的记录为失败 如果预期失败的代码,意外通过了测试将很容易导致开发人员的误解。

@pytest.mark.xfail(strict=True)

reason参数

与skipif一样,可以标记对故障的期待

# 标记对故障的期待,如果测试失败且未在加注中提及,则将报告为常规故障
@pytest.mark.xfail(sys.version_info >= (3,6),
                   reason="python3.6 api changes")
def test_function():
    ...

raises参数

具体的说明测试失败的原因。可以在raises参数中指定单个异常或异常组

@pyest.mark.xfail(raises=RuntimeError)

如果测试失败且没有提到指定的异常,那么测试将被报告为常规失败raises

results matching ""

    No results matching ""

    results matching ""

      No results matching ""