unittest--python单元测试模块(二)

unittest–python单元测试–用例执行顺序
上一次我们说到使用unittest进行简单的单元测试,其中有这样一个问题,当针对一个函数或者接口的测试用例有多条时,执行的先后问题,在某些有数据依赖关系的场景下,case的执行顺序显得尤为重要。

默认的case执行顺序

当使用unittest.main()方法执行时,默认会按照ASCII码的顺序加载测试用例,先后顺序为0-9,A-Z,a-z

下面举例说明,将上一节中的calculator.py再次定义如下:

# -*- coding: utf-8 -*-


class Count:
    def __init__(self, a, b):
        self.a = int(a)
        self.b = int(b)

    def add(self):
        return self.a + self.b

    def sub(self):
        return self.a - self.b

重新编写一个针对add和sub函数的测试文件如下:

test.py
# -*- coding: utf-8 -*-
import unittest
from calculator import Count


class TestSub(unittest.TestCase):
    def setUp(self):
        print "set up test sub---"

    def tearDown(self):
        print "tear down test sub---"

    def test_subB(self):
        c = Count(1, 2)
        print "test_subB"
        self.assertEqual(c.sub(), -1)

    def test_subA(self):
        c = Count(-1, 2)
        print "test_subA"
        self.assertEqual(c.sub(), -3)


class TestAdd(unittest.TestCase):
    def setUp(self):
        """set up"""
        print "set up test add...."

    def tearDown(self):
        """tear down"""
        print "tear down test add...."

    def test_add2(self):
        c = Count(1, 2)
        print "test_add2"
        self.assertEqual(c.add(), 3)

    def test_add1(self):
        c = Count(-1, 2)
        print "test_add1"
        self.assertEqual(c.add(), 1)


if __name__ == '__main__':
    unittest.main()

执行结果如下图所示:
执行结果-1
从结果我们可以看到,虽然TestSub类先于TestAdd类定义,但是根据默认的执行顺序,A(TestAdd)在S(TestSub)之前,而在每个测试类中同样按照上面提到的顺序进排序执行,所以最后几个case的执行顺序是test_add1,test_add2,test_subA,test_subB。

调整case执行顺序

有时因为业务需要或者因为依赖关系需要某些特定case先于其他case执行,这时我们就需要按照自己的需要设置case的执行顺序,这里介绍两种方法

1. 通过合理设置case命名调整顺序

因为默认按照0-9A-Za-z的顺序执行测试用例,因此最容易想到的就是通过设置case的名字来调整用例执行顺序,比如test_add_1, test_add2…,该种方式比较简单,在此不做过多介绍

2. 通过suite控制用例执行顺序

TestSuite的实例可以添加一组测试用例,测试用例会按照添加的顺序依次执行,具体实例如下,前半部分代码与test.py相同,main函数部分修改如下:

if __name__ == '__main__':
    suite = unittest.TestSuite()
    suite.addTests([TestSub("test_subB"), TestSub("test_subA")])
    suite.addTest(TestAdd("test_add2"))
    suite.addTest(TestAdd("test_add1"))
    runner = unittest.TextTestRunner()
    runner.run(suite)

通过suite依次添加用例test_subB,test_subA,test_add2,test_add1,执行结果如下:
suite控制用例执行顺序
可以看出用例是按照suite添加的顺序依次执行,由此可以起到控制用例执行顺序的作用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值