首页 > 其他分享 >Pytest:Fixture调用

Pytest:Fixture调用

时间:2023-11-30 22:11:05浏览次数:20  
标签:调用 Fixture fixture pytest print Pytest test def

fixture的优势

fixture是在测试函数运行前后,由pytest执行的外壳函数。fixture中的代码可以定制,满足多变的测试需求,包括定义传入测试中的数据集,配置测试前系统的初始状态,为批量测试提供数据源,等等。命名方式灵活,不局限于 setup 和teardown 这几个命名

fixture调用方式

1、使用fixture名字作为参数

import pytest
@pytest.fixture()
def login():
    print("这是一个登录方法")

def test_1(login):
    print("test01需要登录")

if __name__ == '__main__':
    pytest.main()

============================= test session starts =============================
collecting ... collected 1 item

fixture.py::test_1

============================== 1 passed in 0.09s ==============================
这是一个登录方法
PASSED [100%]test01需要登录

2、使用@pytest.mark.usefixtures('fixture') 装饰器

import pytest

@pytest.fixture()
def login():
    print("这是一个登录方法")
@pytest.mark.usefixtures('login') def test_1(): print("test01需要登录") def test_2(): print("test02需要登录")============================= test session starts ============================= collecting ... collected 3 items fixture.py::test_3 fixture.py::test_1 fixture.py::test_2 ============================== 3 passed in 0.09s ============================== PASSED [ 33%]test03不需要登录 这是一个登录方法 PASSED [ 66%]test01需要登录 PASSED [100%]test02需要登录

usefixtures与传fixture区别

如果fixture有返回值,那么usefixture就无法获取到返回值,这个是装饰器usefixture与用例直接传fixture参数的区别。

当fixture需要用到return出来的参数时,只能讲参数名称直接当参数传入,不需要用到return出来的参数时,两种方式都可以

3、单个fixture传递测试数据

import pytest
@pytest.fixture()
def fixturefun():
    return (1,2,3,4)

def test_1(fixturefun):
    assert fixturefun[0] == 1

============================= test session starts =============================
collecting ... collected 1 item

fixture.py::test_1

============================== 1 passed in 0.09s ==============================
PASSED [100%]

4、多个fixture传递测试数据

import pytest
@pytest.fixture()
def fixturefun1():
    return (1,2,3,4)

@pytest.fixture()
def fixturefun2():
    return (1,2,3,4)

def test_1(fixturefun1,fixturefun2):
    assert fixturefun1[0] == fixturefun2[0]

============================= test session starts =============================
collecting ... collected 1 item

fixture.py::test_1

============================== 1 passed in 0.09s ==============================
PASSED [100%]
Process finished with exit code 0

 5、Fixture的相互调用

 
import pytest
@pytest.fixture()
def fixturefun():
print("第一层fixture")
a = "zhangsan"
return a

@pytest.fixture()
def login(fixturefun):
print("第二层fixture")

class Test_Class1():
def test_two(self,login):
print("直接使用第二层fixture,返回值为{}".format(login))

def test_three(self,fixturefun):
print("直接使用第一层fixture,返回值为{}".format(fixturefun))

if __name__ == '__main__':
pytest.main()

============================= test session starts =============================
collecting ... collected 2 items

test1.py::Test_Class1::test_two
test1.py::Test_Class1::test_three

============================== 2 passed in 0.09s ==============================
第一层fixture      #fixture互相调用时会先找到所有fixture再一层一层往上找
第二层fixture
PASSED [ 50%]直接使用第二层fixture,返回值为None  #当有多层调用,直接被调用的fixture,不会将上一层的返回值自动回传
第一层fixture
PASSED [100%]直接使用第一层fixture,返回值为zhangsan

注:

  • 即使fixture之间支持相互调用,但普通函数直接使用fixture是不支持的,一定是在测试函数内调用才会逐级调用生效
  • 有多层fixture调用时,最先执行的是最后一层fixture,而不是先执行传入测试函数的fixture
  • 上层fixture的值不会自动return,这里就类似函数相互调用一样的逻辑

标签:调用,Fixture,fixture,pytest,print,Pytest,test,def
From: https://www.cnblogs.com/luoqingqing/p/17868023.html

相关文章

  • SAP PO 接口配置1:连通WebService-通过PO调用第三方接口
    背景说明SAP通过PO中间件进行接口调用,调用外部接口。外部接口可以用任意方式生成,常见的REST类型接口即可,关于如何使用python生成接口,其他章节另述。本教程的前置条件,PO中已配置BusinessSystems,并与SAP环境连通。1.测试接口这里以常见的post接口做示例,如有其他类型接口,需......
  • Python——第四章:函数的递归调用
    递归: 函数自己调用自己递归如果没有任何东西拦截的话.它默认就是一个死循环deffunc()func()func()因此递归调用的时候需要有判断,来退出循环deffunc()ifxxxxx:returnfunc()func()这里就用到了return来充当循环中的break作用。如......
  • 防止接口重复调用方法
    1、使用数据库唯一索引:为需要防重复的字段添加唯一索引,再尝试插入,如果重复会报错。2、使用线程本地变量利用ThreadLocal存储是否调用过的标识变量。privatestaticfinalThreadLocal<Bolean>CALLED=newThreadLocal<>();if(CALLED.get()!=null){//已调用}else......
  • 在web-view加载的本地及远程HTML中调用uni的API及网页和vue页面通讯
    转载于在web-view加载的本地及远程HTML中调用uni的API及网页和vue页面通讯-DCloud问答uni-app的web-view组件,支持加载远程网页,在app环境下,还支持加载本地HTML页面。在web-view加载页面中,会涉及wx、plus、uni等对象的使用。在小程序下使用wx的api,需要引入微信提供的https......
  • 调用BarTender打印标签
    1privateBarTender.ApplicationbtAPP;2privateBarTender.FormatbtFormat;3//初始化对象4btAPP=newBarTender.Application();56try7{8btFormat=btApp.Form......
  • 接口请求重复调用,只保留最后一个请求的返回结果
    在前端开发中,有时候我们需要确保即使发起了多次相同的请求,也只处理最后一次请求的响应。这种需求在搜索输入提示、自动完成或者连续的数据更新操作中比较常见。为了实现这个功能,我们可以使用取消之前请求的策略,或者通过标记的方式来确保只处理最后一次请求的结果。以下是使用Java......
  • 绑定给类的方法,对象来调用;与绑定给对象的方法,类来调用的区别
    绑定给类的方法,类来调用,对象可以调用吗?#首先创建一个类,和绑定给类的方法indexclassMyClass:@classmethoddefindex(cls):print("helloindex")实例化对象:obj=MyClass()使用对象调用绑定给类的方法:obj.index()#返回hello......
  • 秦疆的Java课程笔记:46 方法 方法的定义和调用
    Java方法类似于其他语言的函数,是一段用来完成特定功能的代码片段,一般情况下,定义一个方法包含以下语法:修饰符返回值类型方法名(参数类型参数名){//这一串就是方法头 …… 方法体 …… return返回值;}方法包含一个方法头和方法体。下面是一个方法的所有部分:......
  • 如何用Pytest做性能测试?5个步骤轻松学会!
    Pytest其实也是可以做性能测试或者基准测试的。是非常方便的。可以考虑使用Pytest-benchmark类库进行。安装pytest-benchmark首先,确保已经安装了pytest和pytest-benchmark插件。可以使用以下命令安装插件:pipinstallpytestpytest-benchmark创建被测函数创建被测函数如下......
  • quickjs调用lvgl函数
    实现本次使用quickjs的最主要目的,就是通过程序动态加载js,然后调用lvgl函数库,实现渲染。以达到类似小程序的效果。后续还会实现类似小程序效果,通过quickjs解析xml(html),编译成js然后调用lvgl库,实现界面渲染。通过quickjs会调用c语言提供的底层功能,如wifi、蓝牙、串口uart、iic......