Python unittest 之二: 测试类的执行

大家看一段下面的代码

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

class Widget:
 def __init__(self,msg):
 # print(msg)
 self._size = 50,50

 def size(self):
 return self._size

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

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

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

记录在属性 _size 中

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

resize改变控件的长和宽。

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

import unittest

class Widget:
    def __init__(self,msg):
        # print(msg)
        self._size = 50,50

    def size(self):
        return self._size

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

class 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.000s

OK

结果是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.000s

OK

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

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

执行测试结果就会报错

D:\gsync\workspace\sq\python\samples\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
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.000s

FAILED (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买的,无偿分享

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码小怡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值