unittest 详解
内容总括
一. 初始化
- setUp 与 tearDown
- setUpClass 与 tearDownClass
- unittest.main(verbosity=0/1/2)
二. 执行顺序
- 按顺序执行 addTest
- 按测试类执行,应用场景为:在一堆类里只想执行其中的一个类
- 按测试模块执行,一个py文件代表一个模块,应用场景为:批量执行
三. 断言
- assertEqual(a,b)
- assertNotEqual(a,b)
- assertTrue(x)
- assertFalse(x)
- assertIs(a,b)
- assertIsNot(a,b)
- assertIsNone(x)
- assertIsNotNone(x)
- assertIn(a,b)
- assertNotIn(a,b)
四. 报告
五. 其他
- 分离初始化模块,即公共模块
- skip, skipIf
解析
1. setUp 与 tearDown
- 有几个test,就执行几次setUp 与 tearDown,浪费资源
2. setUpClass 与 tearDownClass
- 推荐使用,只初始化一次固件,要加 @classmethod
class BaiDuTest(unittest.TestCase):
@classmethod
def setUpClass(cls):
print("start...") @classmethod
def tearDownClass(self):
print("end...")
if __name__ == '__main__':
unittest.main(verbosity=1)
3. unittest.main(verbosity=0/1/2)
- 默认为1,0与1 几乎无差别,展示测试总个数与全局结果
- 2 为详情展示
4 .按顺序执行 addTest
import unittest class BaiDuTest(unittest.TestCase):
@classmethod
def setUpClass(cls):
print("start...") @classmethod
def tearDownClass(self):
print("end...")
def test_baidu(self):
print("baidu...")
def test_souhu(self):
print("souhu...") if __name__ == '__main__':
suit = unittest.TestSuite()
suit.addTest(BaiDuTest.test_souhu)
suit.addTest(BaiDuTest.test_baidu)
unittest.TextTestRunner(verbosity=2).run(suit)
5. 按测试类执行
import unittest class BaiDuTest(unittest.TestCase):
@classmethod
def setUpClass(cls):
print("start...") @classmethod
def tearDownClass(self):
print("end...")
def test_baidu(self):
print("baidu...")
def test_souhu(self):
print("souhu...") class BaiDuTest2(unittest.TestCase):
@classmethod
def setUpClass(cls):
print("start2...") @classmethod
def tearDownClass(self):
print("end2...")
def test_baidu(self):
print("baidu2...") if __name__ == '__main__':
suit = unittest.TestSuite(unittest.makeSuite(BaiDuTest2))
unittest.TextTestRunner(verbosity=2).run(suit)
suit = unittest.TestLoader().loadTestsFromTestCase(BaiDuTest2)
unittest.TextTestRunner(verbosity=2).run(suit)
6. 按测试模块执行
# -*- coding:utf-8 -*-
import unittest
import os class BaiDuTest(unittest.TestCase):
def test_baidu(self):
print("baidu...") if __name__ == '__main__':
# 定义测试集所在文件夹
path = os.path.dirname(__file__) # 当前执行路径
print(path)
# discover = unittest.defaultTestLoader.discover(path,pattern='test*.py') # 支持正则
discover = unittest.defaultTestLoader.discover(path,pattern='ttst.py')
runner = unittest.TextTestRunner(verbosity=2).run(discover)
7. 分离初始化模块
class InitTest(unittest.TestCase):
@classmethod
def setUpClass(cls):
print("start...") @classmethod
def tearDownClass(self):
print("end...") class BaiDuTest(InitTest):
def test_baidu(self):
print("baidu...")
8. skip, skipIf
class BaiDuTest(InitTest):
def test_baidu(self):
print("baidu...") @unittest.skip("skip TestCase")
def test_baidu2(self):
print("baidu2...") @unittest.skipIf(1!=1,"skip TestCase")
def test_baidu3(self):
print("baidu3...") if __name__ == '__main__':
unittest.main(verbosity=2)
9. 断言
def test_baidu2(self):
self.assertEqual(1,'')
self.assertTrue(0)
self.assertFalse(0)
self.assertIn('www','http://www.b')
⚠️ 第二行代码错了,就不会执行执行第3,4,5行代码
unittest 详解的更多相关文章
- Python单元测试框架 unittest详解
一 整体结构概览 unittest原名为PyUnit,是由java的JUnit衍生而来.对于单元测试,需要设置预先条件,对比预期结果和实际结果. TestCase :通过继承TestCase类,我们可 ...
- unittest详解(七) 自动生成测试报告
用例执行完成后,执行结果默认是输出在屏幕上,其实我们可以把结果输出到一个文件中,形成测试报告. unittest自带的测试报告是文本形式的,如下代码: import unittest if __nam ...
- unittest详解(六) 断言
我们在执行测试用例时,怎么来判断这条用例是否通过呢?唯一的办法就是拿实际结果和预期结果进行比较,如果一致用例就是通过的,否则用例就是失败的.在python中这种比较的方法就叫做断言,unittest框 ...
- unittest详解(五) 引入装饰器@classmethod
我们知道setUp()和setDown()的作用是在每条测试用例执行前准备测试环境以及用例测试结束后恢复测试环境,如果我们执行的测试类下所有测试用例的环境准备和环境复原的操作都是一样的,那么我们就没必 ...
- unittest详解(四) 批量执行用例(discover)
前面我们说了,对于不同文件用例,我们可以通过addTest()把用例加载到一个测试套件(TestSuite)来统一执行,对于少量的文件这样做没问题,但是如果有几十上百个用例文件,这样做就太浪费时间了. ...
- unittest详解(三) 测试套件(TestSuite)
在前面一章中示例了如何编写一个简单的测试,但有两个问题: 我们知道测试用例的执行顺序是根据测试用例名称顺序执行的,在不改变用例名称的情况下,我们怎么来控制用例执行的顺序呢? 一个测试文件,我们直接执行 ...
- unittest详解(二) 跳过用例的执行(skip)
在执行测试用例时,有时候有些用例是不需要执行的,那我们怎么办呢?难道删除这些用例?那下次执行时如果又需要执行这些用例时,又把它补回来?这样操作就太麻烦了. unittest提供了一些跳过指定用例的方法 ...
- unittest详解(一) unittest初识
unittest是python内置的一个单元测试框架,在学习怎么使用它之前,我们先来了解它的一些概念和原理. Test Case:测试用例,一个TestCase的实例就是一个测试用例.什么是测试用例呢 ...
- unittest详解 跳过用例的执行(skip)
在执行测试用例时,有时候有些用例是不需要执行的,那我们怎么办呢?难道删除这些用例?那下次执行时如果又需要执行这些用例时,又把它补回来?这样操作就太麻烦了. unittest提供了一些跳过指定用例的方法 ...
随机推荐
- centos7安装Scala、Spark(伪分布式)
centos7安装spark(伪分布式) spark是由scala语言开发的,首先需要安装scala. Scala安装 下载scala-2.11.8,(与spark版本要对应) 命令:wget htt ...
- 爬取汽车之家新闻图片的python爬虫代码
import requestsfrom bs4 import BeautifulSouprespone=requests.get('https://www.autohome.com.cn/news/' ...
- [转帖]公钥基础设施(PKI)/CFSSL证书生成工具的使用
公钥基础设施(PKI)/CFSSL证书生成工具的使用 weilovepan520关注1人评论84344人阅读2018-05-26 12:22:20 https://blog.51cto.com/liu ...
- hashmap 为什么初始化容量是2的幂次方
个人理解 做下记录,不正确的地方望不吝赐教 这是hashmap初始化容量时候 对容量大小做的处理,保证初始化容量为最近的2的幂次方(JDK1.8) static final int tableSize ...
- linux系统redis安装及使用
1.下载redishttp://download.redis.io/releases/redis-5.0.5.tar.gz$ wget http://download.redis.io/release ...
- Linux下通过ssh上传下载文件
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/jun8148/article/deta ...
- python中全局global和局部nonlocal命名空间
python中全局global和局部nonlocal命名空间 局部名称空间对全局名称空间的变量可以引用,但是无法改变. count = 1 def func1(): count = 2 print(c ...
- Ruby Rails学习中:调试信息和 Rails 的三种环境,Users 资源,调试器,Gravatar 头像和侧边栏
注册 一.调试信息和 Rails 环境 现在咱们要实现的用户资料页面是我们这个应用中第一个真正意义上的动态页面.虽然视图的代码不会动态改变, 不过每个用户资料页面显示的内容却是从数据库中读取的.添加动 ...
- Java Serializable Objects(序列化)
https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html 序列化一个对象,意味着把这个对象的状态转化为字节流,而且个字节流 ...
- vs 2017创建类时的默认模板修改
思路:找到vs 2017安装目录---->找到模板文件---->修改 一般安装目录: C:\Program Files (x86)\Microsoft Visual Studio\2017 ...