Python使用unittest測試框架進行自動化測試
阿新 • • 發佈:2019-02-15
目錄
背景
APP端隨著版本升級,對應的服務端介面也會增加或修改,為了驗證新版本是否影響老版本的介面邏輯和功能,可使用自動化測試進行老版本介面迴歸。
介面特點
經分析專案介面包含公共引數和可選引數兩部分:
- 公共引數 ,所有的介面都會傳遞的引數;
- 可選引數 ,不同介面會有自己獨有的引數;
測試指令碼設計
- 專案類 – MyProject() ,管理專案下所有介面方法;
- 測試用例類 – MyTestCase() ,管理介面方法對應的測試用例;
- 測試集 – suite() ,收集本次即將測試的用例(可按照用例新增順序執行)
- 主函式 ,採用HTMLTestRunner3
指令碼樣例
import unittest
import HTMLTestRunner3
class MyProject(object):
"""MyProject包含3條測試用例,擁有公共引數arg,以及可選引數*arg"""
def __init__(self, arg, *args):
super(MyProject, self).__init__()
self.arg = arg
def t_001_create_exam(self):
ret1 = self.arg + '1'
return ret1
def t_002_bind_exam(self):
ret2 = self.arg + '2'
return ret2
def t_003_upload_exam(self):
ret3 = self.arg + '3'
return ret3
class MyTestCase(unittest.TestCase):
"""MyTestCase繼承unittest.TestCase,3個測試用例需以test開頭"""
# 執行用例前執行,僅執行一次
@classmethod
def setUpClass(cls):
cls.param = 'test'
cls.param1 = '1'
cls.param2 = '2'
cls.param3 = '33' #改為3時test_003結果為pass
cls.myobj = MyProject(cls.param,
(cls.param1, cls.param2, cls.param3)
)
# 執行每個用例前執行
def setUp(self):
pass
# 執行每個用例後執行tearDown方法,恢復測試環境
def tearDown(self):
pass
def test_001(self):
ret = self.myobj.t_001_create_exam()
self.assertEqual(ret, self.param + self.param1)
def test_002(self):
ret = self.myobj.t_002_bind_exam()
self.assertEqual(ret, self.param + self.param2)
def test_003(self):
ret = self.myobj.t_003_upload_exam()
self.assertEqual(ret, self.param + self.param3)
# suite()函式收集待測試的用例
def suite():
suite = unittest.TestSuite()
suite.addTest(MyTestCase('test_001'))
suite.addTest(MyTestCase('test_002'))
suite.addTest(MyTestCase('test_003'))
return suite
if __name__ == '__main__':
file_path = 'TestReport.html'
with open(file_path, 'wb') as fp:
runner = HTMLTestRunner3.HTMLTestRunner(
stream=fp,
title='自動化測試報告',
description='迴歸測試',
verbosity=2
)
runner.run(suite())
指令碼執行
- 可在IDE執行指令碼,比如PyCharm, Sublime Text 3
- 可在命令列視窗執行,如下圖:
t_long_case.py為指令碼名稱