首页 > 其他分享 >pytest--fixture使用

pytest--fixture使用

时间:2023-02-10 14:14:34浏览次数:31  
标签:__ -- fixture yield pytest print def

1、pytest的fixture介绍

假设有一个场景,有些用例需要登陆方法,另一些则不需要用到登陆方法,那么setup和teardown就没法满足此需求,所以pytest提供了fixture来补充这方面的需求,可以让指定的测试用例执行前后置操作。fixture是在测试用例运行前后执行的,对命名规范没有特别要求。fixture中的代码以yield为分割,测试用例执行前会先执行fixture中yield前面的代码(setup),测试用例执行后再执行fixture中yield后的代码(teardown)

注:fixture的yield不是必须有的,只有前置代码,没有yield(没有后置代码),那测试用例执行完成后就结束了。没有前置代码,开头yield(只有后置代码),无论测试过程中发送什么错误,yield后续的代码都会被执行

 

2、fixture的使用

2.1、fixture的简单例子

import pytest

#添加fixture修饰器 @pytest.fixture() def add(): print('---测试执行---') yield print('---测试结束---') class Test_add():
#传参为测试用例添加fixture def test_01(self, add): print('用例一') def test_02(self): print('用例二') if __name__ == '__main__': #命令行参数--setup-show可以来查看详细的fixture信息 pytest.main()

 

输出结果:

 

 从上面的打印可以看到,只有test_01测试用例执行了前后置的打印,符合我们只在test_01传参设置了fixture(add)的情况

 

2.2、同一个测试用例也可以设置多个fixture,执行顺序:前置部分,先传入的参数先执行,后传入的参数后执行,后置部分则相反

import pytest

@pytest.fixture()
def add():
    print('---测试执行---')
    yield
    print('---测试结束---')

@pytest.fixture()
def log():
    print('开始记录log')
    yield
    print('记录log结束')

class Test_add():
    def test_01(self,add,log):
        print('用例一')
    def test_02(self):
        print('用例二')
    def test_03(self,log,add):
        print('用例三')

if __name__ == '__main__':
    #命令行参数--setup-show可以来查看详细的fixture信息
    pytest.main()

 

输出结果:

 

 

2.3、fixture执行过程中,无论遇到什么异常,都会继续执行yield后的后置代码部分(teardown)

import pytest

@pytest.fixture()
def add():
    print('---测试执行---')
    yield
    print('---测试结束---')

class Test_add():
    #fixture执行过程中,无论遇到什么异常,都会继续执行yield后的后置代码部分(teardown)
    def test_error(self,add):
        print('错误用例')
        assert 1 == 2
        print('测试用例结束')

if __name__ == '__main__':
    #命令行参数--setup-show可以来查看详细的fixture信息
    pytest.main()

 

输出结果:

 

 可以看到test_error测试用例中出现错误,后置teardown的打印仍旧执行,且同时将测试用例中错误原因和行数也打印出来

 

2.4、当一个fixture调用函数名称因为命名习惯,重复比较多的时候,可以使用name参数进行别名来区分,传参时候将自己所定义的name参数传入即可调用对应的fixture

代码如下:

import pytest
#当一个fixture调用函数名称因为命名习惯,重复比较多的时候,可以使用name参数进行别名来区分
@pytest.fixture(name='p1')
def login():
    print('请输入账号密码')
    yield
    print('登陆成功')

def test_01(login):
    print('test_01执行')

 

 输出结果:

 

 注意:定义name别名后,再使用fixture函数名进行传参的话,会提示找不到对应的fixture

 

标签:__,--,fixture,yield,pytest,print,def
From: https://www.cnblogs.com/trystudy/p/17104302.html

相关文章

  • Consul+Ocelot+Polly在.NetCore中使用(.NET5)-Ocelot+Polly缓存、限流、熔断、降级
    Consul+Ocelot+Polly在.NetCore中使用(.NET5)-Ocelot+Polly缓存、限流、熔断、降级Consul+Ocelot+Polly在.NetCore中使用(.NET5)-网关Ocelot+Consul微服务网关Ocelot加入......
  • react18 startTransition过度任务 性能优化
     官方:React.startTransition 不提供 isPending 的标志。要跟踪过渡的待定状态,请参阅 React.useTransition。由于React.startTransition 不支持跟踪pending状态,则......
  • 【转】分布式架构概述及设计
     转,原文: https://blog.csdn.net/l6108003/article/details/94835586----------------------------------------引言随着越来越多的人参与到互联网的浪潮来,曾经的单体......
  • maven -nexus 导入已有的maven仓
    参考:https://www.jianshu.com/p/6971fca953fc ##nexus新建本地仓my_repo##新建一个文件夹myrepo,将本地仓库的包批量放入我们需要的本地库文件夹,注意必须将package层......
  • iframe跳转到嵌入的html锚点
    <iframeid="tempHtml"name="myframe"style="width:100%;height:100%;":src="frameUrl+'#toolbar=0'"frameborder="0"scrolling="auto"></iframe>watch:{ancho......
  • Ansible的部署和命令模板
    一、ansible的概述1、ansible简介Ansible是一款为类Unix系统开发的自由开源的配置和自动化工具。它用Python写成,类似于saltstack和Puppet,但是有一个不同和优点是我们......
  • 直播app开发搭建,vue使用js-file-download完成导出功能
    直播app开发搭建,vue使用js-file-download完成导出功能1.安装js-file-downloadnpminstalljs-file-download​2.引入对应的功能模块importfileDownLoadfrom'js-file......
  • 基于遗传算法的地图四色原理绘图上色的Python代码
      本文介绍利用Python语言,实现基于遗传算法(GA)的地图四色原理着色操作。1任务需求  首先,我们来明确一下本文所需实现的需求。  现有一个由多个小图斑组成的矢量图......
  • linux常见问题排查
    查看用户账号#查看系统所有用户cut--delimiter:--fields1/etc/passwd或者cut-d:-f1/etc/passwd#查看拥有特殊权限的用户awk-F:'$3==0{print$1}'/et......
  • js传递参数获取到的是object或object HTMLFormElement
      这样clearSample获取到的参数是一个object  解决办法    原因:当在字符串中拼接变量时需要\""+变量名+"\" 如果完成引号不转义html就不会识别引号......