测试学习总结之---Pytest配置文件和标记

Pytest配置文件

pytest的配置文件通常放在测试目录下,名称为pytest.ini,命令运行时会使用该配置文件中的配置

配置文件时以 [pytest] 开头 ,pytest.ini文件格式示例:

[pytest]

addopts = -s

testpaths = ./scripts
python_files = test*.py
python_classes = Test*
python_functions = test_*
  • 配置pytest命令行运行参数
[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_开头的⽅法 -可自定

标记(marks)

作用

可以使用标记应用元数据来测试函数(但不是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")

注意:

  • 是 参数 condition 不传递值 ,则 参数 reason 可有可无即:
    • @pytest.mark.xfail([ reason=“xxx”])
  • 若是 参数 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 无条件跳过测试函数

方法:

skip(reason=None)

参数解释:

  • 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 满足条件跳过

使用场景: 根据特定条件、不执行标识的测试函数

方法:

skipif(condition, reason=None)

参数解释:

  • condition: 跳过的条件,条件为真,则跳过测试函数,为假,则执行测试函数。若是不传递这个,则也会跳过测试函数
  • reason: 标注原因

使用方法:

@pytest.mark.skipif(condition, reason='xxx')

注意:用法和xfail类似。

  • 是 参数 condition 不传递值 ,则 参数 reason 可有可无即:
    • @pytest.mark.skipif([ reason=“xxx”])
  • 若是 参数 condition 传递值,则参数 reason 必须有
    • @pytest.mark.skipif(condition, reason=“xxx”)

示例

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 ==============================

你可能感兴趣的:(软件测试,单元测试,软件测试,python)