目录

unittest的简单概述:

各种demo

demo1(入门款demo)

demo2(增加setup和teardown)

demo2(增加test suite)

demo3(将结果搞到文件中)

unittest的断言

unittest的命令行


unittest的简单概述:

Python中有一个自带的单元测试框架是unittest模块,用它来做单元测试,它里面封装好了一些校验返回的结果方法和一些用例执行前的初始化操作

在说unittest之前,先说几个概念:

unittest中的几大核心部分:test fixture   test case    test suite    test runner

  1. TestCase 也就是测试用例,是测试的最小单位,一般检查一组输入的响应和输出是否符合预期,unittest模块提供了TestCase类来帮助我们创建测试用例
  2. TestSuite 多个测试用例集合在一起,就是TestSuite(测试套件),例如:我们有50个测试用例,但是本次需要使用20个测试用例,可以将这20个组成一个测试套件。
  3. TestFixture是代表了用力执行前的准备工作和用例执行后的清理工作
  4. TestRunner是来执行测试用例并输出测试结果的组件,测试的结果会保存到TestResult实例中,包括运行了多少测试用例,成功了多少,失败了多少等信息,可以图形界面或者命令行界面。

各种demo

demo1(入门款demo)

import  unittestclass Mytest(unittest.TestCase):def test_01(self):print('test01')def est_02(self):print('test02')if __name__ == '__main__':unittest.main()

执行后的结果为:

/Users/dongyue/Desktop/code/venv/bin/python /Users/dongyue/Desktop/code/learn/测试demo.py
..
----------------------------------------------------------------------
Ran 1 tests in 0.000sOK
test01Process finished with exit code 0

由此可的:1、测试用例必须继承自unittest.TestCase

2、case均以test开头


demo2(增加setup和teardown)

import  unittestclass Mytest(unittest.TestCase):#test fixturedef setUp(self):#用例执行前的准备print('start....')#test casedef test_01(self):print('test01')#test casedef test_02(self):print('test02')#test fixturedef tearDown(self):#用例执行后的清理工作print('end....')if __name__ == '__main__':unittest.main()

执行后的结果为:

/Users/dongyue/Desktop/code/venv/bin/python /Users/dongyue/Desktop/code/learn/测试demo.py
..
----------------------------------------------------------------------
Ran 2 tests in 0.000sOK
start....
test01
end....
start....
test02
end....Process finished with exit code 0

由此可得:测试用例的执行顺序是setUp--test01--tearDown--setUp--test02--tearDown


demo2(增加test suite)

import  unittestclass Mytest(unittest.TestCase):def setUp(self):#用例执行前的准备print('start....')def test_01(self):print('test01')def test_02(self):print('test02')def tearDown(self):#用例执行后的清理工作print('end....')class Mytest2(unittest.TestCase):def setUp(self):#用例执行前的准备print('start2....')def test_03(self):print('test03')def test_04(self):print('test04')def tearDown(self):#用例执行后的清理工作print('end2....')if __name__ == '__main__':mysuite = unittest.TestSuite()mysuite.addTest(Mytest2('test_03'))mysuite.addTest(Mytest('test_01'))unittest.TextTestRunner(verbosity=2).run(mysuite)

执行后的结果为:

/Users/dongyue/Desktop/code/venv/bin/python /Users/dongyue/Desktop/code/learn/测试demo.py
start2....
test_03 (__main__.Mytest2) ... ok
test03
end2....
test_01 (__main__.Mytest) ... okstart....
test01
end....
----------------------------------------------------------------------
Ran 2 tests in 0.000sOKProcess finished with exit code 0

由此可得:将测试套件实例化---将本次要执行的测试用例放到测试套件中---执行该套件

可但是但可是,unittest.TextTestRunner(verbosity=2).run(mysuite)中的参数又都是什么呢?

  1. verbosity 分别三个级别: 0 1 2 它们输出的测试报告详细程度不同,2 最详细
  2. stream 关系着测试报告的位置,如果默认为None的话,测试报告会输出到控制台,如果需要保存到某个文件,可以搞一个文件对象,然后将最终打印的日志保存到该文件中,就是修改该对象。
  3. descriptions 测试报告的描述

当verbosity=0时:执行上面的代码

/Users/dongyue/Desktop/code/venv/bin/python /Users/dongyue/Desktop/code/learn/测试demo.py
start2....
----------------------------------------------------------------------
test03
Ran 2 tests in 0.000s
end2....start....
OK
test01
end....Process finished with exit code 0

当verbosity=1时:执行上面的代码

/Users/dongyue/Desktop/code/venv/bin/python /Users/dongyue/Desktop/code/learn/测试demo.py
..
start2....
----------------------------------------------------------------------
test03
Ran 2 tests in 0.000s
end2....
start....
test01end....
OKProcess finished with exit code 0

当verbosity=2时:执行上面的代码

/Users/dongyue/Desktop/code/venv/bin/python /Users/dongyue/Desktop/code/learn/测试demo.py
start2....
test03
end2....
start....
test01
end....
test_03 (__main__.Mytest2) ... ok
test_01 (__main__.Mytest) ... ok----------------------------------------------------------------------
Ran 2 tests in 0.000sOKProcess finished with exit code 0

不同的verbosity显示详细程度不同,0的时候只显示代码中需要print的,1的时候会显示..,2的时候显示具体的case成功的日志。


demo3(将结果搞到文件中)

if __name__ == '__main__':mysuite = unittest.TestSuite()mysuite.addTest(Mytest2('test_03'))mysuite.addTest(Mytest('test_01'))with open('./log.log','w+') as f:unittest.TextTestRunner(verbosity=2,stream = f).run(mysuite)

将上面的代码进行更改后,就会将文件保存到log.log中,此时控制台显示:

/Users/dongyue/Desktop/code/venv/bin/python /Users/dongyue/Desktop/code/learn/测试demo.py
test03
test01Process finished with exit code 0

其中详细的内容显示在了log.log中:


unittest的断言

断言是测试用例的核心,我们使用assertEqual()来判断预期结果,使用assertTrue(),assertFalse()来做是非判断。

可以参考该文章:https://www.cnblogs.com/cindy-cindy/p/8243785.html

demo:将上面的代码稍微改动下

import  unittestclass Mytest(unittest.TestCase):def setUp(self):#用例执行前的准备pass# print('start....')def test_01(self):print('test01')def test_02(self):print('test02')def tearDown(self):#用例执行后的清理工作pass# print('end....')class Mytest2(unittest.TestCase):def setUp(self):#用例执行前的准备pass# print('start2....')def test_03(self):print('test03')self.assertEqual('1','2')def test_04(self):print('test04')def tearDown(self):#用例执行后的清理工作pass# print('end2....')if __name__ == '__main__':mysuite = unittest.TestSuite()mysuite.addTest(Mytest2('test_03'))mysuite.addTest(Mytest('test_01'))unittest.TextTestRunner(verbosity=2).run(mysuite)

执行后的结果:会显示具体哪个case错误了

/Users/dongyue/Desktop/code/venv/bin/python /Users/dongyue/Desktop/code/learn/测试demo.py
test03
test_03 (__main__.Mytest2) ... FAIL
test01
test_01 (__main__.Mytest) ... ok======================================================================
FAIL: test_03 (__main__.Mytest2)
----------------------------------------------------------------------
Traceback (most recent call last):File "/Users/dongyue/Desktop/code/learn/测试demo.py", line 32, in test_03self.assertEqual('1','2')
AssertionError: '1' != '2'
- 1
+ 2----------------------------------------------------------------------
Ran 2 tests in 0.001sFAILED (failures=1)Process finished with exit code 0

当为verbosity = 1的时候:就只显示F.

/Users/dongyue/Desktop/code/venv/bin/python /Users/dongyue/Desktop/code/learn/测试demo.py
F.
test03
======================================================================
test01
FAIL: test_03 (__main__.Mytest2)
----------------------------------------------------------------------
Traceback (most recent call last):File "/Users/dongyue/Desktop/code/learn/测试demo.py", line 32, in test_03self.assertEqual('1','2')
AssertionError: '1' != '2'
- 1
+ 2----------------------------------------------------------------------
Ran 2 tests in 0.001sFAILED (failures=1)Process finished with exit code 0

unittest的命令行

unittest支持命令行接口,我们可以在命令行里指定运行具体的测试用例

  • 运行测试模块:python -m unittest 测试demo.py  测试demo2.py
  • 运行测试类:python -m unittest 测试demo.Mytest
  • 运行测试方法:python -m unittest 测试demo.Mytest.test_01
  • 可以通过使用-v参数获取更详细的测试信息:python -m unittest -v 测试demo.py
  • 可以通过-h参数查看命令行所有参数:python -m unittest -h

代码为:

import  unittestclass Mytest(unittest.TestCase):def setUp(self):#用例执行前的准备pass# print('start....')def test_01(self):print('test01')def test_02(self):print('test02')def tearDown(self):#用例执行后的清理工作pass# print('end....')class Mytest2(unittest.TestCase):def setUp(self):#用例执行前的准备pass# print('start2....')def test_03(self):print('test03')self.assertEqual('1','2')def test_04(self):print('test04')def tearDown(self):#用例执行后的清理工作pass# print('end2....')if __name__ == '__main__':mysuite = unittest.TestSuite()mysuite.addTest(Mytest2('test_03'))mysuite.addTest(Mytest('test_01'))with open('./log.log','w+') as f:unittest.TextTestRunner(verbosity=2,stream = f).run(mysuite)

命令行命令为: python -m unittest -v 测试demo.py

终端执行结果显示为:

(venv) dongyuedeMacBook-Pro:learn dongyue$ python -m unittest -v 测试demo.py
test_01 (测试demo.Mytest) ... test01
ok
test_02 (测试demo.Mytest) ... test02
ok
test_03 (测试demo.Mytest2) ... test03
FAIL
test_04 (测试demo.Mytest2) ... test04
ok======================================================================
FAIL: test_03 (测试demo.Mytest2)
----------------------------------------------------------------------
Traceback (most recent call last):File "/Users/dongyue/Desktop/code/learn/测试demo.py", line 32, in test_03self.assertEqual('1','2')
AssertionError: '1' != '2'
- 1
+ 2----------------------------------------------------------------------
Ran 4 tests in 0.001sFAILED (failures=1)
(venv) dongyuedeMacBook-Pro:learn dongyue$

Python中的unittest模块(入门学习款)相关推荐

  1. Python中re(正则表达式)模块函数学习

    2019独角兽企业重金招聘Python工程师标准>>> Python正则表达式指南 今天学习了Python中有关正则表达式的知识.关于正则表达式的语法,不作过多解释,网上有许多学习的 ...

  2. [转载] Python中的string模块的学习

    参考链接: Python当中string.whitespace 学习资料:http://docs.python.org/library/string.html#string.Formatter 感觉学 ...

  3. python中的utils模块_python学习笔记-import utils报错

    今天遇到一个坑爹的问题,查找了半天原因,终于解决了,在此特地记录一下. 运行环境:Windows eclipse 我在eclipse中配置了python的运行环境,在eclipse中编写python代 ...

  4. 使用python中的tkinter模块制作一个学习打卡小软件

    学习任务打卡小软件---戈多Sensei 1.制定任务 2.完成任务 3.学习评估 最近为了给我的星星⭐写一个学习记录软件,学习了一下python中的tkinter模块,做了一个可视化打卡界面,此处为 ...

  5. python中的logging记录日志_[ Python入门教程 ] Python中日志记录模块logging使用实例...

    python中的logging模块用于记录日志.用户可以根据程序实现需要自定义日志输出位置.日志级别以及日志格式. 将日志内容输出到屏幕 一个最简单的logging模块使用样例,直接打印显示日志内容到 ...

  6. python使用教程cmd啥意思-Python 中的cmd模块学习

    Python中的cmd模块类型提供了一个创建命令行解析器的框架.简单的来说,可以继承Cmd来创建命令行界面,然后对所有想处理的命令command执行do_command方法.默认情况下,它使用read ...

  7. linux系统python截图不显示中文_Linux运维知识之解决linux系统下python中的matplotlib模块内的pyplot输出图片不能显示中文的问题...

    本文主要向大家介绍了Linux运维知识之解决linux系统下python中的matplotlib模块内的pyplot输出图片不能显示中文的问题,通过具体的内容向大家展现,希望对大家学习Linux运维知 ...

  8. Python 之 【markdown 模块的学习】

    摘要: markdown工具,可以将txt转化成html格式.这一类工具的作用是将按一定格式写成的可读性强的文本文件转化为结构化的标准xhtml或html.Linux 下面也有markdown: zh ...

  9. python中tkinter模块_使用Python中的tkinter模块作图的方法

    python简述: Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.自从20世纪90年代初Python语言诞生至今,它逐渐被广泛应用于处理系统管理任务和Web编程.Python[1 ...

  10. python是什么模块,python中什么是模块

    ## re模块 众多编程语言都为正则表达式的使用设置了标准库,Python也不例外.在Python中使用re模块来操作正则表达式的匹配.下面我们一起学习re模块的用法. ### 使用re还是compi ...

最新文章

  1. mysql5.6.28安装教程百度经验_Linux(Ubuntu)下Mysql5.6.28安装配置方法图文教程
  2. 【蓝桥杯】基础练习 特殊回文数
  3. python中的垃圾回收机制_python里面的垃圾回收机制
  4. 设计趋势|平面设计的热点是什么?
  5. java io怎么学_Java IO 初学者 怎么都弄不出来
  6. java nio 面试题_10个最高频的Java NIO面试题剖析!
  7. ASP.NET路由系统实现原理:HttpHandler的动态映射
  8. msyql之解决mysql出现ERROR 1698 (28000): Access denied的问题
  9. MPICH2在WINDOWS下的安装配置
  10. jQuery 前后端分离项目总结
  11. 自学QT之qss教程
  12. abb机器人编程指令写字_ABB机器人编程指令与函数
  13. 运放电流检测采样电路电压采样电路
  14. Arcscene教程
  15. 相关关系、因果关系、回归关系的区别
  16. Codeforces Round #490 (Div. 3) C. Alphabetic Removals
  17. 关于Oracle SQL中系统时间和库里数据时间的比较
  18. 单片机炫彩灯实训报告_51单片机呼吸灯实验报告.doc
  19. python从属关系编号_笨办法学Python 习题 42: 对象、类、以及从属关系
  20. C++11中类数据成员初始化方法详解

热门文章

  1. 数据集_汇总 | SLAM、重建、语义相关数据集大全
  2. 类的继承与派生的基础学习
  3. 《用户体验要素——以用户为中心的产品设计》整理
  4. Junit第一次使用
  5. Android IntentService的使用和源代码分析
  6. 湖南附中模拟day1 瞭望塔
  7. 寒假CF1 C-龟龟
  8. SPD中赋值连接字段
  9. 精品:Spline导数及曲率计算(判断曲线的弯曲程度)
  10. 如何导出微信的小视频