IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> python测试框架之Pytest(二) : 测试用例的前置setup&后置teardown用法 -> 正文阅读

[开发测试]python测试框架之Pytest(二) : 测试用例的前置setup&后置teardown用法

pytest中的前置和后置

pytest比较强大,提供了不仅仅一种方法的前置和后置:
– 模块级(setup_module/teardown_module)开始于横块始末,全局的
– 函数级(setup_function/teardown_function)只对函数用例生效
– 类级(setup_class/teardown_class)只在类中前后运行一次
–方法级(setup_method/teardown_method)开始于方法始末
–(setup/teardown)运行在调用方法前后

类内外执行:方法细化级setup/teardown

setup/teardown:无论是类内还是类外,每个方法都会执行1次。
setup: 方法运行前执行
teardown:方法运行完才执行
# file_name: test_setup.py
import pytest
def setup():
    print("...类外setup...")
def test_create():
    print("类外test_create")
def test_view():
    print("类外test_view")
class TestSetupClass:
    def setup(self):
        print("...类内setup...")
    def test_create(self):
        print("类内test_create")
    def test_view(self):
        print("类内test_view")
    def teardown(self):
        print("...类内teardown...")
def teardown():
    print("...类外teardown...")
if __name__ == '__main__':
    pytest.main(['-vs', 'test_setup.py'])

执行结果如下:类外类内方法的都有执行前置和后置,每个方法分别执行1次。
在这里插入图片描述

备注:也可以通过在fixture函数中通过yield实现setup和teardown功能

类外执行:模块级(setup_module/teardown_module)

setup_module/teardown_module:
	只有前置后置方法在class外部时,才会被执行。整个.py文件只执行1次。
	适合.py存在多个class时使用。
	setup_module: 在.py文件的第一个class前执行。
	teardown_module:在.py文件的最后一个class后执行。

测试代码如下:class内外同时存在模块级方法

# file_name:test_setup_module.py
import pytest
def setup_module():
    print("...类外 setup_module...")
class TestModuleClass:
    def setup_module(self):
        print("...类内 setup_module...")
    def test_create(self):
        print("测试用例test_create")
    def test_view(self):
        print("测试用例test_view")
    def teardown_module(self):
        print("...类内 teardown_module...")
def teardown_module():
    print("...类外 teardown_module...")
if __name__ == '__main__':
    pytest.main(['-vs')

执行结果如下:只执行class外的前置后置方法,只执行1次。第1个class TestModuleClass1前执行前置,最后1个class TestModuleClass2之后执行后置。
在这里插入图片描述

类外执行:函数级(setup_function/teardown_function)

setup_function/teardown_function:
	只有类外部的方法才会执行。每个方法执行一次。
	setup_function: 类外部的方法前执行。
	teardown_function: 类外部的方法后执行。
# file_name:test_setup_function.py
import pytest
def setup_function():
    print("...类外setup_function...")
def test_create():
    print("类外测试用例test_create")
def test_view():
    print("类外测试用例test_view")
class TestFunctionClass:
    def setup_function(self):
        print("...类内setup_function...")
    def test_create(self):
        print("测试用例test_create")
    def test_view(self):
        print("测试用例test_view")
    def teardown_function(self):
        print("...类内teardown_function...")
def teardown_function():
    print("...类外teardown_function...")
if __name__ == '__main__':
    pytest.main(['-vs', 'test_setup_function.py'])

执行结果如下:只执行class外的方法,类外方法test_create/test_view分别执行1次:方法前执行setup_function,方法后执行teardown_function。
在这里插入图片描述

类内执行:类级(setup_class/teardown_class)

setup_class/teardown_class:
	只有方法在class内部时,才可以执行。class内只运行1次。
	setup_class:在第一个method运行前执行。
	teardown_class:在最后一个method运行前执行。
# file_name:test_setup_class.py
import pytest
def setup_class():
    print("...类外 setup_class...")
class TestClassClass:
    def setup_class(self):
        print("...类内 setup_class...")
    def test_create(self):
        print("测试用例test_create")
    def test_view(self):
        print("测试用例test_view")
    def teardown_class(self):
        print("...类内 teardown_class...")
def teardown_class():
    print("...类外 teardown_class...")
if __name__ == '__main__':
    pytest.main(['-vs', 'test_setup_class.py'])

执行结果如下:只执行class内的方法,第一个方法test_create前执行setup_class,最后一个方法test_view后执行teardown_class。
在这里插入图片描述

类内执行:方法级(setup_method/teardown_method)

setup_method/teardown_method:
	只有方法在class内部时,才可以执行。class内运行多次。
	setup_method: 每个method前执行一次。
	teardown_method: 每个method后执行一次。
	在method运行的前后执行。,每个method都会运行1次。
# file_name:test_setup_method.py
import pytest
def setup_method():
    print("...类外 setup_method...")
class TestMethodClass:
    def setup_method(self):
        print("...类内 setup_method...")
    def test_create(self):
        print("测试用例test_create")
    def test_view(self):
        print("测试用例test_view")
    def teardown_method(self):
        print("...类内 teardown_method...")
def teardown_method():
    print("...类外 teardown_method...")
if __name__ == '__main__':
    pytest.main(['-vs', 'test_setup_method.py'])

执行结果如下:只执行class内的方法,执行了2次。test_create/test_view:方法前执行setup_method,方法执行setup_method,分别执行了1次。
在这里插入图片描述

组合使用

由于Python语法规范,.py文件的class可有可无,故分2种情况来演示说明。

有Class的执行顺序:

setup_module => setup_function => 类外setup => 类外测试用例
=> setup_class => setup_method => 类内setup => 类内测试用例
	先执行class外部的方法,再按顺序执行class内方法。
import pytest
def setup_module():
    print("类外setup_module")
def setup_function():
    print("类外setup_function")
def setup():
    print("类外setup")
def test_create():
    print("类外测试用例test_create")
def test_view():
    print("类外测试用例test_view")
class TestClass_1:
    def setup_class(self):
        print("类内setup_class")
    def setup_method(self):
        print("类内setup_method")
    def test_create_1(self):
        print("测试用例test_create_1")
    def test_view_1(self):
        print("测试用例test_view_1")
    def teardown_method(self):
        print("类内teardown_method")
    def teardown_class(self):
        print("类内teardown_class")
class TestClass_2:
    def test_create_2(self):
        print("测试用例test_create_2")
    def test_view_2(self):
        print("测试用例test_view_2")
def teardown():
    print("类外teardown")
def teardown_function():
    print("类外teardown_function")
def teardown_module():
    print("类外teardown_module")
if __name__ == '__main__':
    pytest.main(['-vs', 'test_all_setup_class.py'])

执行结果如下:
在这里插入图片描述

无Class的执行顺序:不执行适用于class内的前置和后置方法

setup_module => setup_function => setup => 测试用例

	未执行:setup_class、setup_method
import pytest
def setup_module():
    print("setup_module")
def setup_function():
    print("setup_function")
def setup():
    print("setup")
def setup_class():
    print("setup_class")
def setup_method():
    print("setup_method")
def test_create():
    print("测试用例test_create")
def test_view():
    print("测试用例test_view")
def teardown_method():
    print("teardown_method")
def teardown_class():
    print("teardown_class")
def teardown():
    print("teardown")
def teardown_function():
    print("teardown_function")
def teardown_module():
    print("teardown_module")
if __name__ == '__main__':
    pytest.main(['-vs', 'test_all_setup.py'])

执行结果如下:没有class时,默认不执行适用在class内的前置和后置方法
在这里插入图片描述

使用场景

  • 若是.py文件中没有定义class,可以使用setup_module、setup_function、setup,它们的优先级别是:setup_module > setup_function > setup。

  • setup_function 与 setup_method 都是方法级前置,setup_method适用于class内。

  • setup_function 与 setup都会在每个方法前执行1次,所以只使用其中1个即可。

  • setup_function 优于setup,但是setup没有类内外的限制,建议方法级别使用setup

  • setup_module: .py文件中只执行1次,最先执行的前置,适合统一登录、数据库连接等。

  • setup: 每个方法前执行,适合测试用例的数据准备、单独登录等。

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-08-25 12:30:46  更:2021-08-25 12:30:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/17 22:26:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码