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


相关推荐

  • Linux下搭建FTP服务器教程

    Linux下搭建FTP服务器教程一、基本安装1.运行以下命令安装vsftpd。yuminstall-yvsftpd2.运行以下命令打开及查看etc/vsftpdcd/etc/vsftpdls说明:/etc/vsftpd/vsftpd.conf是核心配置文件。/etc/vsftpd/ftpusers是黑名单文件,此文件里的用户不允许访问FTP服务器。/etc/vsftpd/user_list 是白名单文件,是…

    2022年7月12日
    18
  • 阿里核心系统团队博客在哪_阿里云是谁创始人

    阿里核心系统团队博客在哪_阿里云是谁创始人http://csrd.aliapp.com/阿里核心系统团队博客基础极致分享Home招聘信息阿里核心系统团队介绍TFS运维平台改造1604天bylinqinginTFSTFS负责运维的同学在工作过程中,积累了各种运维脚本

    2022年8月13日
    2
  • 三星一万多的翻盖手机叫什么_华为nex双屏

    三星一万多的翻盖手机叫什么_华为nex双屏三星用翻盖机怀念过去。哪怕国内市场份额不足1%,三星也要在新品发布会上用“逼格”力压群芳。11月9日,刚在旧金山用折叠手机吸引了不少目光的三星,在无锡和中国联通发布了针对成功商务人士的新机——三星W2019。开场,三星就扔出了钢琴演奏家马克西姆、男高音歌唱家戴玉强两张“格调十足”的王牌。场内“野蜂”与美声齐飞,场外美女与骏马亮相。…

    2022年8月10日
    5
  • pycharm各个版本有什么不同_pycharm更新python版本

    pycharm各个版本有什么不同_pycharm更新python版本pycharm怎么切换不同版本的pyhton打开pycharm,依次点击File-Settings,如图点击Project:PycharmProject-PyhtonInterpreter(这里的文件解释器,因各人的文件名不同而变化,不一定就是图中的文件名),如图点击设置键和弹出的Add,如图选择ExistingEnvironment,在右侧···选择所要配置的python的位置,如图也可以直接在搜索框粘贴所选的python的位置…

    2022年8月29日
    1
  • 电压转电流电路

    电压转电流电路图1 电压转电流原理图   如图 1是输入输出无偏置型电压转电流信号调理的典型电路。其中运放A、电阻R13、三极管Q10构成压控电流源电路;电阻R9、R11、运放B、三极管Q8、Q9构成电流放大电路。   当电压信号加在运放A同向输入时,由运放特性:虚短、虚断可知反向输入端电压跟随同向输入端电压信号,此时在电阻R13支路上产生电流流过三极管Q10,三极管Q10基极受运放A输出端

    2022年6月2日
    38
  • 动态获取地址×××解决方案

    动态获取地址×××解决方案

    2021年8月19日
    55

发表回复

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

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