06-pytest标记
panxueyan 11/26/2022  pytest
# pytest自定义运行规则
# 自定义运行规则
文件名pytest.ini
[pytest]
addopts = -S
# 当前目录下的scripts文件夹 -可自定义
testpaths = testcase
# 当前目录下的scripts文件夹下,以test。 开头,以。py结尾的所有文件 -可自定义
python_files = test_*.py
# 当前目录下的scripts文件夹下,以test_ 开头,以.py结尾的所有文件中,以Test_开头的类-可自定义
python_classes = Test_*
# 当前目录下的scripts文件夹下,以test 开头,以.py结尾的所有文件中,以Test_开头的类内,以test_开头的方法 -可自定义
python_ functions = test_*
pytest.ini
[pytest]
addopts = -v
testpaths = testcases
python_files = Test_*.py
python_classes = Test_*
python_functions = test_*
 1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
$ ls -al
total 35
drwxr-xr-x 1 94485 197609    0 11月 27 21:29 ./
drwxr-xr-x 1 94485 197609    0 11月 21 20:32 ../
drwxr-xr-x 1 94485 197609    0 11月 27 17:27 .pytest_cache/
drwxr-xr-x 1 94485 197609    0 11月 27 21:20 __pycache__/
-rw-r--r-- 1 94485 197609  625 11月 27 17:53 method_test.py
-rw-r--r-- 1 94485 197609    0 11月 27 21:28 pytest.ini
-rw-r--r-- 1 94485 197609  438 11月 27 17:31 test_01.py
-rw-r--r-- 1 94485 197609  738 11月 27 20:47 test_addfinalizer.py
-rw-r--r-- 1 94485 197609 1430 11月 27 20:32 test_class.py
-rw-r--r-- 1 94485 197609  810 11月 27 20:41 test_fixture.py
-rw-r--r-- 1 94485 197609  625 11月 27 17:53 test_method.py
-rw-r--r-- 1 94485 197609  907 11月 27 20:11 test_method2.py
-rw-r--r-- 1 94485 197609 1257 11月 27 20:18 test_module.py
-rw-r--r-- 1 94485 197609 1657 11月 27 20:35 test_module_class_method.py
drwxr-xr-x 1 94485 197609    0 11月 27 21:29 testcases/
D:\pycharm_worksapce\python_test_framework\pytest
$ ls testcases\
test_class.py
D:\pycharm_worksapce\python_test_framework\pytest
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
testcases/test_class.py
# ! /usr/bin/python3
# coding=utf-8
# @Time: 2022/11/27 20:21
# @Author: xueyan pan
import pytest
import sys
# 类和方法
class TestCase():
    def setup(self):
        print("{}: 每个用例开始前执行".format(sys._getframe().f_code.co_name))
    def teardown(self):
        print("{}: 每个用例结束后执行".format(sys._getframe().f_code.co_name))
    def setup_class(self):
        print("{}:所有用例执行之前".format(sys._getframe().f_code.co_name))
    def teardown_class(self):
        print("{}:所有用例执行之前".format(sys._getframe().f_code.co_name))
    def setup_method(self):
        print("{}:  每个用例开始前执行".format(sys._getframe().f_code.co_name))
    def teardown_method(self):
        print("{}:  每个用例结束后执行".format(sys._getframe().f_code.co_name))
    def test_one(self):
        print("正在执行----{}".format(sys._getframe().f_code.co_name))
        x = "hello"
        assert 'h' in x
    def test_two(self):
        print("正在执行----{}".format(sys._getframe().f_code.co_name))
        x = "hello"
        assert hasattr(x, 'check')
    def test_three(self):
        print("正在执行----{}".format(sys._getframe().f_code.co_name))
        a = "hello"
        b = "hello world"
        assert a in b
if __name__ == "__main__":
    pytest.main(["-s", "test_class.py"])
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
pytest -v
 1
(pythonProject) PS D:\pycharm_worksapce\python_test_framework\pytest> pytest -v
========================================================================== test session starts ===========================================================================
platform win32 -- Python 3.11.0rc2, pytest-7.2.0, pluggy-1.0.0 -- D:\pythonENV\pythonProject\Scripts\python.exe
cachedir: .pytest_cache
rootdir: D:\pycharm_worksapce\python_test_framework\pytest, configfile: pytest.ini, testpaths: testcases
plugins: anyio-3.6.2, order-1.0.1
collected 3 items                                                                                                                                                         
testcases/test_class.py::TestCase::test_one PASSED                                                                                                                  [ 33%] 
testcases/test_class.py::TestCase::test_two FAILED                                                                                                                  [ 66%]
testcases/test_class.py::TestCase::test_three PASSED                                                                                                                [100%] 
================================================================================ FAILURES ================================================================================ 
___________________________________________________________________________ TestCase.test_two ____________________________________________________________________________ 
self = <test_class.TestCase object at 0x0000017D54C65350>
    def test_two(self):
        print("正在执行----{}".format(sys._getframe().f_code.co_name))
        x = "hello"
>       assert hasattr(x, 'check')
E       AssertionError: assert False
E        +  where False = hasattr('hello', 'check')
testcases\test_class.py:40: AssertionError
------------------------------------------------------------------------- Captured stdout setup -------------------------------------------------------------------------- 
setup_method:  每个用例开始前执行
-------------------------------------------------------------------------- Captured stdout call -------------------------------------------------------------------------- 
正在执行----test_two
------------------------------------------------------------------------ Captured stdout teardown ------------------------------------------------------------------------ 
teardown_method:  每个用例结束后执行
..\..\..\pythonENV\pythonProject\Lib\site-packages\_pytest\config\__init__.py:1294
  D:\pythonENV\pythonProject\Lib\site-packages\_pytest\config\__init__.py:1294: PytestConfigWarning: Unknown config option: python_function
    self._warn_or_fail_if_strict(f"Unknown config option: {key}\n")
-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
======================================================================== short test summary info ========================================================================= 
FAILED testcases/test_class.py::TestCase::test_two - AssertionError: assert False
================================================================ 1 failed, 2 passed, 2 warnings in 0.31s ================================================================= 
(pythonProject) PS D:\pycharm_worksapce\python_test_framework\pytest>
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# 现在把 pytest.ini中用例修改
python_files = Test_*.py
 1
(pythonProject) PS D:\pycharm_worksapce\python_test_framework\pytest> pytest -v
========================================================================== test session starts ===========================================================================
platform win32 -- Python 3.11.0rc2, pytest-7.2.0, pluggy-1.0.0 -- D:\pythonENV\pythonProject\Scripts\python.exe
cachedir: .pytest_cache
rootdir: D:\pycharm_worksapce\python_test_framework\pytest, configfile: pytest.ini, testpaths: testcases
plugins: anyio-3.6.2, order-1.0.1
collected 0 items                                                                                                                                                         
========================================================================= no tests ran in 0.02s ========================================================================== 
(pythonProject) PS D:\pycharm_worksapce\python_test_framework\pytest> 
 1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11