pytest教程-7-用例前后置方法

上一小节,我们学习了pytest跳过测试用例的方法,本小节我们讲解一下pytest用例的前后置方法。

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

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

  • setup_module、teardown_module(模块级别):整个py文件,测试用例执行前后只执行一次
  • setup_class、teardown_class:(类级别):整个测试类中,测试用例执行前后只执行一次
  • setup、teardown(函数级别):每条用例执行前后都会执行一次,既可以作用于类中测试函数,也可以作用于类外测试函数
  • setup_method、teardown_method(方法级别):每条用例执行前后都会执行一次,只作用于类中测试函数
  • setup_function、teardown_function(函数级别):每条用例执行前后都会执行一次,只作用于类外测试函数使用

1、setup_module、teardown_module(模块级别)示例

#test_demo.pyimport pytestclass Test_04:def test_01(self):print('用例01执行')def test_02(self):print('用例02执行')def test_03():print('类外用例03执行')def setup_module():print('\n我是setup_module前置执行\n')def teardown_module():print('\n我是teardown_module后置执行')def test_04():print('类外用例04执行')if __name__ == '__main__':pytest.main()

运行结果如下:整个py文件,测试用例执行前后只执行了一次

Launching pytest with arguments D:\PycharmProjects\Source_Code\pytest_demo\test_demo.py --no-header --no-summary -q in D:\PycharmProjects\Source_Code\pytest_demo============================= test session starts =============================
collecting ... collected 4 itemstest_demo.py::Test_04::test_01 
我是setup_module前置执行PASSED                                    [ 25%]用例01执行test_demo.py::Test_04::test_02 PASSED                                    [ 50%]用例02执行test_demo.py::test_03 PASSED                                             [ 75%]类外用例03执行test_demo.py::test_04 PASSED                                             [100%]类外用例04执行我是teardown_module后置执行============================== 4 passed in 0.03s ==============================

2、setup_class、teardown_class:(类级别)示例

import pytestclass Test_04:def test_01(self):print('用例01执行')def setup_class(self):print('\n我是setup_class前置执行\n')def teardown_class(self):print('\n我是teardown_class后置执行')def test_02(self):print('用例02执行')def test_03():print('类外用例03执行')def test_04():print('类外用例04执行')if __name__ == '__main__':pytest.main()

运行结果如下:整个测试类中,测试用例执行前后只执行了一次

============================= test session starts =============================
collecting ... collected 4 itemstest_demo.py::Test_04::test_01 
我是setup_class前置执行PASSED                                    [ 25%]用例01执行test_demo.py::Test_04::test_02 PASSED                                    [ 50%]用例02执行我是teardown_class后置执行test_demo.py::test_03 PASSED                                             [ 75%]类外用例03执行test_demo.py::test_04 PASSED                                             [100%]类外用例04执行============================== 4 passed in 0.02s ==============================

3.1、setup、teardown(函数级别) 作用于类中测试函数 示例

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

运行结果如下:每条用例执行前后都会执行一次,既可以作用于类中测试函数

============================= test session starts =============================
collecting ... collected 2 itemstest_demo.py::Test_04::test_01 
setup前置执行PASSED                                    [ 50%]用例01执行teardown后置执行test_demo.py::Test_04::test_02 
setup前置执行PASSED                                    [100%]用例02执行teardown后置执行======================== 2 passed, 4 warnings in 0.03s ========================

3.2、setup、teardown(函数级别) 作用于类外测试函数 示例

import pytestdef setup():print('\n类外setup前置执行\n')def teardown():print('\n类外teardown后置执行\n')def test_03():print('类外用例03执行')def test_04():print('类外用例04执行')if __name__ == '__main__':pytest.main()

运行结果如下:每条用例执行前后都会执行一次,也可以作用于类外测试函数


test_demo.py::test_03 
类外setup前置执行PASSED                                             [ 50%]类外用例03执行类外teardown后置执行test_demo.py::test_04 
类外setup前置执行PASSED                                             [100%]类外用例04执行类外teardown后置执行============================== 2 passed in 0.03s ==============================

4、setup_method、teardown_method(方法级别)示例

import pytestclass Test_04:def setup_method(self):print('\nsetup_method前置执行\n')def teardown_method(self):print('\nteardown_method后置执行\n')def test_01(self):print('用例01执行')def test_02(self):print('用例02执行')if __name__ == '__main__':pytest.main()

运行结果如下:每条用例执行前后都会执行一次,只作用于类中测试函数

============================= test session starts =============================
collecting ... collected 2 itemstest_demo.py::Test_04::test_01 
setup_method前置执行PASSED                                    [ 50%]用例01执行teardown_method后置执行test_demo.py::Test_04::test_02 
setup_method前置执行PASSED                                    [100%]用例02执行teardown_method后置执行============================== 2 passed in 0.02s ==============================

5、setup_function、teardown_function(函数级别)示例

import pytestclass Test_04:def test_01(self):print('用例01执行')def test_02(self):print('用例02执行')def setup_function():print('\nsetup_function前置执行\n')
def teardown_function():print('\nteardown_function后置执行\n')def test_03():print('类外用例03执行')
def test_04():print('类外用例04执行')if __name__ == '__main__':pytest.main()

运行结果如下:每条用例执行前后都会执行一次,只作用于类外测试函数使用

============================= test session starts =============================
collecting ... collected 4 itemstest_demo.py::Test_04::test_01 PASSED                                    [ 25%]用例01执行test_demo.py::Test_04::test_02 PASSED                                    [ 50%]用例02执行test_demo.py::test_03 
setup_function前置执行PASSED                                             [ 75%]类外用例03执行teardown_function后置执行test_demo.py::test_04 
setup_function前置执行PASSED                                             [100%]类外用例04执行teardown_function后置执行============================== 4 passed in 0.03s ==============================

前、后置执行顺序

1、测试类中前、后置执行顺序 示例

import pytestclass Test_04:def setup(self):print('setup前置执行')def teardown(self):print('teardown后置执行')def setup_class(self):print('\nsetup_class前置执行\n')def teardown_class(self):print('\nteardown_class后置执行\n')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 (后置执行顺序则相反)

============================= test session starts =============================
collecting ... collected 2 itemstest_demo.py::Test_04::test_01 
setup_class前置执行setup_method前置执行
PASSED                                    [ 50%]用例01执行
teardown_method后置执行test_demo.py::Test_04::test_02 setup_method前置执行
PASSED                                    [100%]用例02执行
teardown_method后置执行teardown_class后置执行============================== 2 passed in 0.02s ==============================

2、测试类外前、后置执行顺序 示例

import pytestdef setup():print('类外setup前置执行')def teardown():print('类外teardown后置执行')def setup_function():print('\nsetup_function前置执行\n')def teardown_function():print('\nteardown_function后置执行\n')def setup_module():print('\nsetup_module前置执行\n')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 (后置执行顺序则相反)
 

test_demo.py::test_03 
setup_module前置执行setup_function前置执行类外setup前置执行
PASSED                                             [ 50%]类外用例03执行
类外teardown后置执行teardown_function后置执行test_demo.py::test_04 
setup_function前置执行类外setup前置执行
PASSED                                             [100%]类外用例04执行
类外teardown后置执行teardown_function后置执行teardown_module后置执行============================== 2 passed in 0.02s ==============================

总结:

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 (后置执行顺序则相反)


最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走,希望可以帮助到大家!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/651798.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JS之隐式转换与布尔判定

大家思考一下 [ ] [ ] ? 答案是空字符串 为什么呢? 当做加法运算的时候,发现左右两端存在非原始类型,也就是引用类型对象,就会对对象做隐式类型转换 如何执行的?或者说怎么查找的? 第一步&…

IntelliJ IDE 插件开发 | (五)VFS 与编辑器

系列文章 IntelliJ IDE 插件开发 |(一)快速入门IntelliJ IDE 插件开发 |(二)UI 界面与数据持久化IntelliJ IDE 插件开发 |(三)消息通知与事件监听IntelliJ IDE 插件开发 |(四)来查收…

【GitHub项目推荐--不错的 React 开源项目】【转载】

用 React Flow 连接你的想法 用 React Flow 连接你的想法,这是一个高度可定制的库,基于 React 用于构建基于节点的 交互式 UI、编辑器、流程图和图表。 开源地址:https://github.com/wbkd/react-flow Bulletproof React 一个简单、可扩展且…

Xmind安装到指定目录

Xmind安装到指定目录 默认情况下安装包自动引导安装在C盘(注册表默认位置) T1:修改注册表,比较麻烦 T2:安装时命令行指定安装位置,快捷省事 1)下载安装包(exe可执行文件) 2)安装…

PyTorch深度学习实战(33)——条件生成对抗网络(Conditional Generative Adversarial Network, CGAN)

PyTorch深度学习实战(33)——条件生成对抗网络 0. 前言1. 条件生成对抗网络1.1 模型介绍1.2 模型与数据集分析 2. 实现条件生成对抗网络小结系列链接 0. 前言 条件生成对抗网络 (Conditional Generative Adversarial Network, CGAN) 是一种生成对抗网络…

IP报文格式(全网最详细)

IP报文格式 报文格式 图1 IP头格式 表1 IP头字段解释 字段长度含义Version4比特 4:表示为IPV4;6:表示为IPV6。IHL4比特首部长度,如果不带Option字段,则为20,最长为60,该值限制了记录路由选项。…

AutoGen实战应用(二):多代理协作(Multi-Agent Collaboration)

AutoGen是微软推出的一个全新工具,它用来帮助开发者创建基于大语言模型(LLM)的复杂应用程序. AutoGen能让LLM在复杂工作流程启用多个角色代理来共同协作完成人类提出的任务。在我之前的一篇博客: AutoGen实战应用(一):代码生成、执行和调试 中我们通过一…

Linux如何配置磁盘(自动)挂载?

一些用户喜欢把开机自启动的命令(包含磁盘挂载)放在/etc/rc.local中。但是由于rc.local中的内容是顺序执行的,一些执行异常、文件权限、环境变量等问题,都可能导致rc.local中的命令没办法开机自启动,所以在磁盘挂载的开…

【RabbitMQ】交换机的概念及使用

一、引言 1、什么是交换机 RabbitMQ中,交换机是一个核心概念,主要用来将生产者生产出来的消息,传送到对应的队列中。实际上,生产者生产的消息从不会直接发送到队列,而是发送到交换机。交换机一方面接收来自生产者的消…

SpringBoot项目配置SSL后,WebSocket连接失败的解决方案

SpringBoot项目配置SSL后,WebSocket连接应使用wss协议,而不是ws协议。在前端配置WebSocket时,URL以wss://开头。

嵌入式学习第十二天

8.数组指针和指针数组(2): (1)指针数组: int *a[5]; char *str[5]; 指针数组主要用来操作字符串数组,通过将指针数组的每个元素存放字符串的首地址实现对多个字符串的操作 二维数组主要用来存储字符串数组…

Git(7)之提交消息模板

Git基础之提交消息模板 Author:onceday date:2024年1月26日 满满长路有人对你微笑过嘛… 全系列文章可查看专栏: Git使用记录_Once_day的博客-CSDN博客 文章目录 Git基础之提交消息模板1. 设置提交信息1.1 设置用户名和邮箱信息1.2 设置默认编辑器1.3…

Nodejs前端学习Day3_准备工作

妈的,这几天真tm冷,前天上午还下了一整天的雪,大雪 文章目录 前言一、Node.js简介1.1何为1.2有什么 二、Node.js可以做什么三、学习路线四、下载nodejs4.1小坑记录4.2LTS和Current版本的不同 五、什么是终端六、在nodejs中执行js代码七、powe…

Kubernetes(K8S)各种攻击方法

1. 准备工作 1.1. metarget使用 项目地址(教程):https://github.com/Metarget/metarget/blob/master/README-zh.md 注意:推荐在Ubuntu 18.04(推荐)安装。 1.1.1. 安装metarget git clone https://github.com/Metarget/metarget.git cd metarget/ sudo apt install pyt…

[BUUCTF]-PWN:hitcon2014_stkof解析

又是一道堆题,先看保护 关键信息,64位,没开pie。再看ida 大致就是alloc创建堆块,free释放堆块,fill填充堆块内容,以及一个看起来没啥用的函数,当然我也没利用这个函数去解题 这里有两种解法 解…

【VB测绘程序设计】案例8——IF选择结构练习排序(附源代码)

【VB测绘程序设计】案例6——IF选择结构练习排序(附源代码) 文章目录 前言一、界面显示二、程序说明三、程序代码四、数据演示总结前言 本文主要掌握Val()函数转换,inputBox函数、IF条件句的练习,输入3个数,按大到小排序并打印。 一、界面显示 二、程序说明 利用inpu…

day13 线程同步

文章目录 1.线程同步2.不安全案例3.1同步方法3.2同步块 1.线程同步 (多个线程操作同一个资源) 并发:同一个对象被多个线程同时操作 处理多线程问题时,多个线程访问同一个对象,并且某个线程还想修改这个对象&#xf…

[BJDCTF2020]The mystery of ip

hint 猜测ip和XFF有关 加一个XFF 下面这一步是看了wp出来的:存在ssti 这里尝试用jinja的注入方法,页面回显了是php的smarty框架 查了一下smarty的注入方法,发现可以直接执行php命令 在根目录找到flag

ASP.NET Core 中使用 WebSocket 协议进行实时通信

介绍 在 ASP.NET Core 中使用 WebSocket 协议创建实时通信的完整示例涉及几个步骤。在此示例中,我们将创建一个简单的聊天应用程序,用户可以在其中实时发送和接收消息。此示例假设您对 ASP.NET Core 和 C# 有基本了解。 步骤1.创建一个新的ASP.NET Core…

C++项目实战——机房预约管理系统

本专栏记录C学习过程包括C基础以及数据结构和算法,其中第一部分计划时间一个月 (2024.1.4-2024.1.27已完结) ,主要跟着黑马视频教程,学习路线如下,不定时更新,欢迎关注。 当前章节处于: -------…