pytest——fixture中各自参数的使用

@pytest.fixture(scope=“function”, ids=None, name=None, params=None, autouse=False)

  1. scope:“function”(default),“class”, “module”, “package” or “session” 这个不作细述“请点击这里查看
  2. ids:字符串id的列表,每个id对应于参数,是测试id的一部分,如果没有提供id,它们将从参数自动生成标识。
  3. params:一个可选的参数列表,它将导致对fixture函数和使用它的所有测试的多次调用。当前参数在"request.param"中可用。
  4. name:可以理解成为这前置函数取个别名。
  5. autouse:为True的话就是开启,开启后范围的方法都会自动去执行

 

1、ids参数

1 # conftest.py
2 
3 import pytest
4 
5 
6 @pytest.fixture(ids=['look', 'see', 'watch'], params=[1, 2, 3])
7 def common_login(request):
8     yield request.param

用例调用:

# test_account_login.py

import pytest


@pytest.mark.usefixtures('common_login')
class TestUserLogin:

    def test_01_user_login(self):
        assert 1 == 1


if __name__ == '__main__':
    pytest.main(['-v', '-s', 'test_account_login.py'])

运行结果:

D:\python_env\Scripts\python.exe F:/TESTING/exercise/test_package/test_account_login.py
============================= test session starts =============================
collecting ... collected 3 items

test_account_login.py::TestUserLogin::test_01_user_login[look] PASSED
test_account_login.py::TestUserLogin::test_01_user_login[see] PASSED
test_account_login.py::TestUserLogin::test_01_user_login[watch] PASSED

============================== 3 passed in 0.04s ==============================

 

总结:ids参数的使用,得要和params参数一起才能发挥效果。生成一个标识


 

 

2、params参数

1 # conftest.py
2 
3 import pytest
4 
5 
6 @pytest.fixture(params=[1, 2, 3])
7 def common_login(request):
8     yield request.param

用例调用:

# test_account_login.py

import pytest


@pytest.mark.usefixtures('common_login')
class TestUserLogin:

    def test_01_user_login(self):
        assert 1 == 1


if __name__ == '__main__':
    pytest.main(['-v', '-s', 'test_account_login.py'])

运行结果:

============================= test session starts =============================
collecting ... collected 3 items

test_account_login.py::TestUserLogin::test_01_user_login[1] PASSED
test_account_login.py::TestUserLogin::test_01_user_login[2] PASSED
test_account_login.py::TestUserLogin::test_01_user_login[3] PASSED

============================== 3 passed in 0.02s ==============================

总结:params即可以给fixture作参数化操作,也可以作标识使用


 

3、name参数

1 # conftest.py
2 
3 import pytest
4 
5 
6 @pytest.fixture(name='login', params=[1, 2, 3])
7 def common_login(request):
8     yield request.param

用例调用:

# test_account_login.py

import pytest


@pytest.mark.usefixtures('login')
class TestUserLogin:

    def test_01_user_login(self):
        assert 1 == 1


if __name__ == '__main__':
    pytest.main(['-v', '-s', 'test_account_login.py'])

运行结果:

============================= test session starts =============================
collecting ... collected 3 items

test_account_login.py::TestUserLogin::test_01_user_login[A] PASSED
test_account_login.py::TestUserLogin::test_01_user_login[B] PASSED
test_account_login.py::TestUserLogin::test_01_user_login[C] PASSED

============================== 3 passed in 0.02s ==============================

总结:更换别名(为fixture重命名),可以更容易记清楚,不会记混,再也不用担心名字太长记不住了。


 

 

4、autouse参数

1 # test_package/conftest.py
2 
3 
4 import pytest
5 
6 
7 @pytest.fixture(name='login', params=['A', 'B', 'C'], autouse=True)
8 def common_login(request):
9     yield request.param

用例调用:

# test_package/test_account_login.py

import pytest



class TestUserLogin:

    def test_01_user_login(self, login):
        print(login)
        assert 1 == 1


if __name__ == '__main__':
    pytest.main(['-v', '-s', 'test_account_login.py'])

运行结果:

============================= test session starts =============================
collecting ... collected 3 items

test_account_login.py::TestUserLogin::test_01_user_login[A] A  PASSED
test_account_login.py::TestUserLogin::test_01_user_login[B] B  PASSED
test_account_login.py::TestUserLogin::test_01_user_login[C] C  PASSED

============================== 3 passed in 0.02s ==============================

总结:在当前作用域内的测试函数都运行该fixture。

 

该图中的红色部分就是当前作用域内,绿色部分就用不了

 

 

小小总结可能会解决你的问题,也可能解决不了你的问题,但还是希望对您有所帮助,感谢阅读,如有疑义,欢迎来扰!未完待续…

一直都在努力变好中,希望您也是,加油!

posted @ 2020-09-18 21:32  一名小测试  阅读(159)  评论(0编辑  收藏  举报