一、前言

从文章标题可以看出,就是初始化和释放的操作,根据我的java习惯来学习pytest,个人感觉没差太多,理解上也不是很难。

哦,对了,差点跑题了,这个框架是基于Python语言的,在学习的时候难免总会用java的类比思想来学习,下面言归正传哈。

我们还从 unittest与pytest来对比学习吧

二、unittest用法

unittest有两个前置方法,两个后置方法,分别是:

  • setup()
  • setupClass()
  • teardown()
  • teardownClass()

个人始终觉得unittest和Junit像极了。

三、pytest用法

当然,Pytest也提供了类似setup、teardown的方法,分别是:

  • 模块级别:setup_module、teardown_module
  • 函数级别:setup_function、teardown_function,不在类中的方法
  • 类级别:setup_class、teardown_class
  • 方法级别:setup_method、teardown_method
  • 方法细化级别:setup、teardown

我总感觉学习pytest像是在学习testng一样,难道是我的错觉吗,啊啊啊啊,不能吧。

四、unittest示例

unittest的setupClass和teardownClass,需要配合@classmethod装饰器一起使用,也就是我们java说的注解呀,这块是翻译给java学Python的同学的,可忽略哈。

示例代码如下:

# -*- coding: utf-8 -*-
# @Time : 2020/10/21 20:09
# @Author : longrong.lang
# @FileName: test_setup_teardown_unittest.py
# @Software: PyCharm
# @Cnblogs :https://www.cnblogs.com/longronglang
'''
unittest代码示例
'''
import unittest class TestUnitTest(unittest.TestCase):
@classmethod
def setUpClass(cls):
print("所有用例执行前执行") def setUp(self):
print("每个用例开始前执行") def tearDown(self):
print("每个用例结束后执行") @classmethod
def tearDownClass(cls):
print("所有用例执行后执行") def testA(self):
'''用例A'''
print("用例A执行了")
self.assertEquals(1, 1) def testB(self):
'''用例B'''
print("用例B执行了")
self.assertTrue(True) if __name__ == "__main__":
unittest.main()

执行结果

可以看出执行顺序为:

setUpClass
setUp
testA
tearDown
setUp
testB
tearDown
tearDownClass
用例之间按用例名称ASCII码的顺序加载,数字与字母顺序为0~9,A~Z,a~z, 所以testA会在testB之前运行。

五、pytest示例

函数级的setup_function、teardown_function只对函数用例生效,而且不在类中使用

依旧还是把类和函数都有的情况放在一起,示例代码如下:

# -*- coding: utf-8 -*-
# @Time : 2020/10/21 20:27
# @Author : longrong.lang
# @FileName: test_setup_teardown_pytest.py
# @Software: PyCharm
# @Cnblogs :https://www.cnblogs.com/longronglang
'''
pyetest示例
''' import pytest def setup_module():
print("setup_module():在模块最之前执行,且只执行一次") def teardown_module():
print("teardown_module:在模块之后执行,且只执行一次") def setup_function():
print("setup_function():每个方法之前执行") def teardown_function():
print("teardown_function():每个方法之后执行") def test_1():
print("正在执行用例1")
x = "this"
assert 'h' in x def test_2():
print("正在执行用例2")
assert 1 == 1 class TestClass(object): def setup_class(self):
print("setup_class(self):每个类之前执行一次,只执行一次") def teardown_class(self):
print("teardown_class(self):每个类之后执行一次,只执行一次") def test_A(self):
print("正在执行用例A")
x = "this"
assert 'h' in x def test_B(self):
print("正在执行B")
assert 1 == 1 if __name__ == "__main__":
pytest.main(["-q", "test_setup_teardown_pytest.py"])

执行结果

可以看出来,互不影响,执行顺序为:

setup_module()
setup_function()
test_1
teardown_function()
setup_function()
test_2
teardown_function()
setup_class(self)
test_A
test_B
teardown_class(self)
teardown_module

main方法中的-q,为pytest打印测试用例的执行结果级别。

如不清楚,请移步到《Pytest学习(一)- 入门及基础》。

Pytest学习(三) - setup和teardown的使用的更多相关文章

  1. pytest 2.测试用例setup和teardown

    之前我写的unittest的setup和teardown,还有setupClass和teardownClass(需要配合@classmethod装饰器一起使用),接下来就介绍pytest的类似于这类的 ...

  2. python:pytest中的setup和teardown

    原文:https://www.cnblogs.com/peiminer/p/9376352.html 之前我写的unittest的setup和teardown,还有setupClass和teardow ...

  3. Pytest学习笔记2-setup和teardown

    前言 我们在做自动化的时候,常常有这样的需求: 执行每一条用例时,都重新启动一次浏览器 每一条用例执行结束时,都清除测试数据 在unittest中,我们可以使用 setUp() 和 tearDown( ...

  4. pytest测试框架 -- setup和teardown等

    一.用例运行级别 1.函数级别(setup.teardown 或 setup_function.teardown_function): 仅对处于同作用域的测试函数有效(该函数定义不在类中,则对非类中测 ...

  5. pytest二:setup和teardown

    用例运行级别 模块级(setup_module/teardown_module)开始于模块始末,全局的 函数级(setup_function/teardown_function)只对函数用例生效(不在 ...

  6. pytest用例setup和teardown

    函数式以下两种: setup_function/teardown_function  每个用例开始和结束调用一次 setup_module/teardown_module     setup_modu ...

  7. pytest的setup和teardown

    学过unittest的setup和teardown,前置和后置执行功能.pytest也有此功能并且功能更强大,今天就来学习一下吧. 用例运行级别: 模块级(setup_module/teardown_ ...

  8. 【pytest】(十二)参数化测试用例中的setup和teardown要怎么写?

    还是一篇关于pytest的fixture在实际使用场景的分享. fixture我用来最多的就是写setup跟teardown了,那么现在有一个用例是测试一个列表接口,参数化了不同的状态值传参,来进行测 ...

  9. pytest自动化2:测试用例setup和teardown

    前言: pytest支持函数和类两种用例方式,针对每种情况都有不同的代码 pytest用例运行级别 模块级(setup_module/teardown_module)开始于模块始末,全局的 函数级(s ...

随机推荐

  1. 如何借助 IDEA 数据库管理工具可视化使用 TDengine?

    什么是IDEA Database管理工具? 这里首先介绍下IDEA,IDEA全称IntelliJ IDEA,是Java语言开发的集成环境,IntelliJ在业界被公认为最好的Java开发工具之一. I ...

  2. java安全编码指南之:堆污染Heap pollution

    目录 简介 产生堆污染的例子 更通用的例子 可变参数 简介 什么是堆污染呢?堆污染是指当参数化类型变量引用的对象不是该参数化类型的对象时而发生的. 我们知道在JDK5中,引入了泛型的概念,我们可以在创 ...

  3. 如何高雅的使用redis去获取一个值

    //场景,给定一个订单号来从缓存中查询一个订单信息; 步骤: 1从redis中直接获取,有数据就返回 2.如果redis中没有值,就查数据库 3.数据库查到的数据不为空,就刷到redis中 4.返回查 ...

  4. opencv 中从cv::line和resize()函数

    转自: https://blog.csdn.net/weixin_36340947/article/details/77095924 转自: https://blog.csdn.net/robinhj ...

  5. .net网站自动化部署-致两年前的遗留的问题

    又到一年国庆,终于有了难得的几天空闲,计划陪陪媳妇娃子,再把最近阅读的几本相关书总结梳理下.当然,计划总是美好的,于时接到了一个老朋友电话.大意是他搞了一个.net小网站,部署了4个节点,每次更新程序 ...

  6. 通过VNC远程连接Linux实例

    无法使用Workbench和远程连接软件(例如PuTTY.Xshell.SecureCRT等)连接Linux实例时,您可以通过控制台的VNC远程连接实例,查看云服务器操作界面的实时状态. 前提条件 已 ...

  7. RHSA-2018:3665-重要: NetworkManager 安全更新

    [root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) 修复命令: 使用root账号登陆She ...

  8. ConcurrentHashMap原理分析(二)-扩容

    概述 在上一篇文章中介绍了ConcurrentHashMap的存储结构,以及put和get方法,那本篇文章就介绍一下其扩容原理.其实说到扩容,无非就是新建一个数组,然后把旧的数组中的数据拷贝到新的数组 ...

  9. C# 中 System.Index 结构体和 Hat 运算符(^)的全新用法

    翻译自 John Demetriou 2019年2月17日 的文章 <C# 8 – Introducing Index Struct And A Brand New Usage For The ...

  10. Idea 配置codeTemplate

    注释模版 注释模版是指在编写代码时针对不同的类,方法或者其他文件时自动生成的注释信息.在eclipse我们很熟悉可以利用 /**,Enter在方法,类名等前一行来生成注释模板,但是IntelliJ I ...