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提供了一些跳过指定用例的方法 ...
随机推荐
- 多版本YUM仓库搭建
服务器:CentOS7 YUM源:阿里云 空间要求:CentOS6+CentOS7 50G,考虑后期更新预留,LVS空间100G 1.在服务器配置CentOS7的yum源和CentOS6的yum源 ...
- DAY 吐
今天所学: 一,Linux的文件和目录管理 #1 cd( 变更用户所在目录)直接运行cd会进入root的/root下,后面跟目录名,会进入指定目录下( 后面只能是目录名,不能跟文件名). #2 pwd ...
- day36 joinablequeue、多线程理论、多线程的两种使用方式、守护线程、互斥锁、死锁、递归锁、信号量
1.joinablequeue队列 joinablequeue与queue一样,也是一种队列,其继承自queue,也有queue中的put 与get 方法,但是在joinablequeue中有自己的 ...
- 【转帖】Windows与Linux系统下的库介绍
Windows与Linux系统下的库介绍 http://embeddedlinux.org.cn/emb-linux/entry-level/200903/12-553.html 库的定义 库文件是一 ...
- linux:date 计算一组命令所花费的执行时间
date 命令可以用于计算一组命令所花费的执行时间 可以以不同的格式来读取.设置日期. (1) 读取日期: $ date Thu May 20 23:09:04 IST 2010 (2) 打印纪元时: ...
- JSP与Servlet之间的交互,传值
一.Servlet 首先要明白一点,servlet需要容器的支持才能够运行,如Tomcat.jetty 达到servlet的请求,需要ServletRequest对象和ServletResponse对 ...
- Javascript去掉base64中的回车换行
给天津海关开发手机插件. 他们的API返回的文件base64遵循了RFC822规定,即BASE64编码每76个字符,还需要加上一个回车换行. 这就导致了我的Ant Design Mobile图片控件不 ...
- E.XKC's basketball team(The Preliminary Contest for ICPC Asia Xuzhou 2019)
https://nanti.jisuanke.com/t/41387 解: 离散化+线段树. #define IOS ios_base::sync_with_stdio(0); cin.tie(0); ...
- php 取post数据的三种方式
$_POST.$GLOBALS['HTTP_RAW_POST_DATA'].file_get_contents("php://input") 都有用来取post数据,用下来感觉大致 ...
- WEB小计
使用vue的事件绑定时,应当使用.stop来阻止事件的传播 html 有捕获和冒泡两种事件机制