python unittest单元测试框架-1

Test Case、Test Suite、Test Runner、Test Fixture

  • Test Case:单个测试用例
  • Test Suite:测试组合。可以把多个测试用例集合在一起执行。
  • Test Runner:通过Test Runner的run()方法来执行test suite/test case,可以使用图形界面、文本界面,或返回一个特殊的值来表示测试执行的结果。
  • Test Fixture:测试用例环境的搭建和销毁。如果测试用例中需要访问数据库,可以在setUp中建立数据库连接,在tearDown中清除数据库产生的数据,并断开连接

1.单元测试

calculator.py

class Count:
    def __init__(self,a,b):
        self.a = a
        self.b = b
    def add(self):
        return self.a + self.b
    def sub(self):
        return self.a - self.b

test.py

from book.calculator import  Count
import unittest
class TestCount(unittest.TestCase):
    def setUp(self):
        print("test start")
    def test_add(self):
        j = Count(2,3)
        self.assertEqual(j.add(),5)
    def test_add2(self):
        j = Count(54,49)
        self.assertEqual(j.add(),103)
    def tearDown(self):
        print("test end")
if __name__=="__main__":
    #__name__是内置属性,使用__main__就是直接使用。
    #main()方法可以将一个单元测试模块变成可以直接运行的测试脚本,执行所有以test命令开头的方法
    unittest.main()

2.使用Test Suite组织测试用例,Test Runner运行

2.1基于1中calculator.py执行测试集

test.py

from calculator import  Count
import unittest
class TestCount(unittest.TestCase):
    def setUp(self):
        print("test start")
    def test_add(self):
        j = Count(2,3)
        self.assertEqual(j.add(),5)
        print("test_add执行完毕")
    def test_add2(self):
        j = Count(54,49)
        self.assertEqual(j.add(),103)
        print("test_add2执行完毕")
    def tearDown(self):
        print("test end")
if __name__=="__main__":
    #构造测试集
    suite = unittest.TestSuite()
    suite.addTest(TestCount("test_add2"))
    #执行测试集
    runner = unittest.TextTestRunner()
    runner.run(suite)
### 2.2编写新的计算类,并组织测试集 ### 2.3基于2.2,修改test.py,将测试加减的用例分离 ### 2.4基于2.2,如果每个类的初始化和回复一样,可以封装setUp和tearDown

test.py

from calculator import  Count
import unittest
class MyTest(unittest.TestCase):
    def setUp(self):
        print("test start")
    def tearDown(self):
        print("test end")
class TestAdd(MyTest):
    def test_add(self):
        j = Count(2,3)
        self.assertEqual(j.add(),5)
        print("test_add执行完毕")
    def test_add2(self):
        j = Count(54,49)
        self.assertEqual(j.add(),103)
        print("test_add2执行完毕")

class TestSub(MyTest):
    def test_sub(self):
        j = Count(4,1)
        self.assertEqual(j.sub(),3)
        print("test_sub执行完毕")
    def test_sub2(self):
        j = Count(5,9)
        self.assertEqual(j.sub(),-4)
        print("test_sub2执行完毕")

if __name__=="__main__":
    #构造测试集
    suite = unittest.TestSuite()
    suite.addTest(TestAdd("test_add2"))
    suite.addTest(TestSub("test_sub2"))
    #执行测试
    runner = unittest.TextTestRunner()
    runner.run(suite)

2.5基于2.3,修改test.py,将测试加减的用例分离到不同的脚本中

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 sub(self):
        return self.a - self.b

testadd.py

from calculator import  Count
import unittest
class TestAdd(unittest.TestCase):
    def setUp(self):
        print("test add start")
    def test_add(self):
        j = Count(2,3)
        self.assertEqual(j.add(),5)
        print("test_add执行完毕")
    def test_add2(self):
        j = Count(54,49)
        self.assertEqual(j.add(),103)
        print("test_add2执行完毕")
    def tearDown(self):
        print("test add end")
if __name__=="__main__":
    unittest.main()

testsub.py

from calculator import Count
import unittest
class TestSub(unittest.TestCase):
    def setUp(self):
        print("test sub start")
    def test_sub(self):
        j = Count(4,1)
        self.assertEqual(j.sub(),3)
        print("test_sub执行完毕")
    def test_sub2(self):
        j = Count(5,9)
        self.assertEqual(j.sub(),-4)
        print("test_sub2执行完毕")
    def tearDown(self):
        print("test sub end")
if __name__=="__main__":
    unittest.main()

runtest.py

import unittest
from testadd import TestAdd
from testsub import TestSub
suite = unittest.TestSuite()
suite.addTest(TestAdd("test_add"))
suite.addTest(TestAdd("test_add2"))
suite.addTest(TestSub("test_sub"))
suite.addTest(TestSub("test_sub2"))
if __name__=="__main__":
    runner = unittest.TextTestRunner()
    runner.run(suite)
posted on 2018-11-26 22:01  singleSpace  阅读(235)  评论(0编辑  收藏  举报