pytest之fixture使用详解

pytest之fixture使用详解简介:fixture区别于unnitest的传统单元测试(setup/teardown)有显著改进:1.有独立的命名,并通过声明它们从测试函数、模块、类或整个项目中的使用来激活。2.按模块化的方

大家好,又见面了,我是你们的朋友全栈君。

简介:

  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

  

调用fixture的三种方法

1.函数或类里面方法直接传fixture的函数参数名称

注释:代码详见上图

2.使用装饰器@pytest.mark.usefixtures()修饰需要运行的用例

# 作者         :admin   
import pytest
@pytest.fixture(scope="class")
def test_01():
    a = 5
    b = 6
    return (a, b)

@pytest.mark.usefixtures("test_01")
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

 

3.叠加usefixtures

如果一个方法或者一个class用例想要同时调用多个fixture,可以使用@pytest.mark.usefixture()进行叠加。注意叠加顺序,先执行的放底层,后执行的放上层。

# 作者         :admin   
import pytest
@pytest.fixture(scope="class")
def test_01():
    a = 5
    b = 6
    return (a, b)

@pytest.fixture(scope="class")
def test_02():
    print("你是第二个执行")


@pytest.mark.usefixtures("test_02")
@pytest.mark.usefixtures("test_01")
class TestNum:
    def test_03(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

  

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/154942.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【Shader】Shader官方示例[通俗易懂]

    官方示例原文地址:https://docs.unity3d.com/Manual/SL-SurfaceShaderExamples.htmlSurfaceShader示例在表面着色器。此页面上的示例显示如何使用内置照明模型。有关如何实现自定义光照模型的示例,请参阅SurfaceShader光照示例。简单着色器例我们将从一个非常简单的Shader开始,并在此基础上进行构建。这是一个将…

    2022年4月15日
    54
  • matlab求解高阶常微分方程_状态依赖时滞微分方程的动力学研究

    matlab求解高阶常微分方程_状态依赖时滞微分方程的动力学研究**前言:**大学期间只学习过《常微分方程》,没想到有些学校竟然还学《时滞微分方程》,于是找到一本由内藤敏机(日本)等著,马万彪等译的《时滞微分方程——泛函数微分方程引论》(有需要的可以私聊,CSDN貌似上传不了书籍,说侵权emmm),看着头秃,不过受到不少启发,尤其是对Logistic方程的改进,真真是长见识了。没找到有人用欧拉法解一阶时滞微分方程的,于是一不做二不休便用MATLAB实现了一下下…

    2022年10月1日
    3
  • Jenkins的三种启动方式「建议收藏」

    Jenkins的三种启动方式「建议收藏」前置条件Java8环境,参考:点击查看。(所有)docker环境,下载(第二种)ApacheTomcat环境,下载(第三种)一、war包启动下载Jenkins的war包打开终端命令行,找到war所在的路径运行java-jarjenkins.war浏览器打开http://localhost:8080,将会看到下图结果二、docker启动打开命令行终端或power…

    2022年5月18日
    543
  • VMware虚拟机三种联网方式(图文详细解说)

    VMware三种网络模式联网首先说一下VMware的几个虚拟设备安装了VMware虚拟机后,会在网络连接对话框中多出两个虚拟网卡,如图:VMnet0:用于虚拟桥接网络下的虚拟交换机VMnet1:用于虚拟Host-Only网络下的虚拟交换机VMnet8:用于虚拟NAT网络下的虚拟交换机VMwareNetworkAdepterVMnet1:Host用于与Host-Onl…

    2022年4月3日
    66
  • webpack react 单独打包 CSS

    webpack react 单独打包 CSS

    2021年9月14日
    123
  • Aggregate聚集的概念

    Aggregate聚集的概念<摘自网络>BW中聚集是指根据InfoCube中几个或者一个维度信息对象创建的小的CUBE,其实是新生成一张事实表,外加一些对应的维度表,可以提供数据的访问效率。Anaggregateisarollupoffactdatawhereatotalvalueissufficientandnodetailedinformationisneede…

    2022年5月20日
    39

发表回复

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

关注全栈程序员社区公众号