pytest之fixture使用详解

匿名 (未验证) 提交于 2019-12-03 00:03:02

简介:

  fixture区别于unnitest的传统单元测试(setup/teardown)有显著改进:

  1.有独立的命名,并通过声明它们从测试函数、模块、类或整个项目中的使用来激活。

  2.按模块化的方式实现,每个fixture都可以互相调用。

  3.fixture的范围从简单的单元测试到复杂的功能测试,可以对fixture配置参数,或者跨函数function,类class,模块module或整个测试session范围。

 

 fixture可以当做参数传入

定义fixture跟定义普通函数差不多,唯一区别就是在函数上加个装饰器@pytest.fixture(),fixture命名不要以test开头,跟用例区分开。fixture是有返回值得,没有返回值默认为None。用例调用fixture的返回值,直接就是把fixture的函数名称当做变量名称。

# 作者         :admin    import pytest @pytest.fixture() def test_01():     a = 5     return a  def test_02(test_01):     assert test_01 == 5     print("断言成功")    ============================= test session starts ============================= platform win32 -- Python 3.7.2, pytest-4.0.2, py-1.8.0, pluggy-0.12.0 rootdir: E:\daima\Project_test\test_demo, inifile: plugins: allure-adaptor-1.7.10, html-1.22.0, metadata-1.8.0, rerunfailures-7.0 collected 1 item  test_demo_pytest_fixture.py 断言成功 .  ========================== 1 passed in 0.17 seconds ===========================

 

使用多个fixture

如果用例需要用到多个fixture的返回数据,fixture也可以返回一个元祖,list或字典,然后从里面取出对应数据。

# 作者         :admin    import pytest @pytest.fixture() def test_01():     a = 5     b = 6     return (a, b)  def test_02(test_01):     a = test_01[0]     b = test_01[1]     assert a < b     print("断言成功")      Launching py.test with arguments E:/daima/Project_test/test_demo/test_demo_pytest_fixture.py in E:\daima\Project_test\test_demo  ============================= test session starts ============================= platform win32 -- Python 3.7.2, pytest-4.0.2, py-1.8.0, pluggy-0.12.0 rootdir: E:\daima\Project_test\test_demo, inifile: plugins: allure-adaptor-1.7.10, html-1.22.0, metadata-1.8.0, rerunfailures-7.0collected 1 item  test_demo_pytest_fixture.py .断言成功                                             [100%]  ========================== 1 passed in 0.01 seconds =========================== Process finished with exit code 0

  

fixture的作用范围(scope)

ixture里面有个scope参数可以控制fixture的作用范围:session>module>class>function

-function:每一个函数或方法都会调用

-class:每一个类调用一次,一个类中可以有多个方法

-module:每一个.py文件调用一次,该文件内又有多个function和class

-session:是多个文件调用一次,可以跨.py文件调用,每个.py文件就是module

 

代码示例:

# 作者         :admin    import pytest @pytest.fixture(scope="class") def test_01():     a = 5     b = 6     return (a, b)   class TestNum:     def test_02(self,test_01):         a = test_01[0]         b = test_01[1]         assert a < b         print("断言成功")   Launching py.test with arguments E:/daima/Project_test/test_demo/test_demo_pytest_fixture.py in E:\daima\Project_test\test_demo  ============================= test session starts ============================= platform win32 -- Python 3.7.2, pytest-4.0.2, py-1.8.0, pluggy-0.12.0 rootdir: E:\daima\Project_test\test_demo, inifile: plugins: allure-adaptor-1.7.10, html-1.22.0, metadata-1.8.0, rerunfailures-7.0collected 1 item  test_demo_pytest_fixture.py .断言成功                                             [100%]  ========================== 1 passed in 0.02 seconds =========================== Process finished with exit code 0

  

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!