pytest.ini 创建在项目根目录
pytest默认的测试用例收集规则
- 文件名以 test_*.py 文件和 *_test.py
- 以 test_ 开头的函数
- 以 Test 开头的类,不能包含 init 方法
- 以 test_ 开头的类里面的方法
我们是可以修改或者添加这个用例收集规则的;当然啦,是建议在原有的规则上添加的,如下配置
[pytest]
python_files = test_* *_test test*
python_classes = Test* test*
python_functions = test_* test*
一 标签注册
[pytest]
markers =
smoke:marks tests as smoke.
demo:marks tests asa demo.
备注:冒号之后是描述信息(可写可不写)。
打标记的范围:测试用例、测试类、模块文件
1.方法一
在测试用例/测试类前加上:@pytest.mark.标记名
import pytest
@pytest.mark.smoke
def test_add_01():
b = 1 + 2
assert 3 == b
@pytest.mark.demo
def test_add_02():
b = 1 + 2
assert 0 == b
@pytest.mark.smoke
class TestAdd:
def test_add_03(self):
b = 1 + 2
assert 3 == b
def test_add_04(self):
b = 1 + 1
assert 2 == b
也可以在一个用例上打多个标签,多次使用@pytest.mark.标签名
@pytest.mark.demo
@pytest.mark.smoke
def test_add_02():
b = 1 + 2
assert 0 == b
2.方法二
- 在测试类里面,使用以下声明(测试类下,所有用例都被打上了该标签):
@pytest.mark.demo
def test_add_02():
b = 1 + 2
assert 0 == b
class TestAdd:
pytestmark = pytest.mark.smoke
def test_add_03(self):
b = 1 + 2
print(f'b={b}')
assert 3 == b
def test_add_04(self):
b = 1 + 1
print(f'b={b}')
assert 2 == b
多标签模式:pytestmark = [pytest.mark.标签1, pytest.mark.标签2......]
class TestAdd:
pytestmark = [pytest.mark.smoke, pytest.mark.demo]
def test_add_03(self):
b = 1 + 2
print(f'b={b}')
assert 3 == b
def test_add_04(self):
b = 1 + 1
print(f'b={b}')
assert 2 == b
在模块文件里,同理(py文件下,所有测试函数和测试类里的测试函数,都有该标签):
import pytest
pytestmark = pytest.mark.smoke
pytestmark = [pytest.mark.smoke, pytest.mark.demo] # 多标签模式
三、命令行
根据测试用例/测试类/测试模块,标记了对应的标签后,使用对应的命令行在cmd中或者Pycharm中的Terminal中运行,即可进行用例的筛选,命令行为:
pytest -m 标签名
pytest - m "smoke or demo"
只运行smoke 和 demo标签
跳过用例
@pytest.mark.skip(reason='跳过的原因')
打在测试类或者测试用例上面
- 打在测试类上面,下面的用例都不会执行。
- 打在测试用例上面,这个用例不会执行。
@pytest.mark.skipif("sys.platform=='win32'",reason='第三方不想测')
eval(self,condition) condition是一个eval脱衣可以执行的,如果为True就跳过
condition是一个条件可以是字符串eval脱衣服的表达式,还可以直接是表达式比如:condition = 2>1
pytestmark =pytest,mark.skip()
变量pytestmark这个变量不可更改
- 模块级跳过测试用例
myskip = pytest.mark.skip()
自定义跳过装饰器,使用一个变量接收对象。使用的时候直接@变量 打在被跳过的函数或者类