博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转】python模块分析之unittest测试(五)
阅读量:6429 次
发布时间:2019-06-23

本文共 3007 字,大约阅读时间需要 10 分钟。

系列文章

单元测试模块unittest

  • unittest的四个核心的概念:

TestLoader:加载或分发测试任务的调度器;

TestCase:测试用例的对象;

TestSuite:多个测试用例的容器;

TextTestRunner:执行测试用例的工作者;

TextTestResult:测试结果保存的对象;

fixture:搭建一个测试环境;

# 使用断言方法assertEqual     如果两个值相等,则passassertNotEqual  如果两个值不相等,则passassertTrue      判断bool值为True,则passassertFalse     判断bool值为False,则passassertIsNone    不存在,则passassertIsNotNone 存在,则pass
  • 如果断言错误,就会报assertionError错误;

简单测试实例

# mytest.pydef add(a, b):    return a+bdef minus(a, b):    return a-bdef multi(a, b):    return a*bdef divide(a, b):    return a/b# test.pyimport unittestfrom 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文件获得测试的结果。

知识点

  1. 每个继承TestCase的类都是一个测试用例,其中的每一个以test开头的方法都是一个测试实例;

  2. 测试的实例必须以test开头,否则无法被识别;在方法下面加注释后,在测试的结果终端可以显示;

  3. 测试的执行时没有顺序的,完后后标志:成功是 .,失败是 F,出错是 E,跳过是 S。

  4. unittest.main中的verbosity方法可以控制报告的详细程度,设为 0,则不输出每一用例的执行结果;如果设为 2,则输出详细的执行结果,默认为1;

setUP()和tearDown()

  • 如果需要在测试前做一些准备工作,测试后一些扫尾的工作,使用setUp和tearDown函数;
import unittestclass MathTest(unittest.TestCase):    '''测试main模块'''    def setUp(self):        """测试前的准备工作"""        pass    def tearDown(self):        """测试后的工作"""        pass
  • 上述两个方法会在每个testcase执行的前后执行,如果想所有的测试实例只执行一次准备和结尾的工作,使用:
import unittestclass MathTest(unittest.TestCase):    '''测试main模块'''    @classmethod    def setUpClass(cls):        """测试前的准备工作"""        pass    @classmethod    def tearDownClass(cls):        """测试后的工作"""        pass

多个测试模块的集成

  • 如果有多个测试文件,每个都去手动执行的方式是不现实的,可以使用TestSuite。
# test_suite.pyimport unittestfrom mytest import MathTestif __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添加装饰器;
  1. unittest.skip(reason):无条件跳过,reason可以用来写跳过的原因。

  2. unittest.skipIf(condition, reason):当condition为True是跳过;condition可以是一个函数,类等任何对象;

  3. 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))

转载于:https://www.cnblogs.com/langqi250/p/9832373.html

你可能感兴趣的文章
你为什么有那么多时间写博客?
查看>>
Excel 中使用VBA
查看>>
$.ajax同步请求会阻塞js进程
查看>>
建造者模式-java
查看>>
1. 数据类型及检测
查看>>
[BZOJ4196]软件包管理器(树链剖分)
查看>>
3404: [Usaco2009 Open]Cow Digit Game又见数字游戏
查看>>
moment
查看>>
【TYVJ】1520 树的直径
查看>>
[原创] 消消乐游戏
查看>>
[Java] JSP笔记 - EL、JSTL 常用标签
查看>>
[开源]KJFramework.Message 智能二进制消息框架 -- 新能力
查看>>
uni-app缓存器的封装
查看>>
sql中Statement与PreparedStatement的区别
查看>>
7種值得追隨的好老闆,請把握第3種
查看>>
Tableau 地图
查看>>
vue教程1-03 v-for循环
查看>>
IBM flex system P260
查看>>
Jupyter Notebook中让python2和python3内核共存
查看>>
ico 图标 生成 工具 网站
查看>>