unittest單元測試框架總結

(一)unittest簡介

    unittest單元測試框架不僅可以適用於單元測試,還可以適用WEB自動化測試用例的開發與執行,該測試框架可組織執行測試用例,並且提供了豐富的斷言方法,判斷測試用例是否通過,最終生成測試結果。

參考:https://www.cnblogs.com/yufeihlf/p/5707929.html#test0

(二)代碼演示

1.Calculator.py

class Calculator:
    def divide(self,x,y):
        return x / y

2.person.txt

user1|pwd1
user2|pwd2
user3|pwd3
user4|pwd4
user5|pwd5

3.TestCalculator1.py

import unittest
from unit.Calculator import Calculator
class TestCalculator(unittest.TestCase):
    @classmethod
    def setUpClass(cls) -> None:
        print("===先執行===\n")

    @classmethod
    def tearDownClass(cls) -> None:
        print("===後執行===")
    def testDivide01(self):
        cal = Calculator()
        result = cal.divide(10, 2)
        self.assertEqual(result, 5)
        print("testDivide01.......")

    def testDivide02(self):
        cal = Calculator()
        result = cal.divide(20, 0.5)
        self.assertEqual(result, 40)
        print("testDivide02.......")
if __name__ == '__main__':
    unittest.main()

4.TestCalculator2.py

import unittest

from unit.Calculator import Calculator
class TestCalculator(unittest.TestCase):
    def setUp(self) -> None:
        print("....start....")
    def tearDown(self) -> None:
        print("....end....")
    def testDivide01(self):
        cal = Calculator()
        result = cal.divide(10, 2)
        self.assertEqual(result, 5)
        print("testDivide01.......")

    def testDivide02(self):
        cal = Calculator()
        result = cal.divide(20, 0.5)
        self.assertEqual(result, 40)
        print("testDivide02.......")

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

5.TestCalculator3.py

import unittest

from unit.Calculator import Calculator
class TestCalculator(unittest.TestCase):
    def setUp(self):
        print("....start....")
    def tearDown(self):
        print("....end....")
    def testDivide01(self):
        cal = Calculator()
        result = cal.divide(10, 2)
        self.assertEqual(result, 5)
        print("testDivide01.......")

    def testDivide02(self):
        cal = Calculator()
        result = cal.divide(20, 0.5)
        self.assertEqual(result, 40)
        print("testDivide02.......")

    # def testDivide03(self):
    #     cal = Calculator()
    #     result = cal.divide(20, 0.5)
    #     self.assertEqual(result, 10)
if __name__ == '__main__':
    unittest.main()

6.TestCalculator4.py

import unittest

from unit.Calculator import Calculator
class TestCalculator(unittest.TestCase):
    def setUp(self):
        print("start....")
    def tearDown(self):
        print("end....")
    def testDivide01(self):
        cal = Calculator()
        result = cal.divide(10, 2)
        self.assertEqual(result, 5)
        print("testDivide01.......")

    def testDivide02(self):
        cal = Calculator()
        result = cal.divide(20, 0.5)
        self.assertEqual(result, 40)
        print("testDivide02.......")

    #斷言的使用
    def testDivide03(self):
        cal = Calculator()
        result = cal.divide(20, 0.5)
        self.assertEqual(result, 10)
if __name__ == '__main__':
    unittest.main()

7.TestCalculator5.py

import unittest

from ddt import data, ddt, unpack, file_data


def testReadFile():
    params = []
    file = open('person.txt', encoding="utf8")
    for line in file.readlines():
        params.append(line.split("|"))
    # print(params)
    return params

@ddt
class TestCalculator(unittest.TestCase):
    @data(1,2,3,4,5,6)
    def testDivide01(self,arg):
       print("打印結果= "+str(arg))

    @data((1, 2), (3, 4))
    @unpack
    def test_tuple(self, value1, value2):
        print(value1, value2)
        self.assertEqual(value2, value1 + 1)

    @data([1, 2], [2, 3])
    @unpack
    def test_list(self, value1, value2):
        print(value1, value2)
        self.assertEqual(value2, value1 + 1)

    @data({'value1': 1, 'value2': 2}, {'value1': 1, 'value2': 2})
    @unpack
    def test_dict(self, value1, value2):
        print(value1, value2)
        self.assertEqual(value2, value1 + 1)


    @data(*testReadFile())
    @unpack
    def test_file(self, value1, value2):
        print(value1, value2)

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

8.TestCalculator6.py

#coding :utf-8
import unittest

from unit.Calculator import Calculator
# https://github.com/TesterlifeRaymond/BeautifulReport
# 測試報告--HTMLTestRunner、BeautifulReport可視化報告
class TestCalculator(unittest.TestCase):
    def setUp(self) -> None:
        print("start....")
    def tearDown(self) -> None:
        print("end....")
    def testDivide01(self):
        cal = Calculator()
        result = cal.divide(10, 2)
        self.assertEqual(result, 5)
        print("testDivide01.......")

    @unittest.skip("屏蔽這個測試用例")
    def testDivide02(self):
        cal = Calculator()
        result = cal.divide(20, 0.5)
        self.assertEqual(result, 40)
        print("testDivide02.......")

    @unittest.skipIf(1 < 2,"滿足條件就屏蔽測試用例")
    def testDivide03(self):
        cal = Calculator()
        result = cal.divide(20, 0.5)
        self.assertEqual(result, 40)
        print("testDivide03.......")

    @unittest.skipUnless(1 > 2, "不滿足條件就屏蔽測試用例")
    def testDivide04(self):
        cal = Calculator()
        result = cal.divide(20, 0.5)
        self.assertEqual(result, 40)
        print("testDivide04.......")

    @unittest.expectedFailure
    def testDivide05(self):
        self.assertEqual(1,2,msg="不相等")
        print("testDivide05.......")

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

9.TestCalculator7.py

#coding :utf-8
import unittest

from unit.Calculator import Calculator
class TestCalculator(unittest.TestCase):

    def testDivide01(self):
        print("testDivide01.......")

    def testDivide02(self):
        print("testDivide02.......")

    def testDivide03(self):
        print("testDivide03.......")

    def testDivide04(self):
        print("testDivide04.......")

    def testDivide05(self):
        print("testDivide05.......")

    #控制測試用例執行順序
    def testDivide06(self):
        suite = unittest.TestSuite()
        suite.addTest(TestCalculator('testDivide05'))
        suite.addTest(TestCalculator('testDivide04'))
        suite.addTest(TestCalculator('testDivide03'))
        suite.addTest(TestCalculator('testDivide02'))
        suite.addTest(TestCalculator('testDivide01'))
        runner = unittest.TextTestRunner()
        runner.run(suite)

    #批量添加測試用例
    def testDivide07(self):
        case = [TestCalculator('testDivide05'),TestCalculator('testDivide04')]
        suite = unittest.TestSuite()
        suite.addTests(case)
        runner = unittest.TextTestRunner()
        runner.run(suite)
if __name__ == '__main__':

     unittest.main()

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章