Python Pytest自动化测试框架 fixtures

本文详细介绍了Pytest中的Fixture功能,包括Fixture的定义、基础实例、调用方式、作用域以及参数化。通过示例代码展示了Fixture如何在测试用例中作为资源管理器,提供可靠和可重复的测试环境。同时,探讨了Fixture在conftest.py文件中的应用,用于管理跨文件的预置操作场景,帮助读者更好地理解和运用Pytest进行自动化测试。
摘要由CSDN通过智能技术生成

Time will tell.

一、Fixture介绍

fixture是 Pytest 特有的功能,它用pytest.fixture标识,定义在函数前面。在编写测试函数的时候,可以将此函数名称做为传入参数, Pytest 将会以依赖注入方式,将该函数的返回值作为测试函数的传入参数。

fixture有明确的名字,在其他函数,模块,类或整个工程调用它时会被激活。

fixture是基于模块来执行的,每个 fixture 的名字就可以触发一个fixture的函数,它自身也可以调用其他的fixture

我们可以把fixture看做是资源,在你的测试用例执行之前需要去配置这些资源,执行完后需要去释放资源。比如 module类型的fixture,适合于那些许多测试用例都只需要执行一次的操作。

fixture还提供了参数化功能,根据配置和不同组件来选择不同的参数。

fixture主要的目的是为了提供一种可靠和可重复性的手段去运行那些最基本的测试内容。比如在测试网站的功能时,每个测试用例都要登录和退出,利用fixture就可以只做一次,否则每个测试用例都要做这两步也是冗余。

二、Fixture基础实例

把一个函数定义为 Fixture 很简单,只要在函数声明之前加上@pytest.fixture。其他函数要来调用这个Fixture,只用把它当做一个输入的参数即可。

代码:

import pytest

@pytest.fixture()
def before():
    print '\nBefore each test'

def test_1(before):
    print 'test_1()'

def test_2(before):
    print 'test_2()'
    assert 0    # For test purpose

结果:

(wda_python) bash-3.2$ pytest -q test_smtpsimple.py 
.F                                                                                                                                 [100%]
================================================================ FAILURES ================================================================
_________________________________________________________________ test_2 _________________________________________________________________

before = None

    def test_2(before):
        print 'test_2()'
>       assert 0    # For test purpose
E       assert 0

test_smtpsimple.py:12: AssertionError
--------------------------------------------------------- Captured stdout setup ----------------------------------------------------------

Before each test
---------------------------------------------------------- Captured stdout call ----------------------------------------------------------
test_2()
1 failed, 1 passed in 0.09 seconds
(wda_python) bash-3.2$ 

三、调用fixture

  1. 在测试用例中直接调用它,例如上面的基础实例。

  2. fixture decorator调用fixture

可以用以下3种不同的方式来写,我只变化了函数名字和类名字,内容没有变。

第一种是每个函数前声明,第二种是封装在类里,类里的每个成员函数声明,第三种是封装在类里在前声明。在可以看到3种不同方式的运行结果都是一样。

import pytest

@pytest.fixture()
def before():
    print '\nBefore each test'

@pytest.mark.usefixtures("before")
def test_1():
    print 'test_1()'

@pytest.mark.usefixtures("before")
def test_2():
    print 'test_2()'

class Test1:
    @pytest.mark.usefixtures("before")
    def test_3(self):
        print 'test_3()'

    @pytest.mark.usefixtures("before")
    def test_4(self):
       
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值