大家看一段下面的代码

我们写的程序中有如下的一个 类 Widget, 代表了界面的一个控件,这是我们要测试的类

class Widget:def __init__(self,msg):# print(msg)self._size = 50,50def size(self):return self._sizedef resize(self,w,h):self._size = w, h

为了方便理解,这个类做的很简单,

初始化方法里面定义了控件的大小是50像素宽,50像素高。

记录在属性 _size 中

size方法返回该控件的长和宽。

resize改变控件的长和宽。

现在,我们使用unittest来测试它,测试代码如下所示

import unittestclass Widget:def __init__(self,msg):# print(msg)self._size = 50,50def size(self):return self._sizedef resize(self,w,h):self._size = w, hclass WidgetTestCase(unittest.TestCase):def setUp(self):print('in setUp')self.widget = Widget('The widget')def tearDown(self):print('in tearDown')def test_1(self):print('in test_1')self.assertEqual(self.widget.size(), (50,50),'incorrect default size')def test_2(self):print('in test_2')self.widget.resize(100,150)self.assertEqual(self.widget.size(), (100,150),'wrong size after resize')

现在来分析一下代码,我们导入unittest库

import unittest

定义了一个继承自unittest.TestCase 的测试类WidgetTestCase

class WidgetTestCase(unittest.TestCase)

注意,这个类名是可以随便起的,只要继承自WidgetTestCase即可。

里面有setup, teardown 两个方法,和两个测试方法test_1 , test_2

注意代表测试方法一定要以test开头,不然不会被认为是测试方法。

测试需要检查某个结果是否符合预期, 这个检查点 就是通过 TestCase方法的assert系列的函数实现的。

这里就是assertEqual, 判断前两个参数是否相等,如果相等测试通过,

如果不相等,测试不通过。显示的错误信息就是第3个参数。

这些assert系列的函数哪里来的?对了,是父类WidgetTestCase里面的。

而 setup, teardown 这两个方法就是前面说过的 初始化环境和清除环境的方法,

这 setup 方法会在该类的每个测试方法执行前先执行

这 teardown 方法会在该类的每个测试方法执行后执行

注意是每个测试方法执行前后, 都会 执行一下 setup 和teardown

我们可以在终端里面执行该测试,执行命令如下

python -m unittest test1.py

执行结果如下

D:\ut>python -m unittest test1.py
in setUp
in test_1
in tearDown
.in setUp
in test_2
in tearDown
.
----------------------------------------------------------------------
Ran 2 tests in 0.000sOK

结果是OK 表示全部通过

看看上面的输出,发现执行次序是:

先setup
执行测试方法
最后 teardown

如果想看到更详细一些的输出信息,我们可以加上参数 -v

python -m unittest test1.py -v

这样会显示当前正在执行的是哪个测试方法,和每个测试方法的执行结果

D:\ut>python -m unittest test1.py -v
test_1 (test1.WidgetTestCase) ... in setUp
in test_1
in tearDown
ok
test_2 (test1.WidgetTestCase) ... in setUp
in test_2
in tearDown
ok----------------------------------------------------------------------
Ran 2 tests in 0.000sOK

如果我们修改一下,故意让一个验证出错,比如

def resize(self,w,h):self._size = w, h+6

执行测试结果就会报错

D:\gsync\workspace\sq\python\samples\ut>python -m unittest test1.py -vtest_1 (test1.WidgetTestCase) ... in setUp
in test_1
in tearDown
ok
test_2 (test1.WidgetTestCase) ... in setUp
in test_2
in tearDown
FAIL======================================================================
FAIL: test_2 (test1.WidgetTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):File "D:\gsync\workspace\sq\python\samples\ut\test1.py", line 33, in test_2'wrong size after resize')
AssertionError: Tuples differ: (100, 156) != (100, 150)First differing element 1:
156
150- (100, 156)
?         ^+ (100, 150)
?         ^: wrong size after resize----------------------------------------------------------------------
Ran 2 tests in 0.000sFAILED (failures=1)

注意:只有setup成功,才会执行测试,如果setup失败,就不会执行测试方法了。

因为unittest框架会认为初识化失败了。

什么就被认为 setup失败?就是setup里面抛出了异常。

但是要注意的是: 执行一个测试方法前初始化失败了,

只是这个测试方法不执行了。

但是还是会执行下一个测试方法,当然也包括再次执行初始化方法。

再强调一遍,测试方法必须以test开头,如果不是, 比如tes,就不会被执行

执行次序

测试方法的执行次序是由方法名称的 字符串排序决定的,通常是ascii顺序

本例中就是:test_1 先执行,test_2 后执行

如果test_1 改为test_case3 ,

就会test_2 先执行

最后感谢每一个认真阅读我文章的人,下面这个网盘链接也是我费了几天时间整理的非常全面的,希望也能帮助到有需要的你!

这些资料,对于想转行做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助……

如果你不想一个人野蛮生长,找不到系统的资料,问题得不到帮助,坚持几天便放弃的感受的话,可以点击下方小卡片加入我们群,大家可以一起讨论交流,里面会有各种软件测试资料和技术交流。

敲字不易,如果此文章对你有帮助的话,点个赞收个藏来个关注,给作者一个鼓励。也方便你下次能够快速查找。

自学推荐B站视频:

零基础转行软件测试:38天自学完软件测试,拿到了字节的测试岗offer,堪称B站最好的视频!

自动化测试进阶:已上岸华为,涨薪20K,2022最适合自学的python自动化测试教程,自己花16800买的,无偿分享

Python unittest 之二: 测试类的执行相关推荐

  1. Python学习日记(二十三) 类命名空间和组合

    类命名空间 在一个类中它的函数(方法)属于动态属性,直接定义的变量属于静态属性 首先先定义一个类,并在这个类里面加入静态变量.属性等然后将一个对象实例化 class Fighter: #定义一个战机的 ...

  2. python appium自动化测试框架unittest_Appium基于Python unittest自动化测试 自动化测试框架 -- PO并生成html测试报告...

    基于python单元测试框架unittest完成appium自动化测试,生成基于html可视化测试报告 代码示例: #利用unittest并生成测试报告 class Appium_test(unitt ...

  3. Python unittest –单元测试示例

    Today we will learn about python unittest and look through python unit test example programs. In pre ...

  4. (python)Day9丨测试代码

    测试函数 先写下要测试的代码: name_function.py def get_formatted_name(first,last):"""Generate a nea ...

  5. python的unittest测试类代码实例

    nittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果.今天笔者就 ...

  6. python装饰器执行顺序_python unittest单元测试框架-3用例执行顺序、多级目录、装饰器、fixtures...

    1.用例执行顺序 unittest默认会按照ascii码的顺序,依次执行.类名--方法名排序,使用discover也是默认排序.如果不想使用默认排序,就使用testsuite测试集的方式. impor ...

  7. python+pytest接口自动化之测试函数、测试类/测试方法的封装

    前言 今天呢,笔者想和大家聊聊python+pytest接口自动化中将代码进行封装,只有将测试代码进行封装,才能被测试框架识别执行. 例如单个接口的请求代码如下: import requestshea ...

  8. 十年测试经验的阿里p10讲解python初阶:函数和模块 python全栈自动化测试系类4-2

    还是老规矩,大家可能对凡哥不是很了解这里先和大家来个自我介绍 凡哥我已经有着十二年互联网自动化测试和测试开发工程师,拥有丰富的自动化测试平台及测试开发经验,擅长接口测试.Python自动化全栈,测试开 ...

  9. 测试如何学python_学习Python:如何测试函数和类,快学,与

    编写代码离不开写测试,只有通过测试才知道代码的逻辑有没有问题,健壮性好不好等,测试让你深信,即便有越来越多的人使用你的程序,它也能一如既往正确地工作. 1.测试函数 Python标准库中的模块unit ...

最新文章

  1. python项目主界面_python项目案例
  2. 地图与定位之大头针视图
  3. c#图片base64去转义字符_C# 将图片转成Base64字符串,再将字符串转成图片,然后将图片存储到服务器文件夹中,求代码。感激不尽...
  4. mysql dba系统学习(16)mysql的mysqldump备份
  5. 《需求工程——软件建模与分析》阅读笔记二
  6. 第二篇: 在虚拟主机上使用ASP.NET Ajax
  7. 深入理解SpringBoot (4)
  8. 龙芯笔记本可能以闹剧收场
  9. Python获取本机所有IP地址
  10. 的正确使用_如何正确使用隔离霜
  11. Redis的安装和使用之二------phpredis与phpRedisAdmin
  12. Maven之dependencyManagement
  13. 收费最低的云存储_营业收费系统|自来水管理系统|自来水公司收费管理系统|手机移动抄表|网上营业厅|短信服务平台...
  14. C# Spire.Pdf 无限制 使用教程
  15. 动手学深度学习(二十七)——微调(fine turning)
  16. 索尼a6000拍月亮_如何给月亮拍好照片
  17. 建设内链要注意的事项
  18. switch vba_VBA switch
  19. 新手入门必懂:关于西瓜视频广告,你不可不知的基础知识
  20. html表头纵向,实现纵向表头的table

热门文章

  1. Linux下cppcheck静态检测工具
  2. 国产操作系统--奇思妙想
  3. 广州公布“中国制造2025”实施方案
  4. 【遇见大咖】测试界:如何定位自己的角色扮演?
  5. 世界杯来了!谁能夺冠?让我们用数据说话
  6. 用html制作百度地图,canvas实现百度地图个性化底图绘制
  7. TMS320F280049C 学习笔记20 可配置逻辑块 (CLB) 例程
  8. Mapgis如何把坐标点按实际投影到地质图上
  9. 人过五十再有精力,也不要招惹这3个“荒唐事”,余生越混越差
  10. 韩钰带你一起走进电商世界之淘宝店铺设计尺寸规范