【转】python模块分析之unittest测试(五)
系列文章
单元测试模块unittest
- unittest的四个核心的概念:
TestLoader:加载或分发测试任务的调度器;
TestCase:测试用例的对象;
TestSuite:多个测试用例的容器;
TextTestRunner:执行测试用例的工作者;
TextTestResult:测试结果保存的对象;
fixture:搭建一个测试环境;
# 使用断言方法
assertEqual 如果两个值相等,则pass
assertNotEqual 如果两个值不相等,则pass
assertTrue 判断bool值为True,则pass
assertFalse 判断bool值为False,则pass
assertIsNone 不存在,则pass
assertIsNotNone 存在,则pass
- 如果断言错误,就会报assertionError错误;
简单测试实例
# mytest.py
def add(a, b):
return a+b
def minus(a, b):
return a-b
def multi(a, b):
return a*b
def divide(a, b):
return a/b
# test.py
import unittest
from mytest import *
class MathTest(unittest.TestCase):
'''测试main模块'''
def test_add(self):
'''测试add函数'''
self.assertEqual(2,add(1,1))
def test_minus(self):
'''测试minus函数'''
self.assertEqual(2,minus(3,1))
def test_multi(self):
'''测试multi函数'''
self.assertEqual(15,multi(3,5))
def test_divide(self):
'''测试divide函数'''
self.assertEqual(2,divide(10,5))
if __name__ == '__main__':
unittest.main(verbosity=1)
执行test.py文件获得测试的结果。
知识点
每个继承TestCase的类都是一个测试用例,其中的每一个以test开头的方法都是一个测试实例;
测试的实例必须以test开头,否则无法被识别;在方法下面加注释后,在测试的结果终端可以显示;
测试的执行时没有顺序的,完后后标志:成功是 .,失败是 F,出错是 E,跳过是 S。
unittest.main中的verbosity方法可以控制报告的详细程度,设为 0,则不输出每一用例的执行结果;如果设为 2,则输出详细的执行结果,默认为1;
setUP()和tearDown()
- 如果需要在测试前做一些准备工作,测试后一些扫尾的工作,使用setUp和tearDown函数;
import unittest
class MathTest(unittest.TestCase):
'''测试main模块'''
def setUp(self):
"""测试前的准备工作"""
pass
def tearDown(self):
"""测试后的工作"""
pass
- 上述两个方法会在每个testcase执行的前后执行,如果想所有的测试实例只执行一次准备和结尾的工作,使用:
import unittest
class MathTest(unittest.TestCase):
'''测试main模块'''
@classmethod
def setUpClass(cls):
"""测试前的准备工作"""
pass
@classmethod
def tearDownClass(cls):
"""测试后的工作"""
pass
多个测试模块的集成
- 如果有多个测试文件,每个都去手动执行的方式是不现实的,可以使用TestSuite。
# test_suite.py
import unittest
from mytest import MathTest
if __name__ == '__main__':
# 创建一个TestSuite的容器
suite = unittest.TestSuite()
# 添加测试用例,指定按照添加的顺序来
tests = [MathTest("test_add"), MathTest("test_minus"), MathTest("test_divide")]
# 在容器中加入
suite.addTests(tests)
# 可以加入单个
# suite.addTest(MathTest("test_minus"))
# 有时候我们并不关注执行的顺序
tests2 = unittest.TestLoader().loadTestsFromTestCase(MathTest)
tests1 = unittest.TestLoader().loadTestsFromTestCase(MathTest)
# 以列表的形式加入,tests1和tests2是一个容器,容器可以嵌套容器
suite.addTests([test1,test2])
# 一般结果默认输出到终端,可以设置输出到文件
with open('UnittestTextReport.txt', 'a',encoding='utf-8') as f:
runner = unittest.TextTestRunner(stream=f, verbosity=2)
runner.run(suite)
跳过某些测试
- 在测试的testcase添加装饰器;
unittest.skip(reason):无条件跳过,reason可以用来写跳过的原因。
unittest.skipIf(condition, reason):当condition为True是跳过;condition可以是一个函数,类等任何对象;
unittest.skipUnless(condition, reason):当condition为False是跳过;
class MathTest(unittest.TestCase):
'''测试main模块'''
@unitteat.skip('skip this add')
def test_add(self):
'''测试add函数'''
self.assertEqual(2,add(1,1))
【转】python模块分析之unittest测试(五)的更多相关文章
- 【转】python模块分析之collections(六)
[转]python模块分析之collections(六) collections是Python内建的一个集合模块,提供了许多有用的集合类. 系列文章 python模块分析之random(一) pyth ...
- 【转】python模块分析之typing(三)
[转]python模块分析之typing(三) 前言:很多人在写完代码一段时间后回过头看代码,很可能忘记了自己写的函数需要传什么参数,返回什么类型的结果,就不得不去阅读代码的具体内容,降低了阅读的速度 ...
- 【转】python模块分析之logging日志(四)
[转]python模块分析之logging日志(四) python的logging模块是用来写日志的,是python的标准模块. 系列文章 python模块分析之random(一) python模块分 ...
- python模块分析之typing(三)
前言:很多人在写完代码一段时间后回过头看代码,很可能忘记了自己写的函数需要传什么参数,返回什么类型的结果,就不得不去阅读代码的具体内容,降低了阅读的速度,加上Python本身就是一门弱类型的语言,这种 ...
- python模块分析之logging日志(四)
前言 python的logging模块是用来设置日志的,是python的标准模块. 系列文章 python模块分析之random(一) python模块分析之hashlib加密(二) python模块 ...
- 【转】python模块分析之hashlib加密(二)
[转]python模块分析之hashlib加密(二) hashlib模块是用来对字符串进行hash加密的模块,明文与密文是一一对应不变的关系:用于注册.登录时用户名.密码等加密使用.一.函数分析:1. ...
- python模块详解 | unittest(单元测试框架)(持续更新中)
目录: why unittest? unittest的四个重要概念 加载测试用例的三个方法 自动加载测试用例 忽略测试和预期失败 生成html测试报告 why unittest? 简介: Unitte ...
- 基于Python的接口自动化-unittest测试框架和ddt数据驱动
引言 在编写接口自动化用例时,我们一般针对一个接口建立一个.py文件,一条接口测试用例封装为一个函数(方法),但是在批量执行的过程中,如果其中一条出错,后面的用例就无法执行,还有在运行大量的接口测试用 ...
- python模块分析之hashlib加密(二)
前言 hashlib模块是py3.+用来对字符串进行hash加密的模块,核心算法是md5,明文与密文是一一对应不变的关系:用于注册.登录时用户名.密码等加密使用. 模块分析 hashlib模块有多种加 ...
随机推荐
- Yearning 介绍(SQL审核平台)
介绍 Yearning SQL 审计平台 基于Vue.js与Django的整套mysql-sql审核平台解决方案.提供基于Inception的SQL检测及执行. GitHub:https://gith ...
- nGrinder Loadrunner vs nGrinder
s d 功能 参数类型 取值方式 迭代方式 Loadrunner实现方式 nGrinder实现方式 参数化 文件 sequential (顺序取值) Each Iteration (每次迭代) 在参 ...
- gcc编译出现dlopen、dlerror、dlsym、dlcolse的解决方法
➜ test_sqlite3 gcc *.c -I . -o xixi -pthread /tmp/cckGKTrr.o: In function `unixDlOpen': sqli ...
- 【leetcode-73】 矩阵置零
给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0.请使用原地算法. 示例 1: 输入: [ [1,1,1], [1,0,1], [1,1,1] ] 输 ...
- 项目thymeleaf
官方文档:https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html#link-urls 定义和引用片段 在我们的模板中,我们经常需 ...
- HDU 1098(条件满足 数学)
题意是问是否存在非负整数 a,使得任取非负整数 x,f(x) 能够被 65 整除,其中 f(x) = 5*x^13 + 13*x^5 + k*a*x,如存在,输出 a 的最小值,如不存在,输出 no. ...
- Python线程和协程-day10
写在前面 上课第10天,打卡: 感谢Egon老师细致入微的讲解,的确有学到东西! 一.线程 1.关于线程的补充 线程:就是一条流水线的执行过程,一条流水线必须属于一个车间: 那这个车间的运行过程就是一 ...
- springboot(十八):解决跨域问题
在controller上添加@CrossOrigin注解,如下: @RestController @RequestMapping("course") @CrossOrigin pu ...
- git 完全讲解 无废话,包含在myeclipse中使用,包括解决冲突
Git 1. Git简介 1.1 git是什么 1.1.1概念 Git:git是一款开源的分布式的版本控制软件 Github:是一个基于git的面向开源及私有软件项目的托管平台 因仅支持git 作为唯 ...
- 最好用的js前端框架、组件、文档在线预览插件
这里收集的都是个人认为比较好的js框架.组件 js前端ui框架 此处列举出个人认为最好的几个框架(排序即排名),现在好点的框架商用都需要付费,以下几个也不例外,但是由于组件丰富,都可以作为企业应用的完 ...