Python Pytest自动化测试框架 详解@pytest.fixture()和conftest

本文详细介绍了Python Pytest框架中的fixture功能,包括fixture的基本概念、用途、作为参数的用法、源码解析以及作用范围。fixture是pytest的核心,用于提供测试的固定基线,支持跨文件共享,可以进行初始化设置、测试前置条件、参数化等功能。文章还探讨了fixture的scope参数,包括function、class、module和session四个级别,并分享了如何利用fixture进行更高效和灵活的测试自动化。
摘要由CSDN通过智能技术生成

Time will tell.

一、fixture 简介

fixture是 pytest 的精髓所在,类似 unittest 中setup/teardown这种前后置东西。但比它们要强大、灵活很多,它的优势是可以跨文件共享。

fixture的目的是提供一个固定基线,在该基线上测试可以可靠地和重复地执行。fixture提供了区别于传统单元测试有显著改进:

  1. 有独立的命名,并通过声明它们从测试函数、模块、类或整个项目中的使用来激活。
  2. 按模块化的方式实现,每个fixture都可以互相调用。
  3. fixture的范围从简单的单元扩展到复杂的功能测试,允许根据配置和组件选项对fixture和测试用例进行参数化,或者跨函数 function 、类class、模块 module 或整个测试会话 sessio 范围。

二、用途

1、做测试前后的初始化设置,如测试数据准备,链接数据库,打开浏览器等这些操作都可以使用fixture来实现。

2、测试用例的前置条件可以使用fixture实现。

3、支持经典的xunit fixture,像 unittest 使用的setupteardown

4.、fixture可以实现 unittest 不能实现的功能,比如 unittest 中的测试用例和测试用例之间是无法传递参数和数据的,但是fixture`却可以解决这个问题。

三、fixture 作为参数传入

1、定义fixture跟定义普通函数差不多,唯一区别就是在函数上加个装饰器@pytest.fixture()fixture命名不要用test_开头,跟用例区分开。用例才是test_开头的命名。

2、fixture是可以有返回值的,如果没return默认返回None。用例调用fixture的返回值,直接就是把fixture的函数名称当成变量传入。

3、fixture装饰器里的scope有四个级别的参数:function(默认)、class、module or session 。

4、除scope之外,还有 params、autouse、ids、name 等。

5、fixture可以有返回值,如果没有return,默认会是None;用例调用fixture的返回值,就是直接把fixture的函数名称作为参数传入。

6、fixture可以返回一个元组、列表或字典。

7、test_用例可传单个、多个fixture参数。

8、fixturefixture间可相互调用。

'''
fixture可以返回一个元组、列表或字典 
'''

@pytest.fixture()
def user():
    print("=====打印装饰器函数=====")
    username='wangli'
    psw=123456
    assert username=="wangli"
    assert psw == 123456
    return username,psw
def test_login(user):
    print(user)
    assert user[0]=="wangli"
    assert user[1] == 123456

if __name__=="__main__":
    pytest.main(["-s","test03.py"])


"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/test/test/test03.py
============================= test session starts =============================
platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0
rootdir: C:\Users\wangli\PycharmProjects\test\test
collected 1 item

test03.py =====打印装饰器函数=====
('wangli', 123456)
.

============================== 1 passed in 0.16s ==============================

Process finished with exit code 0
'''
test_用例可传单个、多个fixture参数
'''

@pytest.fixture()
def username():
    print("=====打印username装饰器函数=====")
    username='wangli'
    assert username=="wangli"
    return username
@pytest.fixture()
def psw():
    print("=====打印psw装饰器函数=====")
    psw=123456
    assert psw==123456
    return psw
def test_login(username,psw):
    print(username,psw)
    assert username=="wangli"
    assert psw == 123456

if __name__=="__main__":
    pytest.main(["-s","test03.py"])


"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/test
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值