专栏首页橙子探索测试Python Pytest前置setup和后置teardown详解

Python Pytest前置setup和后置teardown详解

pytest用例运行级别: ●模块级(setup_module/teardown_module)开始于模块始末,全局的(类外生效、函数中生效) ●函数级(setup_function/teardown_function)只对函数用例生效(类外有函数时生效) ●类级(setup_class/teardown_class)只在类中前后运行一次(在类中生效,类外不生效) ●方法级(setup_method/teardown_method)开始于方法始末(在类中生效,类外不生效) ●类里面的(setup/teardown)运行在调用方法的前后(类中生效、类外有函数时生效)

函数级:

函数前置setup_function和后置teardown_function,每个用例开始前和结束后各调用一次(函数级、调用多次)

import pytest
def setup_function():
    print("setup_function:每个用例开始前都会执行")
def teardown_function():
    print("teardown_function:每个用例结束后都会执行")
def test_one():
    print("正在执行---test_one")
def test_two():
    print("正在执行---test_two")
def login():
    print("正在执行---test_two")
if __name__ == "__main__":
    pytest.main(["-s","test02.py"])


"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/Test/test02.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 2 items

test02.py setup_function:每个用例开始前都会执行
正在执行---test_one
.teardown_function:每个用例结束后都会执行
setup_function:每个用例开始前都会执行
正在执行---test_two
.teardown_function:每个用例结束后都会执行


============================== 2 passed in 0.14s ==============================

Process finished with exit code 0

模块前置setup_module和后置teardown_module,整个.py模块开始前和结束后各调用一次(模块级,只调用一次)

import pytest
def setup_module():
    print("setup_module:整个.py模块开始执行一次")
def teardown_module():
    print("teardown_module:整个.py模块结束执行一次")
def setup_function():
    print("setup_function:每个用例开始前都会执行")
def teardown_function():
    print("teardown_function:每个用例结束后都会执行")
def test_one():
    print("正在执行---test_one")
def test_two():
    print("正在执行---test_two")
def login_test():
    print("正在执行---test_two")
if __name__ == "__main__":
    pytest.main(["-s","test02.py"])


"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/Test/test02.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 2 items

test02.py setup_module:整个.py模块开始执行一次
setup_function:每个用例开始前都会执行
正在执行---test_one
.teardown_function:每个用例结束后都会执行
setup_function:每个用例开始前都会执行
正在执行---test_two
.teardown_function:每个用例结束后都会执行
teardown_module:整个.py模块结束执行一次


============================== 2 passed in 0.08s ==============================

Process finished with exit code 0

类级:

类前置setup_class和后置teardown_class,所有用例开始前和结束后调用一次(类级别,只调用一次)

方法前置setup_method和后置teardown_method,每个用例开始前和结束后调用一次(方法级,调用多次)

类里面前置setup和后置teardown,每个用例开始前和结束后调用一次(方法里面,运行在调用方法的前后,调用多次)

setup_class:所有用例执行之前(类级)

setup_method:每个用例开始前执行(方法级) setup:每个用例开始前执行(调用方法前) 正在执行---test_one .teardown:每个用例结束后执行(调用方法后) teardown_method:每个用例结束后执行(方法级)

setup_method:每个用例开始前执行(方法级) setup:每个用例开始前执行(调用方法前) 正在执行---test_two .teardown:每个用例结束后执行(调用方法后) teardown_method:每个用例结束后执行(方法级)

teardown_class:所有用例执行之后(类级)

import pytest


class Test():
    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_one(self):
        print("正在执行---test_one")
    def test_two(self):
        print("正在执行---test_two")
    def login_test(self):
        print("正在执行---test_two")
    if __name__ == "__main__":
        pytest.main(["-s","test02.py"])


"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/Test/test02.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 2 items

test02.py setup_class:所有用例执行之前(类级)
setup_method:每个用例开始前执行(方法级)
setup:每个用例开始前执行(调用方法前)
正在执行---test_one
.teardown:每个用例结束后执行(调用方法后)
teardown_method:每个用例结束后执行(方法级)
setup_method:每个用例开始前执行(方法级)
setup:每个用例开始前执行(调用方法前)
正在执行---test_two
.teardown:每个用例结束后执行(调用方法后)
teardown_method:每个用例结束后执行(方法级)
teardown_class:所有用例执行之后(类级)


============================== 2 passed in 0.21s ==============================

Process finished with exit code 0

类与函数混合:

setup_module和teardown_module优先级最大

import pytest
def setup_module():
    print("——setup_module:整个.py模块开始执行一次【函数】")
def teardown_module():
    print("——teardown_module:整个.py模块结束执行一次【函数】")
def setup_function():
    print("====setup_function:每个用例开始前都会执行【函数】")
def teardown_function():
    print("====teardown_function:每个用例结束后都会执行【函数】")
def test_one():
    print("正在执行---test_one【函数】")
def test_two():
    print("正在执行---test_two【函数】")
def setup():
    print("@@@@@setup:每个用例开始前执行(调用方法前)【函数】")
def teardown():
    print("@@@@@teardown:每个用例结束后执行(调用方法后)【函数】")
class Test():
    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_three(self):
        print("正在执行---test_one")
    def test_four(self):
        print("正在执行---test_two")
if __name__ == "__main__":
    pytest.main(["-s","test02.py"])



"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/Test/test02.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 4 items

test02.py ——setup_module:整个.py模块开始执行一次【函数】
====setup_function:每个用例开始前都会执行【函数】
@@@@@setup:每个用例开始前执行(调用方法前)【函数】
正在执行---test_one【函数】
.@@@@@teardown:每个用例结束后执行(调用方法后)【函数】
====teardown_function:每个用例结束后都会执行【函数】
====setup_function:每个用例开始前都会执行【函数】
@@@@@setup:每个用例开始前执行(调用方法前)【函数】
正在执行---test_two【函数】
.@@@@@teardown:每个用例结束后执行(调用方法后)【函数】
====teardown_function:每个用例结束后都会执行【函数】
setup_class:所有用例执行之前(类级)
setup_method:每个用例开始前执行(方法级)
setup:每个用例开始前执行(调用方法前)
正在执行---test_one
.teardown:每个用例结束后执行(调用方法后)
teardown_method:每个用例结束后执行(方法级)
setup_method:每个用例开始前执行(方法级)
setup:每个用例开始前执行(调用方法前)
正在执行---test_two
.teardown:每个用例结束后执行(调用方法后)
teardown_method:每个用例结束后执行(方法级)
teardown_class:所有用例执行之后(类级)
——teardown_module:整个.py模块结束执行一次【函数】


============================== 4 passed in 0.04s ==============================

Process finished with exit code 0

本文分享自微信公众号 - 橙子探索测试(chengzitest)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-09-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 自研测试框架ktest介绍(适用于UI和API)

    在自动化测试的过程中,测试框架是我们绕不过去的一个工具,无论你是不需要写代码直接改动数据生成脚本,还是你需要检查测试结果甚至持续集成,测试框架都在发挥它的作用。...

    测试开发社区
  • 如何应对甲方的需求变更?

    如何应对甲方的需求变更?应对方法是拒绝需求变更吗?你能否区分它是真的是需求变更吗?你看过一本书叫做《火球 - uml大战需求分析》吗?

    张晓衡
  • 这个任务派谁负责?

    用户5521279
  • 企业应用架构模式中的层次模型简介

    企业对外提供服务,通常借助于软件应用。比如交易零售系统,用来提供购买商品的服务,这里就涉及到交易数据,这些数据会被用户“反复”的产生、查看,而且随着服务时间增长...

    爬蜥
  • 手把手教你如何在Windows下allure与jenkins的集成生成让你一见钟情的测试报告 - 03(非常详细,非常实用)

      好了,国庆假期结束,开始搬砖。为什么要把allure和jenkins集成了?原因是集成以后,我们就可以直接查看allure的结果,不需要重复输入命令、重复使...

    北京-宏哥
  • 自动化测试中的那些误解和偏见

    因为最近混了一些论坛以及群看别人的讨论。发现好多人认为自动化测试是测试人员的唯一出路。

    测试开发社区
  • 优秀的代码都是如何分层的?

    说起应用分层,大部分人都会认为这个不是很简单嘛 就controller,service, mapper三层。看起来简单,很多人其实并没有把他们职责划分开,在很多...

    程序员小明
  • 手把手教你Pytest+Allure2.X定制报告详细教程,给自己的项目量身打造一套测试报告-02(非常详细,非常实用)

    俗话说“人靠衣服马靠鞍”一个项目做的在好,没有一分的漂亮的测试报告有时候也是很难在客户那边验收的,今天宏哥就带你们解决这一难题。

    北京-宏哥
  • 燕青: Unixbench 测试套件缺陷深度分析

    本文通过实验论证:Unixbench的Pipe-based Context Switching用例受操作系统调度算法的影响波动很大,甚至出现了虚拟机跑分超过物...

    Linux阅码场
  • android UiAutomator使用递归函数写一个让屏幕一闪一闪提醒的方法

    本人在做UiAutomator测试的时候,有时候点击执行之后把用例的事情忘掉了,导致过了一段时间才去查看测试报告。突然想写一个执行完用例之后提醒的方法,主要思路...

    八音弦

扫码关注云+社区

领取腾讯云代金券