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提供了一些跳过指定用例的方法 ...
随机推荐
- 【并行计算-CUDA开发】CUDA并行存储模型
CUDA并行存储模型 CUDA将CPU作为主机(Host),GPU作为设备(Device).一个系统中可以有一个主机和多个设备.CPU负责逻辑性强的事务处理和串行计算,GPU专注于执行高度线程化的并行 ...
- 【VS开发】ATL辅助COM组件开发
有些时候在程序的编写过程中我们会跨语言写一些东西,比如在C#中使用到C++,这个时候COM的出现就很好的解决了这一问题,我们如何来创建并且编写COM组件呢? 一.首先:创建一个ATL项目,如下图所示: ...
- Mac下Supervisor进程监控管理工具的安装与配置
Supervisor是一个类 unix 操作系统下的进程监控管理工具. Supervisor是由 Python 写成,可用 Python 的包安装管理工具 pip(Python Package Ind ...
- Javascript学习笔记三——操作DOM(二)
Javascript学习笔记 在我的上一个博客讲了对于DOM的基本操作内容,这篇继续巩固一下对于DOM的更新,插入和删除的操作. 对于HTML解析的DOM树来说,我们肯定会时不时对其进行一些更改,在原 ...
- 【转帖】NET 的一点历史往事:和 Java 的恩怨
NET 的一点历史往事:和 Java 的恩怨 https://mp.weixin.qq.com/s?__biz=MzAwNTMxMzg1MA==&mid=2654068672&idx= ...
- Plsql配置后,sql语句可以简写 快速使用
in=INSERT up=UPDATE se=SELECT fr=FROM wh=WHERE or=ORDER BY de=DELETE df=DELETE FROM sf=SELECT * FROM ...
- JSP与Servlet之间的交互,传值
一.Servlet 首先要明白一点,servlet需要容器的支持才能够运行,如Tomcat.jetty 达到servlet的请求,需要ServletRequest对象和ServletResponse对 ...
- 使用Minikube运行一个本地单节点Kubernetes集群(阿里云)
使用Minikube运行一个本地单节点Kubernetes集群中使用谷歌官方镜像由于某些原因导致镜像拉取失败以及很多人并没有代理无法开展相关实验. 因此本文使用阿里云提供的修改版Minikube创建一 ...
- Linux系列(3):入门之正确的关机方法
前言:在Windows(非NT主机系统)系统中,由于是单人假多任务的情况,所以即使你计算机关机,对于别人也没有丝毫影响!不过,在Linux下面,由于每个程序(或者服务)都是在在背景下执行,因此,在看不 ...
- 洛谷 P1266 速度限制 题解
题面 这道题可以理解为是一个分层图,也可以理解为是二维的SPFA dis[i][j]表示到达i这个点速度为j的最短路 然后跑已经死了的SPFA就好了: #include <bits/stdc++ ...