码迷,mamicode.com
首页 > 其他好文 > 详细

pytest之fixture:如何对测试类使用fixture

时间:2021-03-18 14:14:11      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:sel   rgb   obj   test   完全   rgba   作用   思考   16px   

前言:

前面我们所举的示例都是将前置操作函数名直接传入测试函数和测试方法。
那如果我们想对整个测试类使用前置操作怎么办呢?这时候我们可以使用@pytest.mark.usefixtures()

一、对整个类使用@pytest.mark.usefixtures
@pytest.mark.usefixtures()接受一个参数,那就是前置函数的方法名,以字符串的形式传入。
见示例:

文件:test_a.py

import
pytest def test_1(login): assert 3 == 3 print("this is test_1") def test_2(): assert 4 == 4 print("this is test_2") @pytest.mark.usefixtures("login") class TestA(object): def test_a(self): assert 1 == 1 print("this is test_a") def test_a_1(self): assert 2 == 2 print("this is test_a_1")
文件:conftest.py

import
pytest @pytest.fixture() def login(): print("this is login ")

示例中:TestA类被@pytest.mark.usefixtures("login"),且传入了前置函数名login(字符串形式传入)
执行结果:

test_a.py::test_1 this is login 
PASSED                                                 [ 25%]this is test_1

test_a.py::test_2 PASSED                                                 [ 50%]this is test_2

test_a.py::TestA::test_a this is login 
PASSED                                          [ 75%]this is test_a

test_a.py::TestA::test_a_1 this is login 
PASSED                                        [100%]this is test_a_1

从执行结果中我们可以看出,TestA类中的所有测试方法执行前都执行了前置函数login。
结论:对测试类使用装饰器@pytest.mark.usefixtures()时,将作用于测试类中的每一个测试方法。
思考:可以对测试函数和测试方法使用吗?

二、对测试方法或测试函数使用@pytest.mark.usefixtures:
直接看示例:

@pytest.mark.usefixtures("login")
def test_1():
    assert 3 == 3
    print("this is test_1")


def test_2():
    assert 4 == 4
    print("this is test_2")


class TestA(object):
    @pytest.mark.usefixtures("login")
    def test_a(self):
        assert 1 == 1
        print("this is test_a")

    def test_a_1(self):
        assert 2 == 2
        print("this is test_a_1")

示例中,我们可以看到,测试函数test_1和测试方法test_a被@pytest.mark.usefixtures("login”)装饰了。
执行结果:

test_a.py::test_1 this is login 
PASSED                                                 [ 25%]this is test_1

test_a.py::test_2 PASSED                                                 [ 50%]this is test_2

test_a.py::TestA::test_a this is login 
PASSED                                          [ 75%]this is test_a

test_a.py::TestA::test_a_1 PASSED                                        [100%]this is test_a_1

我们可以看到测试函数test_1和测试方法test_a执行了前置函数login(),而其他的未执行。
结论:@pytest.mark.usefixtures()同样可以应用于测试函数和测试方法。

思考:既然@pytest.mark.usefixutres()和传入前置操作函数名是完全一样吗?
答案:当然不是,我们现在举得例子,对于前置操作都没有返回值,当有返回值时二者有着很大得区别。

pytest之fixture:如何对测试类使用fixture

标签:sel   rgb   obj   test   完全   rgba   作用   思考   16px   

原文地址:https://www.cnblogs.com/ctltest/p/14550645.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!