Pytest命令行执行测试

Pytest命令行执行测试

from collections import namedtuple
Task = namedtuple('Task', ['summary','owner','done','id'])
# __new__.__defaults__创建默认的Task对象
Task.__new__.__defaults__ = (None, None, False, None) def test_default():
"""
如果不传任何参数,则默认调用缺省对象Task.__new__.__defaults__ = (None, None, False, None)
"""
t1 = Task()
t2 = Task(None, None, False, None)
assert t1 == t2 def test_member_access():
"""
利用属性名来访问对象成员
:return:
"""
t = Task('buy milk', 'brian')
assert t.summary == 'buy milk'
assert t.owner == 'brian'
assert(t.done, t.id) == (False, None) def test_asdict():
"""
_asdict()返回一个字典
"""
t_task = Task('do something','okken',True, 21)
t_dict = t_task._asdict()
expected_dict = {'summary': 'do something',
'owner': 'okken',
'done': True,
'id': 21}
assert t_dict == expected_dict def test_replace():
"""
_replace()替换对象成员
"""
t_before_replace = Task('finish book', 'brian', False)
t_after_replace = t_before_replace._replace(id=10, done=True)
t_expected = Task('finish book', 'brian', True, 10)
assert t_after_replace == t_expected

Pytest执行规则
pytest命令的执行可以加options和file or directory,如果不提供这些参数,pytes会在当前目录及其子目录下寻找测试文件,然后运行搜索到的测试代码;如果提供了一个或者多个文件名、目录,pytest会逐一查找并运行所有测试,为了搜索到所有的测试代码,pytest会递归遍历每个目录及其子目录,但也只是执行以test_开头或者_test开头的测试函数

pytest搜索测试文件和测试用例的过程称为测试搜索,只要遵循如下几条原则便能够被它搜索到

  • 测试文件应命名为test_(something).py或者(something)_test.py
  • 测试函数、测试类方法应命名为test_(something)
  • 测试类应命名为Test(something)

如果执行上述代码文件,执行结果为:

D:\PythonPrograms\PythonPytest\TestScripts>pytest test_two.py
============================= test session starts =============================
platform win32 -- Python 3.7.2, pytest-4.0.2, py-1.8.0, pluggy-0.12.0
rootdir: D:\PythonPrograms\PythonPytest\TestScripts, inifile:
plugins: allure-adaptor-1.7.10
collected 4 items test_two.py .... [100%] ========================== 4 passed in 0.04 seconds ===========================
  • 在执行结果的第一行显示执行代码的操作系统、python版本以及pytest的版本:platform win32 – Python 3.7.2, pytest-4.0.2, py-1.8.0, pluggy-0.12.0
  • 第二行显示搜索代码的启示目录以及配置文件,在本例中没有配置文件,因此inifile为空:rootdir: D:\PythonPrograms\PythonPytest\TestScripts, inifile:
  • 第三行显示pytest插件
  • 第四行 collected 4 items表示找到4个测试函数。
  • test_two.py … 显示的是测试文件名,后边的点表示测试通过,除了点以外,还可能遇到Failure、error(测试异常)、skip、xfail(预期失败并确实失败)、xpass(预期失败但实际通过,不符合预期)分别会显示F、E、s、x、X
  • 4 passed in 0.04 seconds 则表示测试结果和执行时间

执行单个测试用例

使用命令 pytest -v 路径/文件名::测试用例函数名 执行结果如下:

D:\PythonPrograms\Python_Pytest\TestScripts>pytest -v test_two.py::test_replace
============================= test session starts =============================
platform win32 -- Python 3.7.2, pytest-4.0.2, py-1.8.0, pluggy-0.12.0 -- c:\python37\python.exe
cachedir: .pytest_cache
rootdir: D:\PythonPrograms\Python_Pytest\TestScripts, inifile:
plugins: allure-adaptor-1.7.10
collected 1 item test_two.py::test_replace PASSED [100%] ========================== 1 passed in 0.04 seconds ===========================

命令行规则如下:
运行某个模块内的某个测试函数:

pytest test_mod.py::test_func

运行某个模块内某个类的某个测试方法

pytest test_mod.py::TestClass::test_method

执行单个测试模块

pytest test_module.py

执行某个目录下的所有测试

pytest test/

–collect-only选项

在批量执行测试用例之前,我们往往会想知道哪些用例将被执行是否符合我们的预期等等,这种场景下可以使用–collect-only选项,如下执行结果所示:

D:\PythonPrograms\Python_Pytest\TestScripts>pytest --collect-only
============================= test session starts =============================
platform win32 -- Python 3.7.2, pytest-4.0.2, py-1.8.0, pluggy-0.12.0
rootdir: D:\PythonPrograms\Python_Pytest\TestScripts, inifile:
plugins: allure-adaptor-1.7.10
collected 17 items
<Package 'D:\\PythonPrograms\\Python_Pytest\\TestScripts'>
<Module 'test_asserts.py'>
<Function 'test_add'>
<Function 'test_add2'>
<Function 'test_add3'>
<Function 'test_add4'>
<Function 'test_in'>
<Function 'test_not_in'>
<Function 'test_true'>
<Module 'test_fixture1.py'>
<Function 'test_numbers_3_4'>
<Function 'test_strings_a_3'>
<Module 'test_fixture2.py'>
<Class 'TestUM'>
<Function 'test_numbers_5_6'>
<Function 'test_strings_b_2'>
<Module 'test_one.py'>
<Function 'test_equal'>
<Function 'test_not_equal'>
<Module 'test_two.py'>
<Function 'test_default'>
<Function 'test_member_access'>
<Function 'test_asdict'>
<Function 'test_replace'> ======================== no tests ran in 0.09 seconds =========================

-k选项

该选项允许我们使用表达式指定希望运行的测试用例,如果某测试名是唯一的或者多个测试名的前缀或后缀相同,则可以使用这个选项来执行,如下执行结果所示:

D:\PythonPrograms\Python_Pytest\TestScripts>pytest -k "asdict or default" --collect-only
============================= test session starts =============================
platform win32 -- Python 3.7.2, pytest-4.0.2, py-1.8.0, pluggy-0.12.0
rootdir: D:\PythonPrograms\Python_Pytest\TestScripts, inifile:
plugins: allure-adaptor-1.7.10
collected 17 items / 15 deselected
<Package 'D:\\PythonPrograms\\Python_Pytest\\TestScripts'>
<Module 'test_two.py'>
<Function 'test_default'>
<Function 'test_asdict'> ======================== 15 deselected in 0.06 seconds ========================

从执行结果中我们能看到使用-k和–collect-only组合能够查询到我们设置的参数所能执行的测试方法。
然后我们将–collect-only从命令行移出,只使用-k便可执行test_default和test_asdict了

D:\PythonPrograms\Python_Pytest\TestScripts>pytest -k "asdict or default"
============================= test session starts =============================
platform win32 -- Python 3.7.2, pytest-4.0.2, py-1.8.0, pluggy-0.12.0
rootdir: D:\PythonPrograms\Python_Pytest\TestScripts, inifile:
plugins: allure-adaptor-1.7.10
collected 17 items / 15 deselected test_two.py .. [100%] =================== 2 passed, 15 deselected in 0.07 seconds ===================

如果我们在定义用例名的时候特别注意一下便可以使用-k的方式执行一系列测试用例了,同时表达式中科包含 and、or、not

-m选项

用于标记并分组,然后仅执行带有标记的用例,如此便实现了执行某个测试集合的场景,如下代码所示,给我们之前的两个测试方法添加标记

@pytest.mark.run_these_cases
def test_member_access():
"""
利用属性名来访问对象成员
:return:
"""
t = Task('buy milk', 'brian')
assert t.summary == 'buy milk'
assert t.owner == 'brian'
assert(t.done, t.id) == (False, None) @pytest.mark.run_these_cases
def test_asdict():
"""
_asdict()返回一个字典
"""
t_task = Task('do something','okken',True, 21)
t_dict = t_task._asdict()
expected_dict = {'summary': 'do something',
'owner': 'okken',
'done': True,
'id': 21}
assert t_dict == expected_dict

执行命令:pytest -v -m run_these_cases,结果如下:

D:\PythonPrograms\Python_Pytest\TestScripts>pytest -v -m run_these_cases
============================= test session starts =============================
platform win32 -- Python 3.7.2, pytest-4.0.2, py-1.8.0, pluggy-0.12.0 -- c:\python37\python.exe
cachedir: .pytest_cache
rootdir: D:\PythonPrograms\Python_Pytest\TestScripts, inifile:
plugins: allure-adaptor-1.7.10
collected 17 items / 15 deselected test_two.py::test_member_access PASSED [ 50%]
test_two.py::test_asdict PASSED [100%] =================== 2 passed, 15 deselected in 0.07 seconds ===================

-m选项也可以用表达式指定多个标记名,例如-m “mark1 and mark2” 或者-m “mark1 and not mark2” 或者-m “mark1 or mark2”

-x选项
Pytest会运行每一个搜索到的测试用例,如果某个测试函数被断言失败,或者触发了外部异常,则该测试用例的运行就会停止,pytest将其标记为失败后继续运行一下测试用例,然而在debug的时候,我们往往希望遇到失败时立刻停止整个会话,-x选项为我们提供了该场景的支持,如下执行结果所示:

E:\Programs\Python\Python_Pytest\TestScripts>pytest -x
=============================== test session starts ==============================
platform win32 -- Python 3.7.3, pytest-4.5.0, py-1.8.0, pluggy-0.11.0
rootdir: E:\Programs\Python\Python_Pytest\TestScripts
plugins: allure-pytest-2.6.3
collected 17 items test_asserts.py ...F ========================FAILURES =================================================
_________________________test_add4 _____________________________________________________ def test_add4():
> assert add(17,22) >= 50
E assert 39 >= 50
E + where 39 = add(17, 22) test_asserts.py:34: AssertionError
======================== warnings summary ====================================
c:\python37\lib\site-packages\_pytest\mark\structures.py:324
c:\python37\lib\site-packages\_pytest\mark\structures.py:324: PytestUnknownMarkWarning: Unknown pytest.mark.run_these_cases - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pyt
est.org/en/latest/mark.html
PytestUnknownMarkWarning, -- Docs: https://docs.pytest.org/en/latest/warnings.html
===================== 1 failed, 3 passed, 1 warnings in 0.41 seconds ====================

在执行结果中我们可以看到实际收集的测试用例是17条,但执行了4条,通过3条失败一条,执行便停止了。
如果不适用-x选项再执行一次结果如下:

E:\Programs\Python\Python_Pytest\TestScripts>pytest --tb=no
=============================== test session starts ================================
platform win32 -- Python 3.7.3, pytest-4.5.0, py-1.8.0, pluggy-0.11.0
rootdir: E:\Programs\Python\Python_Pytest\TestScripts
plugins: allure-pytest-2.6.3
collected 17 items test_asserts.py ...F..F [ 41%]
test_fixture1.py .. [ 52%]
test_fixture2.py .. [ 64%]
test_one.py .F [ 76%]
test_two.py .... [100%] ============================ warnings summary =================================
c:\python37\lib\site-packages\_pytest\mark\structures.py:324
c:\python37\lib\site-packages\_pytest\mark\structures.py:324: PytestUnknownMarkWarning: Unknown pytest.mark.run_these_cases - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pyt
est.org/en/latest/mark.html
PytestUnknownMarkWarning, -- Docs: https://docs.pytest.org/en/latest/warnings.html
================= 3 failed, 14 passed, 1 warnings in 0.31 seconds ========================

从执行结果中我们看到一共收集的测试用例为17条,14条通过,3条失败,使用了选项–tb=no关闭错误信息回溯,当我们只想看执行结果而不想看那么多报错信息的时候可以使用它。

–maxfail=num选项
-x是遇到失败便全局停止,如果我们想遇到失败几次再停止呢?–maxfail选项为我们提供了这个场景的支持,如下执行结果所示:

E:\Programs\Python\Python_Pytest\TestScripts>pytest --maxfail=2 --tb=no
================================ test session starts ====================================
platform win32 -- Python 3.7.3, pytest-4.5.0, py-1.8.0, pluggy-0.11.0
rootdir: E:\Programs\Python\Python_Pytest\TestScripts
plugins: allure-pytest-2.6.3
collected 17 items test_asserts.py ...F..F ============================= warnings summary ====================================
c:\python37\lib\site-packages\_pytest\mark\structures.py:324
c:\python37\lib\site-packages\_pytest\mark\structures.py:324: PytestUnknownMarkWarning: Unknown pytest.mark.run_these_cases - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pyt
est.org/en/latest/mark.html
PytestUnknownMarkWarning, -- Docs: https://docs.pytest.org/en/latest/warnings.html
=========================== 2 failed, 5 passed, 1 warnings in 0.22 seconds ===================

从执行结果中我们看到收集了17条用例,执行了7条,当错误数量达到2的时候便停止了执行。

–tb=

Pytest命令行执行测试

-v(–verbose)
-v, --verbose:increase verbosity.

-q(–quiet)
-q, --quiet:decrease verbosity.

–lf(–last-failed)
–lf, --last-failed:rerun only the tests that failed at the last run (or all if none failed)

E:\Programs\Python\Python_Pytest\TestScripts>pytest --lf --tb=no
========================== test session starts ========================================
platform win32 -- Python 3.7.3, pytest-4.5.0, py-1.8.0, pluggy-0.11.0
rootdir: E:\Programs\Python\Python_Pytest\TestScripts
plugins: allure-pytest-2.6.3
collected 9 items / 6 deselected / 3 selected
run-last-failure: rerun previous 3 failures (skipped 7 files)
test_asserts.py FF [ 66%]
test_one.py F [100%] ======================== 3 failed, 6 deselected in 0.15 seconds ============================

–ff(–failed-first)
–ff, --failed-first :run all tests but run the last failures first. This may re-order tests and thus lead to repeated fixture setup/teardown

E:\Programs\Python\Python_Pytest\TestScripts>pytest --ff --tb=no
================================= test session starts ==================================
platform win32 -- Python 3.7.3, pytest-4.5.0, py-1.8.0, pluggy-0.11.0
rootdir: E:\Programs\Python\Python_Pytest\TestScripts
plugins: allure-pytest-2.6.3
collected 17 items
run-last-failure: rerun previous 3 failures first
test_asserts.py FF [ 11%]
test_one.py F [ 17%]
test_asserts.py ..... [ 47%]
test_fixture1.py .. [ 58%]
test_fixture2.py .. [ 70%]
test_one.py . [ 76%]
test_two.py .... [100%]
======================== warnings summary ==========================================
c:\python37\lib\site-packages\_pytest\mark\structures.py:324
c:\python37\lib\site-packages\_pytest\mark\structures.py:324: PytestUnknownMarkWarning: Unknown pytest.mark.run_these_cases - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pyt
est.org/en/latest/mark.html
PytestUnknownMarkWarning, -- Docs: https://docs.pytest.org/en/latest/warnings.html
================= 3 failed, 14 passed, 1 warnings in 0.25 seconds ==========================

-s与–capture=method

-s等同于–capture=no,执行结果如下:

(venv) D:\Python_Pytest\TestScripts>pytest -s
============================= test session starts ============================================
platform win32 -- Python 3.7.3, pytest-4.0.2, py-1.8.0, pluggy-0.12.0
rootdir: D:\Python_Pytest\TestScripts, inifile:
plugins: allure-adaptor-1.7.10
collected 18 items test_asserts.py ...F...F
test_fixture1.py setup_module================>
setup_function------>
test_numbers_3_4
.teardown_function--->
setup_function------>
test_strings_a_3
.teardown_function--->
teardown_module=============> test_fixture2.py setup_class=========>
setup_method----->>
setup----->
test_numbers_5_6
.teardown-->
teardown_method-->>
setup_method----->>
setup----->
test_strings_b_2
.teardown-->
teardown_method-->>
teardown_class=========> test_one.py .F
test_two.py .... ========================= FAILURES =============================================
_____________________________ test_add4 ______________________________________________ @pytest.mark.aaaa
def test_add4():
> assert add(17, 22) >= 50
E assert 39 >= 50
E + where 39 = add(17, 22) test_asserts.py:36: AssertionError
_____________________________________________________________________________________________________________ test_not_true ______________________________________________________________________________________________________________ def test_not_true():
> assert not is_prime(7)
E assert not True
E + where True = is_prime(7) test_asserts.py:70: AssertionError
_______________________________________ test_not_equal ________________________________________________ def test_not_equal():
> assert (1, 2, 3) == (3, 2, 1)
E assert (1, 2, 3) == (3, 2, 1)
E At index 0 diff: 1 != 3
E Use -v to get the full diff test_one.py:9: AssertionError
================================== 3 failed, 15 passed in 0.15 seconds =================================

–capture=method per-test capturing method: one of fd|sys|no.

-l(–showlocals)
-l, --showlocals show locals in tracebacks (disabled by default).

–duration=N
–durations=N show N slowest setup/test durations (N=0 for all).
绝大多数用于调优测试代码,该选项展示最慢的N个用例,等于0则表示全部倒序

(venv) D:\Python_Pytest\TestScripts>pytest --duration=5
============================= test session starts =============================
platform win32 -- Python 3.7.3, pytest-4.0.2, py-1.8.0, pluggy-0.12.0
rootdir: D:\Python_Pytest\TestScripts, inifile:
plugins: allure-adaptor-1.7.10
collected 18 items test_asserts.py ...F...F [ 44%]
test_fixture1.py .. [ 55%]
test_fixture2.py .. [ 66%]
test_one.py .F [ 77%]
test_two.py .... [100%] ================================== FAILURES ===================================
__________________________________ test_add4 __________________________________ @pytest.mark.aaaa
def test_add4():
> assert add(17, 22) >= 50
E assert 39 >= 50
E + where 39 = add(17, 22) test_asserts.py:36: AssertionError
________________________________ test_not_true ________________________________ def test_not_true():
> assert not is_prime(7)
E assert not True
E + where True = is_prime(7) test_asserts.py:70: AssertionError
_______________________________ test_not_equal ________________________________ def test_not_equal():
> assert (1, 2, 3) == (3, 2, 1)
E assert (1, 2, 3) == (3, 2, 1)
E At index 0 diff: 1 != 3
E Use -v to get the full diff test_one.py:9: AssertionError
========================== slowest 5 test durations ===========================
0.01s call test_asserts.py::test_add4 (0.00 durations hidden. Use -vv to show these durations.)
===================== 3 failed, 15 passed in 0.27 seconds =====================

在执行结果中我们看到提示(0.00 durations hidden. Use -vv to show these durations.),如果加上-vv,执行结果如下:

(venv) D:\Python_Pytest\TestScripts>pytest --duration=5 -vv
============================= test session starts =============================
platform win32 -- Python 3.7.3, pytest-4.0.2, py-1.8.0, pluggy-0.12.0 -- c:\python37\python.exe
cachedir: .pytest_cache
rootdir: D:\Python_Pytest\TestScripts, inifile:
plugins: allure-adaptor-1.7.10
collected 18 items test_asserts.py::test_add PASSED [ 5%]
test_asserts.py::test_add2 PASSED [ 11%]
test_asserts.py::test_add3 PASSED [ 16%]
test_asserts.py::test_add4 FAILED [ 22%]
test_asserts.py::test_in PASSED [ 27%]
test_asserts.py::test_not_in PASSED [ 33%]
test_asserts.py::test_true PASSED [ 38%]
test_asserts.py::test_not_true FAILED [ 44%]
test_fixture1.py::test_numbers_3_4 PASSED [ 50%]
test_fixture1.py::test_strings_a_3 PASSED [ 55%]
test_fixture2.py::TestUM::test_numbers_5_6 PASSED [ 61%]
test_fixture2.py::TestUM::test_strings_b_2 PASSED [ 66%]
test_one.py::test_equal PASSED [ 72%]
test_one.py::test_not_equal FAILED [ 77%]
test_two.py::test_default PASSED [ 83%]
test_two.py::test_member_access PASSED [ 88%]
test_two.py::test_asdict PASSED [ 94%]
test_two.py::test_replace PASSED [100%] ================================== FAILURES ===================================
__________________________________ test_add4 __________________________________ @pytest.mark.aaaa
def test_add4():
> assert add(17, 22) >= 50
E assert 39 >= 50
E + where 39 = add(17, 22) test_asserts.py:36: AssertionError
________________________________ test_not_true ________________________________ def test_not_true():
> assert not is_prime(7)
E assert not True
E + where True = is_prime(7) test_asserts.py:70: AssertionError
_______________________________ test_not_equal ________________________________ def test_not_equal():
> assert (1, 2, 3) == (3, 2, 1)
E assert (1, 2, 3) == (3, 2, 1)
E At index 0 diff: 1 != 3
E Full diff:
E - (1, 2, 3)
E ? ^ ^
E + (3, 2, 1)
E ? ^ ^ test_one.py:9: AssertionError
========================== slowest 5 test durations ===========================
0.00s setup test_one.py::test_not_equal
0.00s setup test_fixture1.py::test_strings_a_3
0.00s setup test_asserts.py::test_add3
0.00s call test_fixture2.py::TestUM::test_strings_b_2
0.00s call test_asserts.py::test_in
===================== 3 failed, 15 passed in 0.16 seconds =====================

-r

生成一个简短的概述报告,同时配合-r还可以使用

Pytest命令行执行测试

例如只想看失败的和跳过的测试,可以这样执行

(venv) E:\Python_Pytest\TestScripts>pytest -rfs
============================= test session starts =============================
platform win32 -- Python 3.7.3, pytest-4.0.2, py-1.8.0, pluggy-0.12.0
rootdir: E:\Python_Pytest\TestScripts, inifile:
plugins: allure-adaptor-1.7.10
collected 18 items test_asserts.py ...F...F [ 44%]
test_fixture1.py .. [ 55%]
test_fixture2.py .. [ 66%]
test_one.py .F [ 77%]
test_two.py .... [100%] ================================== FAILURES ===================================
__________________________________ test_add4 __________________________________ @pytest.mark.aaaa
def test_add4():
> assert add(17, 22) >= 50
E assert 39 >= 50
E + where 39 = add(17, 22) test_asserts.py:36: AssertionError
________________________________ test_not_true ________________________________ def test_not_true():
> assert not is_prime(7)
E assert not True
E + where True = is_prime(7) test_asserts.py:70: AssertionError
_______________________________ test_not_equal ________________________________ def test_not_equal():
> assert (1, 2, 3) == (3, 2, 1)
E assert (1, 2, 3) == (3, 2, 1)
E At index 0 diff: 1 != 3
E Use -v to get the full diff test_one.py:9: AssertionError
=========================== short test summary info ===========================
FAIL test_asserts.py::test_add4
FAIL test_asserts.py::test_not_true
FAIL test_one.py::test_not_equal
===================== 3 failed, 15 passed in 0.10 seconds =====================

pytest --help 获取更多参数
在命令行输入pytest --help 然后执行结果如下,在打印出来的结果中我们能够看到pytest命令的使用方式usage: pytest [options] [file_or_dir] [file_or_dir] […]以及一系列的执行方式(options)及其描述。

C:\Users\Administrator>pytest --help
usage: pytest [options] [file_or_dir] [file_or_dir] [...]
positional arguments:
file_or_dir
general:
-k EXPRESSION only run tests which match the given substring
expression. An expression is a python evaluatable
expression where all names are substring-matched
against test names and their parent classes. Example:
-k 'test_method or test_other' matches all test
functions and classes whose name contains
'test_method' or 'test_other', while -k 'not
test_method' matches those that don't contain
'test_method' in their names. Additionally keywords
are matched to classes and functions containing extra
names in their 'extra_keyword_matches' set, as well as
functions which have names assigned directly to them.
-m MARKEXPR only run tests matching given mark expression.
example: -m 'mark1 and not mark2'.
--markers show markers (builtin, plugin and per-project ones).
-x, --exitfirst exit instantly on first error or failed test.
--maxfail=num exit after first num failures or errors.
--strict marks not registered in configuration file raise
errors.
-c file load configuration from `file` instead of trying to
locate one of the implicit configuration files.
--continue-on-collection-errors
Force test execution even if collection errors occur.
--rootdir=ROOTDIR Define root directory for tests. Can be relative path:
'root_dir', './root_dir', 'root_dir/another_dir/';
absolute path: '/home/user/root_dir'; path with
variables: '$HOME/root_dir'.
--fixtures, --funcargs
show available fixtures, sorted by plugin appearance
(fixtures with leading '_' are only shown with '-v')
--fixtures-per-test show fixtures per test
--import-mode={prepend,append}
prepend/append to sys.path when importing test
modules, default is to prepend.
--pdb start the interactive Python debugger on errors or
KeyboardInterrupt.
--pdbcls=modulename:classname
start a custom interactive Python debugger on errors.
For example:
--pdbcls=IPython.terminal.debugger:TerminalPdb
--trace Immediately break when running each test.
--capture=method per-test capturing method: one of fd|sys|no.
-s shortcut for --capture=no.
--runxfail run tests even if they are marked xfail
--lf, --last-failed rerun only the tests that failed at the last run (or
all if none failed)
--ff, --failed-first run all tests but run the last failures first. This
may re-order tests and thus lead to repeated fixture
setup/teardown
--nf, --new-first run tests from new files first, then the rest of the
tests sorted by file mtime
--cache-show show cache contents, don't perform collection or tests
--cache-clear remove all cache contents at start of test run.
--lfnf={all,none}, --last-failed-no-failures={all,none}
change the behavior when no test failed in the last
run or no information about the last failures was
found in the cache
--sw, --stepwise exit on test fail and continue from last failing test
next time
--stepwise-skip ignore the first failing test but stop on the next
failing test
--allure_severities=SEVERITIES_SET
Comma-separated list of severity names. Tests only
with these severities will be run. Possible values
are:blocker, critical, minor, normal, trivial.
--allure_features=FEATURES_SET
Comma-separated list of feature names. Run tests that
have at least one of the specified feature labels.
--allure_stories=STORIES_SET
Comma-separated list of story names. Run tests that
have at least one of the specified story labels. reporting:
-v, --verbose increase verbosity.
-q, --quiet decrease verbosity.
--verbosity=VERBOSE set verbosity
-r chars show extra test summary info as specified by chars
(f)ailed, (E)error, (s)skipped, (x)failed, (X)passed,
(p)passed, (P)passed with output, (a)all except pP.
Warnings are displayed at all times except when
--disable-warnings is set
--disable-warnings, --disable-pytest-warnings
disable warnings summary
-l, --showlocals show locals in tracebacks (disabled by default).
--tb=style traceback print mode (auto/long/short/line/native/no).
--show-capture={no,stdout,stderr,log,all}
Controls how captured stdout/stderr/log is shown on
failed tests. Default is 'all'.
--full-trace don't cut any tracebacks (default is to cut).
--color=color color terminal output (yes/no/auto).
--durations=N show N slowest setup/test durations (N=0 for all).
--pastebin=mode send failed|all info to bpaste.net pastebin service.
--junit-xml=path create junit-xml style report file at given path.
--junit-prefix=str prepend prefix to classnames in junit-xml output
--result-log=path DEPRECATED path for machine-readable result log. collection:
--collect-only only collect tests, don't execute them.
--pyargs try to interpret all arguments as python packages.
--ignore=path ignore path during collection (multi-allowed).
--deselect=nodeid_prefix
deselect item during collection (multi-allowed).
--confcutdir=dir only load conftest.py's relative to specified dir.
--noconftest Don't load any conftest.py files.
--keep-duplicates Keep duplicate tests.
--collect-in-virtualenv
Don't ignore tests in a local virtualenv directory
--doctest-modules run doctests in all .py modules
--doctest-report={none,cdiff,ndiff,udiff,only_first_failure}
choose another output format for diffs on doctest
failure
--doctest-glob=pat doctests file matching pattern, default: test*.txt
--doctest-ignore-import-errors
ignore doctest ImportErrors
--doctest-continue-on-failure
for a given doctest, continue to run after the first
failure test session debugging and configuration:
--basetemp=dir base temporary directory for this test run.(warning:
this directory is removed if it exists)
--version display pytest lib version and import information.
-h, --help show help message and configuration info
-p name early-load given plugin (multi-allowed). To avoid
loading of plugins, use the `no:` prefix, e.g.
`no:doctest`.
--trace-config trace considerations of conftest.py files.
--debug store internal tracing debug information in
'pytestdebug.log'.
-o OVERRIDE_INI, --override-ini=OVERRIDE_INI
override ini option with "option=value" style, e.g.
`-o xfail_strict=True -o cache_dir=cache`.
--assert=MODE Control assertion debugging tools. 'plain' performs no
assertion debugging. 'rewrite' (the default) rewrites
assert statements in test modules on import to provide
assert expression information.
--setup-only only setup fixtures, do not execute tests.
--setup-show show setup of fixtures while executing tests.
--setup-plan show what fixtures and tests would be executed but
don't execute anything. pytest-warnings:
-W PYTHONWARNINGS, --pythonwarnings=PYTHONWARNINGS
set which warnings to report, see -W option of python
itself. logging:
--no-print-logs disable printing caught logs on failed tests.
--log-level=LOG_LEVEL
logging level used by the logging module
--log-format=LOG_FORMAT
log format as used by the logging module.
--log-date-format=LOG_DATE_FORMAT
log date format as used by the logging module.
--log-cli-level=LOG_CLI_LEVEL
cli logging level.
--log-cli-format=LOG_CLI_FORMAT
log format as used by the logging module.
--log-cli-date-format=LOG_CLI_DATE_FORMAT
log date format as used by the logging module.
--log-file=LOG_FILE path to a file when logging will be written to.
--log-file-level=LOG_FILE_LEVEL
log file logging level.
--log-file-format=LOG_FILE_FORMAT
log format as used by the logging module.
--log-file-date-format=LOG_FILE_DATE_FORMAT
log date format as used by the logging module. reporting:
--alluredir=DIR Generate Allure report in the specified directory (may
not exist) [pytest] ini-options in the first pytest.ini|tox.ini|setup.cfg file found: markers (linelist) markers for test functions
empty_parameter_set_mark (string) default marker for empty parametersets
norecursedirs (args) directory patterns to avoid for recursion
testpaths (args) directories to search for tests when no files or dire
console_output_style (string) console output: classic or with additional progr
usefixtures (args) list of default fixtures to be used with this project
python_files (args) glob-style file patterns for Python test module disco
python_classes (args) prefixes or glob names for Python test class discover
python_functions (args) prefixes or glob names for Python test function and m
xfail_strict (bool) default for the strict parameter of xfail markers whe
junit_suite_name (string) Test suite name for JUnit report
junit_logging (string) Write captured log messages to JUnit report: one of n
doctest_optionflags (args) option flags for doctests
doctest_encoding (string) encoding used for doctest files
cache_dir (string) cache directory path.
filterwarnings (linelist) Each line specifies a pattern for warnings.filterwar
log_print (bool) default value for --no-print-logs
log_level (string) default value for --log-level
log_format (string) default value for --log-format
log_date_format (string) default value for --log-date-format
log_cli (bool) enable log display during test run (also known as "li
log_cli_level (string) default value for --log-cli-level
log_cli_format (string) default value for --log-cli-format
log_cli_date_format (string) default value for --log-cli-date-format
log_file (string) default value for --log-file
log_file_level (string) default value for --log-file-level
log_file_format (string) default value for --log-file-format
log_file_date_format (string) default value for --log-file-date-format
addopts (args) extra command line options
minversion (string) minimally required pytest version environment variables:
PYTEST_ADDOPTS extra command line options
PYTEST_PLUGINS comma-separated plugins to load during startup
PYTEST_DISABLE_PLUGIN_AUTOLOAD set to disable plugin auto-loading
PYTEST_DEBUG set to enable debug tracing of pytest's internals to see available markers type: pytest --markers
to see available fixtures type: pytest --fixtures
(shown according to specified file_or_dir or current dir if not specified; fixtures with leading '_' are only shown with the '-v' option
上一篇:[补档] 大假期集训Part.1


下一篇:Mac os下换行符导致发布到npm里的命令行模块不能使用问题