(三十九)Unittest单元测试框架之认识unittest-组织单元测试用例

随笔记录方便自己和同路人查阅。

#------------------------------------------------我是可耻的分割线-------------------------------------------

  学习selenium自动化之前,最好先学习HTML、CSS、JavaScript等知识,有助于理解定位及操作元素的原理。关于python和selenium安装请自行搜索别的资料,这里就不多做介绍了,所有例子均使用python3.6+selenium执行的。

#------------------------------------------------我是可耻的分割线-------------------------------------------

组织单元测试用例

当我们增加被测功能和相应的测试用例之后,再来看看unittest单元测试框架是如何扩展和组织新增的测试用例的。

新建文件calculator.py文件

#计算器
class Count():
    def __init__(self,a,b):
        self.a = int(a)
        self.b = int(b)

    #计算加法
    def add(self):
        return self.a + self.b

    # 计算减法
    def add(self):
        return self.a - self.b

因为对计算器(calculator)又新增了减法功能(sub),所以需要针对新功能编写测试用例,扩展后的test.py文件如下。

import unittest
from calculator import Count

class TestAdd(unittest.TestCase):
    def setUp(self):
        print('test add start')

    def test_add(self):
        j = Count(2,3)
        self.assertEqual(j.add(),5)

    def test_add2(self):
        j = Count(10,5)
        self.assertEqual(j.add(),15)

    def tearDown(self):
        print('test add end')


class TestSub(unittest.TestCase):
    def setUp(self):
        print('test sub start')

    def test_sub(self):
        j = Count(3, 2)
        self.assertEqual(j.sub(), 1)

    def test_sub2(self):
        j = Count(10,5)
        self.assertEqual(j.sub(), 5)

    def tearDown(self):
        print('test sub end')

#执行测试类的测试方法
if __name__ == '__main__':
    #构造测试集
    suite = unittest.TestSuite()
    suite.addTest(TestAdd("test_add"))
    suite.addTest(TestAdd("test_add2"))
    suite.addTest(TestSub("test_sub"))
    suite.addTest(TestSub("test_sub2"))

    #运行测试集合
    runner = unittest.TextTestRunner()
    runner.run(suite)

上例中创建了TestAdd()和TestSub()两个测试类,分别测试calculator.py文件中的add()和sub()两个功能。通过TestSuite类的AddTest()方法把不同测试类中的测试方法组装到测试套件中,执行结果如下:

通过测试结果可以看到,setUp()和tearDown()方法分别作用于每个测试用例的开始与结束。如果每个类中的setUp()和tearDown()所做的事情时一样的,那是不是可以封装一个自己的测试类呢?

import unittest
from calculator import Count

class MyTest(unittest.TestCase):
    def setUp(self):
        print('test case start')

    def tearDown(self):
        print('test case end')

class TestAdd(MyTest):

    def test_add(self):
        j = Count(2,3)
        self.assertEqual(j.add(),5)

    def test_add2(self):
        j = Count(10,5)
        self.assertEqual(j.add(),15)


class TestSub(MyTest):
    def setUp(self):
        print('test sub start')

    def test_sub(self):
        j = Count(3, 2)
        self.assertEqual(j.sub(), 1)

    def test_sub2(self):
        j = Count(10,5)
        self.assertEqual(j.sub(), 5)

    def tearDown(self):
        print('test sub end')

#执行测试类的测试方法
if __name__ == '__main__':
    unittest.main()

运行结果:

创建MyTest()类的好处显而易见,对于测试类和测试方法来说,应将注意力放在具体用例的编写上,无须关心setUp()和tearDown()所做的事情。不过,前提条件时setUp()和tearDown()所做的事情是每个用例都需要的。

猜你喜欢

转载自www.cnblogs.com/lirongyang/p/11505060.html