pytest的配置文件通常放在测试目录下,名称为pytest.ini,命令运行时会使用该配置文件中的配置
配置文件时以 [pytest] 开头 ,pytest.ini文件格式示例:
[pytest]
addopts = -s
testpaths = ./scripts
python_files = test*.py
python_classes = Test*
python_functions = test_*
[pytest]
# 空格分隔,可添加多个命令行参数 -所有参数均为插件包的参数
addopts = -s --reruns 2 --html=./report.html ...
-s是输出程序运行信息
--rerun 2 : 失败重试2次
--html=./report.ml 在当前目录下生成report.html文件
[pytest]
testpaths = ./scripts # 当前目录下的scrip文件夹 可自定义
[pytest]
python_files = test_*.py
# 当前目录下的scripts文件夹下,以test_开头,以.py结尾的所有文件 -可自定义
[pytest]
python_classes = Test_*
# 当前目录下的scripts文件夹下,以test_开头,以.py结尾的所有文件中,以Test_开头的类
[pytest]
python_functions = test_*
# 当前目录下的scripts文件夹下,以test_开头,以.py结尾的所有文件中,以Test_开头的类内,以test_开头的⽅法 -可自定
可以使用标记应用元数据来测试函数(但不是Fixture方法),然后可以通过Fixture方法或插件访问
Pytest.mark.xfail() | 将测试函数标记为预期失败。 |
---|---|
pytest.mark.usefixtures() | 使用类,模块或项目中的Fixture方法。 |
pytest.mark.skip() | 无条件地跳过测试函数 |
pytest.mark.skipif() | 满足条件,跳过测试函数 |
pytest.mark.parametrize() | 参数化Fixture方法和测试函数。 |
使用场景: 标记某测试函数会失败
方法:
xfail(condition=None, reason=None, raises=None, run=True, strict=False)
常用参数:
condition:预期失败的条件,若是不传,使用默认值或者condition条件为真,则会预期失败。若是条件为假则不会进行预期失败,而是正常执行测试函数
reason:失败的原因
使用方法:
@pytest.mark.xfail(condition, reason="xxx")
注意:
import pytest
def test_1():
print('未使用xfail')
@pytest.mark.xfail()
def test_one():
print('one----')
@pytest.mark.xfail(condition=1,reason='')
class Test1():
def test_2(self):
print('two----')
assert 0
@pytest.mark.xfail(condition = 1>2,reason='1不大于2')
def test_3():
print('three----')
运行结果
collected 4 items
test_mark_xfail.py 未使用xfail
.one----
Xtwo----
xthree----
.
================================================================================ 2 passed, 1 xfailed, 1 xpassed in 0.10s =================================================================================
运行结果是:test_3,test_1 没有进行预期失败,执行通过。test_2预期失败,实际也失败。 test_one预期失败,实际运行没有失败
x表示XFAIL,预期失败,实际也失败
X表示XPASS,预期失败,实际运行没有失败
方法:
skip(reason=None)
参数解释:
使用方法:
@pytest.mark.skip([reason='xxx'])
示例
import pytest
def test_1():
print('>>>1')
@pytest.mark.skip()
def test_2():
print('>>>2')
@pytest.mark.skip(reason='tiguo')
def test_3():
print('>>>3')
assert 0
运行结果
test_skip.py >>>1
.ss
=========================== 1 passed, 2 skipped in 0.05s =============================
使用场景: 根据特定条件、不执行标识的测试函数
方法:
skipif(condition, reason=None)
参数解释:
使用方法:
@pytest.mark.skipif(condition, reason='xxx')
注意:用法和xfail类似。
示例
import pytest
def test_1():
print('>>>1')
@pytest.mark.skipif()
def test_4():
print('>>>>456')
@pytest.mark.skipif(condition=0,reason='fdsf')
def test_5():
print('>>>>18')
运行结果为
pytest_day2\scripts\test_skip.py >>>1
. s
Skipped: <Skipped instance>
>>>>18
.
======================== 2 passed, 1 skipped in 0.04s =========================
作用: 参数化fixture方法和测试函数, 方便测试函数对测试属性的获取
方法:
parametrize(argnames, argvalues, indirect=False, ids=None, scope=None)
示例
import pytest
# 使用时,函数中传递的参数要和parametrize中定义的参数一样
@pytest.mark.parametrize("a", [3,6])
def test_4(a):
print('data>',a)
user = ['admin1','admin2']
pwd = ['123','456']
# 要是有多个参数的话,可以使用字符串,每个参数用逗号隔开,或者使用字符串列表['user','pwd']
@pytest.mark.parametrize('user,pwd', [(user,pwd),(1,2)])
def test_5(pwd,user):
print('data>',user,pwd)
#若要获得多个参数化参数的所有组合,可以堆叠参数化装饰器
@pytest.mark.parametrize('user', user)
@pytest.mark.parametrize('pwd', pwd)
def test_6(pwd,user):
print('user%s--pwd%s>'%(user,pwd))
运行结果为
pytest_day2\scripts\test_parametrize.py data> 3
. data> 6
. data> ['admin1', 'admin2'] ['123', '456']
. data> 1 2
. useradmin1--pwd123>
. useradmin2--pwd123>
. useradmin1--pwd456>
. useradmin2--pwd456>
.
============================== 8 passed in 0.05s ==============================