Pytest学习(三) - setup和teardown的使用
一、前言
从文章标题可以看出,就是初始化和释放的操作,根据我的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的使用的更多相关文章
- pytest 2.测试用例setup和teardown
之前我写的unittest的setup和teardown,还有setupClass和teardownClass(需要配合@classmethod装饰器一起使用),接下来就介绍pytest的类似于这类的 ...
- python:pytest中的setup和teardown
原文:https://www.cnblogs.com/peiminer/p/9376352.html 之前我写的unittest的setup和teardown,还有setupClass和teardow ...
- Pytest学习笔记2-setup和teardown
前言 我们在做自动化的时候,常常有这样的需求: 执行每一条用例时,都重新启动一次浏览器 每一条用例执行结束时,都清除测试数据 在unittest中,我们可以使用 setUp() 和 tearDown( ...
- pytest测试框架 -- setup和teardown等
一.用例运行级别 1.函数级别(setup.teardown 或 setup_function.teardown_function): 仅对处于同作用域的测试函数有效(该函数定义不在类中,则对非类中测 ...
- pytest二:setup和teardown
用例运行级别 模块级(setup_module/teardown_module)开始于模块始末,全局的 函数级(setup_function/teardown_function)只对函数用例生效(不在 ...
- pytest用例setup和teardown
函数式以下两种: setup_function/teardown_function 每个用例开始和结束调用一次 setup_module/teardown_module setup_modu ...
- pytest的setup和teardown
学过unittest的setup和teardown,前置和后置执行功能.pytest也有此功能并且功能更强大,今天就来学习一下吧. 用例运行级别: 模块级(setup_module/teardown_ ...
- 【pytest】(十二)参数化测试用例中的setup和teardown要怎么写?
还是一篇关于pytest的fixture在实际使用场景的分享. fixture我用来最多的就是写setup跟teardown了,那么现在有一个用例是测试一个列表接口,参数化了不同的状态值传参,来进行测 ...
- pytest自动化2:测试用例setup和teardown
前言: pytest支持函数和类两种用例方式,针对每种情况都有不同的代码 pytest用例运行级别 模块级(setup_module/teardown_module)开始于模块始末,全局的 函数级(s ...
随机推荐
- 必考算法之 Top K 问题
大家好,这里是<齐姐聊算法>系列之 Top K 问题. Top K 问题是面试中非常常考的算法题. 8 Leetcode 上这两题大同小异,这里以第一题为例. 题意: 给一组词,统计出现频 ...
- 为什么我选择MySQL Workbench・一
一.官方 官方提供的工具必然有其优势. MySQL Workbench有两个版本,社区版和商业版.社区版是免费的. 二.第一个选择 使用MySQL之前用的是SQL Server而微软的东西一般都使用微 ...
- Java锁?分布式锁?乐观锁?行锁?
转载自:公众号来源:码农翻身 作者:刘欣 Tomcat的锁 Tomcat是这个系统的核心组成部分, 每当有用户请求过来,Tomcat就会从线程池里找个线程来处理,有的执行登录,有的查看购物车,有的下订 ...
- Spring 系列之jdbcTemplate的使用
Spring系列之 jdbcTemplate 啥是jdncTemplate? t他是spring框架中提供的一个对象,是对原始的jdbcAPI对象的简单封装,spring框架为我们提供了很多操作,模板 ...
- Python_快速安装第三方库-pip
如何快速安装第三方库? 通过python 豆瓣园源https://pypi.douban.com/simple/进行安装,利用国内网速 如何安装? pip -i install https://pyp ...
- Python-py2和py3读写文本区别
python2和python3的区别? python 2 str 对应 python3 bytes python 2 uincode 对应 ...
- 正交矩阵(Orthogonal Matrix)
- centos7安装YouCompleteMe,vim打造成C++的IDE
一.安装python3 1.安装编译工具 yum -y groupinstall "Development tools" yum -y install zlib-devel bzi ...
- SetDlgItemText()与UpdateData()的区别
转载:https://blog.csdn.net/qq_20161893/article/details/72818874 SetDlgItemText(IDC_EDIT_RXDATA,m_strRE ...
- 【题解】CF1375D Replace by MEX
\(\color{purple}{Link}\) \(\text{Solution:}\) 观察到题目要求操作次数不超过\(2n,\)且不必最小化操作次数,所以一定是构造题. 考虑将序列转化为\([0 ...