Day3 - Pytest(三)

装饰器

Mark装饰器

parametrize装饰器(传参数)

pytest中装饰器@pytest.mark.parametrize('参数名',list)可以实现测试用例参数化。

@pytest.mark.parametrize('arg',[1])
#测试函数要将argnames做为形参传入
def test_one_params(arg):
    print("传入的值为:{}".format(arg))
    assert arg == 1
@pytest.mark.parametrize("a,b", [(1, 2), (2, 3), (3, 4)])    
# 参数a,b均被赋予三个值,函数会运行三遍
def test_b(self, a, b):    # 参数必须和parametrize里面的参数一致
    print('\n------------------> test_b has ran, and a = {}, b = {}'.format(a, b))
    #.format(),将{}占位符的位置替换成.format()中的数据
    assert 1
@pytest.mark.parametrize("x", [1, 2])
@pytest.mark.parametrize("y", [3, 4])
def test_d(self, x, y):
    print("\n------------------> test_d has ran, and x={}, y={}".format(x, y))
 #运行4次
order装饰器(决定操作顺序)

1、控制用例执行顺序的方法

2、在需要调整用例执行顺序的函数(或方法)前增加,如@pytest.mark.run(order=x)x表示数字

3、执行顺序,由小到大、由正到负、未标记的在正数后、负数前执行

顺序为:1,2,3,无标记,-3,-2,-1

rerunfailure装饰器

1、失败重跑机制

2、安装pytest-rerunfailure

在设置文件pytest.ini中添加命令

reruns = 重跑次数

addopts= --reruns =10

skip装饰器

1.pytest.skip()函数

用于函数内跳过当前测试用例

2.@pytest.mark.skip()

用于函数外跳过测试用例

3.@pytest.mark.skipif(condition='跳过测试用例的条件',reason='跳过测试用例的原因解释')

Fixure装饰器

除了setup/teardown之外,通过fixture将函数声明为前后置函数,在测试函数中将前后置函数作为入参使用。

# 在函数前面通过fixture装饰器,声明为前后置函数
@pytest.fixture()
def my_fixture():
    print("my_fixture前置")
    yield # yield之后为后置处理
    print("my_fixture后置")

class TestClass:
    def test_case_1(self, my_fixture):
        print("test case 1")
        assert 1 == 1

    def test_case_2(self):
        print("test case 2")
        assert 2 == 2

使用@pytest.fixure装饰的函数,默认是函数的前后置,通过修改scope变量,可声明测试类的前后置。

# 在函数前面通过fixture装饰器,scope='class', 声明为测试类的前后置函数
@pytest.fixture(scope='class')
def my_fixture():
    print("my_fixture前置")
    yield # yield之后为后置处理
    print("my_fixture后置")

# 在测试类中使用my_fixture前后置函数
@pytest.mark.usefixtures('my_fixture')
class TestClass:
    def test_case_1(self):
        print("test case 1")
        assert 1 == 1

    def test_case_2(self):
        print("test case 2")
        assert 2 == 2

fixture装饰器的原型如下:

@pytest.fixure(scope="", params="", autouse="", ids="", name="")

  • scope表示的是被fixture标记的方法的作用域,默认是function,可配置为class, module, package/session
function函数级(默认)每个测试函数执行前后各一次
class类级每个测试类中所有方法执行前后各一次
module模块级每个模块(.py 文件)执行前后各一次
package包级(较少用)每个包(目录)下所有模块执行前后各一次
session会话级整个测试会话(所有用例)执行前后各一次
  • autouse=True, 自动使用,默认为False

  • name:给表示的是被fixture标记的方法取一个别名

  • params:参数化支持(列表[]元组(),字典列表[{},{},{}],字典元组({},{},{}))

# 在函数前面通过fixture装饰器,声明为前后置函数
@pytest.fixture(params=['aa', 'bb'])
def my_fixture(request):
    print(request.param)
    return request.param

@pytest.mark.usefixtures('my_fixture')
class TestClass:
    def test_case_1(self, my_fixture):
        print("test case 1")
        print(my_fixture)
        assert 1 == 1

    def test_case_2(self, my_fixture):
        print("test case 2")
        print(my_fixture)
        assert 2 == 2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值