首页 > 其他分享 >pytest--前置后置执行

pytest--前置后置执行

时间:2023-01-09 14:15:05浏览次数:50  
标签:__ 后置 -- setup teardown pytest print 执行 def

前言

在unittest中就有前置setup和后置teardown来处理测试用例执行前的准备工作(浏览器驱动实例化,数据库连接等)以及执行后的处理工作(清理数据,关闭浏览器驱动,关闭数据库连接等),那么pytest同样也提供了前置后置的方法来满足这个需求

pytest前置后置方法

pytest提供了以下5个前置后置方法:

  • setup、teardown:每条用例都会执行,既可以在类中使用,也可以在类外使用
  • setup_class、teardown_class:类中的测试用例执行前后只执行一次
  • setup_method、teardown_method:类中的每条测试用例执行前后都执行一次
  • setup_function、teardown_function:类外的每条测试用例执行前后都执行一次
  • setup_module、teardown_module:类外的测试用例执行前后只执行一次

以下来具体写代码来看执行结果情况:

1、setup、teardown:每条用例都会执行,既可以在类中使用,也可以在类外使用

import pytest

class Test_04: def setup(self): print('setup前置执行') def teardown(self): print('teardown后置执行') def test_01(self): print('用例01执行') def test_02(self): print('用例02执行') if __name__ == '__main__': pytest.main()

 执行结果如下:

 

可以看到Test_04测试类中的test_01和test_02两个测试用例执行前后,都有setup和teardown执行的打印

 

2、setup_class、teardown_class:类中的测试用例执行前后只执行一次

import pytest

class Test_04:

    def setup_class(self):
        print('setup_class前置执行')
    def teardown_class(self):
        print('teardown_class后置执行')

    def test_01(self):
        print('用例01执行')
    def test_02(self):
        print('用例02执行')


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

 

 输出结果:

 

 可以看到Test_04测试类中test_01用例执行前执行了一次前置setup_class,test_02用例执行完成后执行了一次后置teardown_class

 

 3、setup_method、teardown_method:类中的每条测试用例执行前后都执行一次

import pytest

class Test_04:
    def setup_method(self):
        print('setup_method前置执行')
    def teardown_method(self):
        print('teardown_method后置执行')

    def test_01(self):
        print('用例01执行')
    def test_02(self):
        print('用例02执行')

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

 输出结果:

 

 类中的每条测试用例前后都执行了前置、后置对应的打印

 

4、setup_function、teardown_function:类外的每条测试用例执行前后都执行一次

import pytest

class Test_04:
    def test_01(self):
        print('用例01执行')
    def test_02(self):
        print('用例02执行')

def setup_function():
    print('setup_function前置执行')
def teardown_function():
    print('teardown_function后置执行')

def test_03():
    print('类外用例03执行')
def test_04():
    print('类外用例04执行')

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

 

执行结果:

 

 

 可以看到测试类外的tes03、test04都执行了前后置的打印,测试类中的test_01、test_02都没有前后置打印

 

5、setup_module、teardown_module:类外的测试用例执行前后只执行一次

import pytest

class Test_04:
    def test_01(self):
        print('用例01执行')
    def test_02(self):
        print('用例02执行')


def test_03():
    print('类外用例03执行')
def test_04():
    print('类外用例04执行')

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

 

输出结果:

 可以看到测试类外的测试用例test_03、test_04执行前后,前后置打印都已执行

 

前、后置执行顺序

测试类中前、后置执行顺序:

import pytest

class Test_04:
    def setup(self):
        print('setup前置执行')
    def teardown(self):
        print('teardown后置执行')
    def setup_class(self):
        print('setup_class前置执行')
    def teardown_class(self):
        print('teardown_class后置执行')
    def setup_method(self):
        print('setup_method前置执行')
    def teardown_method(self):
        print('teardown_method后置执行')

    def test_01(self):
        print('用例01执行')
    def test_02(self):
        print('用例02执行')


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

 输出结果:

 

 从打印顺序可以看到,前置执行顺序:setup_class > setup_method > setup (后置执行顺序则相反)

 

测试类外前、后置执行顺序:

import pytest

def setup():
    print('类外setup前置执行')
def teardown():
    print('类外teardown后置执行')
def setup_function():
    print('setup_function前置执行')
def teardown_function():
    print('teardown_function后置执行')
def setup_module():
    print('setup_module前置执行')
def teardown_module():
    print('teardown_module后置执行')

def test_03():
    print('类外用例03执行')
def test_04():
    print('类外用例04执行')

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

输出结果:

 

  从打印顺序可以看到,前置执行顺序:setup_module > setup_function > setup (后置执行顺序则相反)

 

总结:

1、测试类中:setup_class、teardown_class

                        setup_method、teardown_method

      测试类外:setup_function、teardown_function

                        setup_module、teardown_module

      测试类中、类外均可:setup、teardown

2、执行顺序:

      类中前置执行顺序:setup_class > setup_method > setup (后置执行顺序则相反)

      类外前置执行顺序:setup_module > setup_function > setup (后置执行顺序则相反)

标签:__,后置,--,setup,teardown,pytest,print,执行,def
From: https://www.cnblogs.com/trystudy/p/17025701.html

相关文章

  • prometheus告警发送失败
    prometheus有告警产生,但是发送邮件失败:dockerlogs-falertmanager--tail100问题1:level=warnts=2023-01-01T15:34:53.207Zcaller=notify.go:724component=dispatc......
  • postman.多环境配置及应用
    在使用postman时,同一个API接口,往往会涉及到至少二个不同的应用服务地址,如:本机开发环境,客户服务环境>> 为简化 不同环境的切换,在postman中提供了环境配置功能>> 环境配......
  • HP Unix 挂载 ISO 文件的两种方法:
    有两种方法: 1、如果iso文件小于2GB,可以用如下方式: #/usr/sbin/pfs_mountd&#/usr/sbin/pfsd&#pfs_mount-tiso9660/data/hpux_v11.11.iso/mnt/temp#cd/mnt/t......
  • P3426 [POI2005]SZA-Template 解题报告
    一道思维难度较高的KMP题目,对border性质要求较高。Description给定一个字符串$s$,求长度最小的前缀$t$满足"匹配"完$s$,这里的"匹配"可以看原题目,不太好描述,建议......
  • calico 概述
    Kubernetes网络插件详解-Calico篇-概述作者:巨子嘉2022-07-2716:23:36云计算云原生Kubernetes容器网络比较复杂,需要与底层基础设施及上层业务来确定容器网络方案,......
  • Egon推荐零基础转行IT全套精品课程
    1、python全栈高级项目开发精品课程如下,适用于零基础小白自学入行python开发、在职工程师高级提升,详情请咨询唯一指定微信tutu191920102、linux高级云算计课程(80%都是Ego......
  • hello_springboot_IDEA创建
    步骤我的jdk版本是1.8总之是因为创建第一个springboot程序报了很多次错,就比如无效的目标发行版:17和java:无法访问org.springframework.web.bind.annotation.Ge......
  • 让开源和标准成为云原生的确定性力量
    图片来源:预见2023·吴晓波年终秀纵观过去几年云原生技术的发展历程,开放、标准的开源生态对云原生技术持续演进起到极大推动作用。开源生态带来了众多云原生领域技术创......
  • 树上路径问题
    P5588 小猪佩奇爬树:P5588小猪佩奇爬树-洛谷|计算机科学教育新生态(luogu.com.cn)v用来存储各个颜色的节点一.v[i].size()=0时,不再赘述二.v[i].size()=1时,此......
  • 2220. 转换数字的最少位翻转次数
    一次位翻转定义为将数字x二进制中的一个位进行翻转操作,即将0变成1,或者将1变成0。比方说,x=7,二进制表示为111,我们可以选择任意一个位(包含没有显示的前......