系列文章

单元测试模块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文件获得测试的结果。

知识点

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

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

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

  4. 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添加装饰器;
  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))

python内置模块之unittest测试(五)的更多相关文章

  1. Python 下的unittest测试框架

    unittest测试框架,直接上图吧: data:数据:主要格式为CSV:读取方式:csv.reade: public:封装的模块:通用的模块单独封装,所需参数设置为变量: testcase:测试用例 ...

  2. python单元测试框架-unittest(五)之跳过测试和预期失败

    概要 @unittest.skip(reason): skip(reason)装饰器:直接跳过测试,并说明跳过测试的原因. @unittest.skipIf(reason): skipIf(condi ...

  3. 【转】python模块分析之unittest测试(五)

    [转]python模块分析之unittest测试(五) 系列文章 python模块分析之random(一) python模块分析之hashlib加密(二) python模块分析之typing(三) p ...

  4. python利用unittest测试框架组织测试用例的5种方法

    利用unittest测试框架可以编写测试用例,执行方式分两大类:利用main方法和利用testsuite,其中利用测试套件来组织测试用例可以有4种写法. 在此之前,先了解几个概念 TestCase:所 ...

  5. Python接口测试实战3(下)- unittest测试框架

    如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...

  6. Python接口测试之unittest框架(五)

    Test-driven development(TDD)开发模式在今天已经不是什么新奇的事了,它的开发思维是在开发一个产品功能的时候,先 编写好该功能的测试代码,在编写开发比如,比如要写二个数相除的函 ...

  7. 基于Python的接口自动化-unittest测试框架和ddt数据驱动

    引言 在编写接口自动化用例时,我们一般针对一个接口建立一个.py文件,一条接口测试用例封装为一个函数(方法),但是在批量执行的过程中,如果其中一条出错,后面的用例就无法执行,还有在运行大量的接口测试用 ...

  8. python内置模块之collections(六)

    前言 collections是Python内建的一个集合模块,提供了许多有用的集合类. 系列文章 python模块分析之random(一) python模块分析之hashlib加密(二) python ...

  9. Python单元测试框架unittest使用方法讲解

    这篇文章主要介绍了Python单元测试框架unittest使用方法讲解,本文讲解了unittest概述.命令行接口.测试案例自动搜索.创建测试代码.构建测试套件方法等内容,需要的朋友可以参考下   概 ...

随机推荐

  1. servlet表单的get和post方法的实现

    几经周折,这个简单的小程序终于实现了,全新的编译环境和领域,适应起来有点慢,学习能力还是有待提高 使用IDEA2017.3.3创建简单的servlet程序: 1.创建一个项目 file - new p ...

  2. ARC062 - F. Painting Graphs with AtCoDeer (Polya+点双联通分量)

    似乎好久都没写博客了....赶快来补一篇 题意 给你一个 \(n\) 个点 , 没有重边和自环的图 . 有 \(m\) 条边 , 每条边可以染 \(1 \to k\) 中的一种颜色 . 对于任意一个简 ...

  3. 【BZOJ1820】[JSOI2010]快递服务(动态规划)

    [BZOJ1820][JSOI2010]快递服务(动态规划) 题面 BZOJ 洛谷 题解 考虑无脑四维\(dp\).\(f[i][a][b][c]\),表示当前处理到第\(i\)个任务,三辆车的位置分 ...

  4. CodeForces 1110F Nearest Leaf | 线段树/换根

    我--又诈尸了-- 代码几乎都不会写了,打场CF居然上分啦,开心!(虽然还是比不过列表里的各路神仙) 题目链接 题目描述 一棵\(n\)个点的有根树,规定一种dfs序(规则:编号小的点优先dfs),\ ...

  5. Surrounded Regions - LeetCode

    目录 题目链接 注意点 解法 小结 题目链接 https://leetcode.com/problems/surrounded-regions/ 注意点 边缘不算包围'O' 解法 解法一:dfs.找处 ...

  6. scrapy-redis爬取豆瓣电影短评,使用词云wordcloud展示

    1.数据是使用scrapy-redis爬取的,存放在redis里面,爬取的是最近大热电影<海王> 2.使用了jieba中文分词解析库 3.使用了停用词stopwords,过滤掉一些无意义的 ...

  7. Android在初始化时弹出popwindow的方法

     http://blog.csdn.net/sxsboat/article/details/7340759 Android中在onCreate()时弹出popwindow,很多人都有过类似的需求吧,但 ...

  8. 洛谷P3768 简单的数学题

    解: 神奇的一批......参观yyb巨神的博客. 大致思路就是第一步枚举gcd,发现后面有个限制是gcd=1,用反演,得到的F(x)是两个等差数列求积. 然后发现有个地方我们除法的除数是乘积,于是换 ...

  9. Codeforces Round #510 (Div. 2)(B)

    传送门:Problem B https://www.cnblogs.com/violet-acmer/p/9682082.html 题意: 如果可以通过喝果汁将维生素A,B,C全部摄取,求最小花费,如 ...

  10. java基础-Idea开发工具介绍

    java基础-Idea开发工具介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 之前给大家介绍过一款Java的IDE叫eclipse,有些功能用起来不是很得心应手,尤其是在导报的 ...