需求

例一

admin@pc-1:~$ cat my_test.py 
import pytest

class TestWebLogin:
    @pytest.fixture(scope='function', autouse=True)
    def setup_teardown(self):
        # setup
        print('@@@@@@@@@@@@@@@@@@@@@get token')
        #toke = login_web()
        self.token = 'abc'

        yield  # 运行测试用例

        # teardown

    def test_case1(self):
        # 使用 self.app 进行测试
        assert self.token is not None
        # 其他测试逻辑

    def test_case2(self):
        # 使用 self.app 进行测试
        assert self.token is not None
        # 其他测试逻辑
admin@pc-1:~$ 
admin@pc-1:~$ 
admin@pc-1:~$ pytest -sv  my_test.py 
================================================================= test session starts ==================================================================
platform linux -- Python 3.8.10, pytest-7.4.0, pluggy-1.2.0 -- /usr/bin/python3
cachedir: .pytest_cache
rootdir: /home/centec
plugins: dash-2.14.1, solara-1.21.0, anyio-4.0.0
collected 2 items                                                                                                                                      

my_test.py::TestWebLogin::test_case1 @@@@@@@@@@@@@@@@@@@@@get token
PASSED
my_test.py::TestWebLogin::test_case2 @@@@@@@@@@@@@@@@@@@@@get token
PASSED

================================================================== 2 passed in 0.01s ===================================================================
admin@pc-1:~$ 

例二

admin@pc-1:~$ cat my_test.py 
import pytest

class TestWebLogin:
    @pytest.fixture(scope='class', autouse=True)
    def setup_teardown(self):
        # setup
        print('@@@@@@@@@@@@@@@@@@@@@get token')
        #toke = login_web()
        self.token = 'abc'

        yield  # 运行测试用例

        # teardown

    def test_case1(self):
        # 使用 self.app 进行测试
        assert self.token is not None
        # 其他测试逻辑

    def test_case2(self):
        # 使用 self.app 进行测试
        assert self.token is not None
        # 其他测试逻辑
admin@pc-1:~$ 
admin@pc-1:~$ pytest -sv  my_test.py 
================================================================= test session starts ==================================================================
platform linux -- Python 3.8.10, pytest-7.4.0, pluggy-1.2.0 -- /usr/bin/python3
cachedir: .pytest_cache
rootdir: /home/centec
plugins: dash-2.14.1, solara-1.21.0, anyio-4.0.0
collected 2 items                                                                                                                                      

my_test.py::TestWebLogin::test_case1 @@@@@@@@@@@@@@@@@@@@@get token
FAILED
my_test.py::TestWebLogin::test_case2 FAILED

======================================================================= FAILURES =======================================================================
_______________________________________________________________ TestWebLogin.test_case1 ________________________________________________________________

self = <my_test.TestWebLogin object at 0x7f909a307cd0>

    def test_case1(self):
        # 使用 self.app 进行测试
>       assert self.token is not None
E       AttributeError: 'TestWebLogin' object has no attribute 'token'

my_test.py:17: AttributeError
_______________________________________________________________ TestWebLogin.test_case2 ________________________________________________________________

self = <my_test.TestWebLogin object at 0x7f909a307610>

    def test_case2(self):
        # 使用 self.app 进行测试
>       assert self.token is not None
E       AttributeError: 'TestWebLogin' object has no attribute 'token'

my_test.py:22: AttributeError
=============================================================== short test summary info ================================================================
FAILED my_test.py::TestWebLogin::test_case1 - AttributeError: 'TestWebLogin' object has no attribute 'token'
FAILED my_test.py::TestWebLogin::test_case2 - AttributeError: 'TestWebLogin' object has no attribute 'token'
================================================================== 2 failed in 0.14s ===================================================================
admin@pc-1:~$ 
  • 意料之外的是,在setup_teardown中明明已经给self.token赋值了,但是同在一个class下,其它的测试用例却看不到self.token!!!
  • pytest的test class比较特殊的,不能通过self.xxx来传递值,只能通过fixture
  • 于是有了下面的改进

例三

admin@pc-1:~$ cat my_test.py 
import pytest

class TestWebLogin:
    @pytest.fixture(scope='class', autouse=False)
    def setup_teardown(self):
        # setup
        print('@@@@@@@@@@@@@@@@@@@@@get token')
        #toke = login_web()
        token = 'abc'

        yield token # 运行测试用例

        # teardown

    def test_case1(self, setup_teardown):
        token = setup_teardown
        assert token is not None
        print(f'toke={token}')
        # 其他测试逻辑

    def test_case2(self, setup_teardown):
        token = setup_teardown
        assert token is not None
        print(f'token={token}')
        # 其他测试逻辑
admin@pc-1:~$ 
admin@pc-1:~$ 
admin@pc-1:~$ 
admin@pc-1:~$ pytest -sv  my_test.py 
================================================================= test session starts ==================================================================
platform linux -- Python 3.8.10, pytest-7.4.0, pluggy-1.2.0 -- /usr/bin/python3
cachedir: .pytest_cache
rootdir: /home/centec
plugins: dash-2.14.1, solara-1.21.0, anyio-4.0.0
collected 2 items                                                                                                                                      

my_test.py::TestWebLogin::test_case1 @@@@@@@@@@@@@@@@@@@@@get token
toke=abc
PASSED
my_test.py::TestWebLogin::test_case2 token=abc
PASSED

================================================================== 2 passed in 0.01s ===================================================================
admin@pc-1:~$ 

原文地址:https://blog.csdn.net/ljyfree/article/details/134569239

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_3297.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注