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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 超火的Vhr(SpringBoot +Vue)实战项目+文档

    超火的Vhr(SpringBoot +Vue)实战项目+文档项目摘要vhr是一个基于SpringBoot+Vue技术栈开发的前后端分离项目,项目使用SpringBoot2.1.8来开发,集成了当前企业级开发中众多的热门技术点,如消息中间件、Redis缓存、SpringBoot+Vue+ElementUI技术栈等等。技术选型核心框架:SpringBoot2.1.8 安全管理:SpringSecurity 持久层框架:MyBatis 缓存:Redis 数据库:MySQL8 消息队列:RabbitMQ 即时通信:WebSocket

    2022年10月28日
  • 文本分类算法比较_文本匹配算法

    文本分类算法比较_文本匹配算法本文对常用文本分类算法进行了比较,第一部分包括Rocchio算法,boosting,bagging,,逻辑回归,朴素贝叶斯分类器,k最近邻和支持向量机。另外还包括决策树、条件随机场、随机森林和深度学习算法。第二部分将文本分类技术与标准进行了比较:体系结构、作者、模型、新颖性、特征提取、细节、语料库、验证措施和每种技术的局限性。每个文本分类技术(系统)都包含一个模型,该模型是分类器算法,还需要一个特征提取技术,即将文本或文档数据集转换为数字数据。还列出了用于评估系统的验证措施。文章目录文本分类算法文本分类

    2022年10月28日
  • angular5面试题_大数据面试题

    angular5面试题_大数据面试题Angular更新还是非常快的,目前(2020)的速度是每年2个主版本。网上也有不少面试题,不过很多都是针对老的版本,尤其是AngularJS的。因为最近在看Angular的面试题,所以特意总结一下。下面内容都是基于Angularv8.0以上的。顺便科普一下,Angular最早期的版本,也叫AnugularJS,使用javascript开发;新的版本,才叫Angular,也称为Angular2,使用typescript开发,Angular和AngularJS是不兼容的(当然也有2个版本的集成方案)。

    2022年10月18日
  • 【iOS7一些总结】9、与列表显示(在):列表显示UITableView

    【iOS7一些总结】9、与列表显示(在):列表显示UITableView

    2022年1月11日
  • http与https的区别与联系_http状态码

    http与https的区别与联系_http状态码HTTP与HTTPS握手的那些事

    2022年10月2日
  • mybatis的两种分页方式:RowBounds和PageHelper「建议收藏」

    mybatis的两种分页方式:RowBounds和PageHelper「建议收藏」原理:拦截器。使用方法:RowBounds:在mapper.java中的方法中传入RowBounds对象。RowBoundsrowBounds=newRowBounds(10,100);//offset起始行//limit是当前页显示多少条数据publicList&lt;ReportDatainfo&gt;findRecords(ReportDatainforeportD…

    2022年9月16日

发表回复

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

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