python unittest之加载及跳过测试方法和示例
在python unittest框架中,内置了用例加载及跳过的标准函数。
其加载用例通过TestLoader类实现,而跳过测试方法则通过unittest.skip()类实现。下面我们一起来学习下。
TestLoader加载用例
TestLoader类有一个discover()函数,简洁的实现了从指定顶层目录、模块等加载测试用例。
将下述代码保存至test_disvover.py中
# _*_ coding:utf-8 _*_
__author__ = '苦叶子'
import unittest
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
# 被测函数
def add(a, b):
return a + b
# 测试用例
class demoTest(unittest.TestCase):
def test_add_4_5(self):
print u"测试 discover 命令"
self.assertEquals(add(4,5),9)
切换至test_disvover.py所在目录,在命令行中执行一下命令:
python -m unittest discover
执行结果如下:
通过该命令,unittest测试框架会尝试在当前目录及其子目录加载所有满足要求的测试(注意:所有的用例模块应该以test开头进行命名,默认加载test开头的模块)
下面我们一起看下其他相关的命令
序号 |
命令选项 |
描述 |
---|---|---|
1 |
-v, --verbose |
详细输出 |
2 |
-s, --start-directory |
启动目录(默认为当前目录) |
3 |
-p, --pattern |
匹配加载的测试文件(默认匹配test*.py) |
4 |
-t, --top-level-directory |
顶层目录(默认同--start-directory) |
例如我们指定C:test下,匹配assert开头的所有测试模块
python -m unittest -v -s "c:\test" -p "assert*.py"
这个命令将加载C:test目录下所有assert开头的测试模块中的测试方法
unittest.skip跳过测试方法
python unittest测试框架从python2.7开始支持设置跳过指定的测试方法或是跳过满足某种条件的测试用例。
下面我看一个强制跳过指定的测试用例的示例:
# _*_ coding:utf-8 _*_
__author__ = '苦叶子'
import unittest
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
# 被测函数
def add(a, b):
return a + b
class demoSkipTest(unittest.TestCase):
@unittest.skip(u"强制跳过示例")
def test_add(self):
self.assertEqual(add(4,5), 9)
def test_add_2(self):
self.skipTest("强制跳过示例2")
self.assertEqual(add(4,5), 9)
if __name__ == '__main__':
unittest.main()
将上述代码保存至demoskip.py,运行下述命令:
python demoskip.py
结果如下:
下面我们一起看下各种skip方法说明
序号 |
方法 |
说明 |
---|---|---|
1 |
unittest.skip(reason) |
强制跳转。reason是跳转原因 |
2 |
unittest.skipIf(condition, reason) |
条件跳转,如果condition是True则跳转 |
3 |
unittest.skipUnless(condition, reason) |
除非conditioin为True,才进行调整 |
4 |
unittest.expectedFailure() |
标记该测试预期为失败 ,如果该测试方法运行失败,则该测试不算做失败 |
下面我们一起看下各种方式实践的示例
# _*_ coding:utf-8 _*_
__author__ = '苦叶子'
import unittest
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
class demoSkipTest(unittest.TestCase):
a = 50
b = 20
def test_add(self):
"""加法"""
result = self.a + self.b
self.assertEqual(result, 40)
@unittest.skipIf(a>b, u"a>b就跳过")
def test_sub(self):
"""减法"""
result = self.a - self.b
self.assertTrue(result == -30)
@unittest.skipUnless(b==0, u"除数为0,则跳转")
def test_div(self):
"""除法"""
result = self.a / self.b
self.assertTrue(result == 1)
@unittest.expectedFailure
def test_mul(self):
"""乘法"""
result = self.a * self.b
self.assertTrue(result == 0)
if __name__ == "__main__":
unittest.main()
将上述代码保存至demo_skip_test.py,运行结果如下
总结
本次就用例加载及如何跳过某些测试方法或用例进行了分享,大家可以基于上述示例代码进行改造学习和实践。
- 实现三遍决策树,你就会想出更快的算法!
- 将一段复杂文本变成字符串的赋值语句
- Linux下squid代理缓存服务环境部署
- linux下清除Squid缓存的方法记录
- memcached缓存知识简单梳理
- Idea 常用快捷键
- silverlight中如何方便在多个"场景"即Xaml文件之间随意切换?
- 电子签名实现的思路、困难及解决方案
- JavaScript排序算法详解
- 事件处理需小心
- Mysql读写分离方案-MySQL Proxy环境部署记录
- Mysql读写分离方案-Amoeba环境部署记录
- linux系统终端命令提示符设置(PS1)记录
- 从MapX到MapXtreme2004[10]-根据zoom值修改显示范围
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- lru算法和redis的lru
- ThreadLocal
- 前端开发:font属性与font-variant如何使用?
- spring-boot使用aop进行多数据源切换
- CRC校验原来这么简单
- centos7安装kubernetes教程
- spring-boot自定义starter
- 实操 | kafka如何手动异步提交offset
- 解惑 | 为什么我根据时间戳获得的offset为空呢?
- spring-boot使用aop进行日志记录
- openGauss备机追数Catchup过程中主库写入阻塞问题
- openGauss830版本中对于备份模块的增强与当前问题
- spring boot自动配置原理
- 网站日志分析完整实践
- 聊聊分布式下的WebSocket解决方案