(一)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()