以下是对 unittest.TestCase 类的扩展,使其支持参数化把参数加进去。下面是详细的代码实现进程:
- class ExtendTestCaseParams(unittest.TestCase):
- #扩展 unittest.TestCase 类,使其支持自界说参数输入
-
- def __init__(self, method_name='runTest', canshu=None):
-
- super(ExtendTestCaseParams, self).__init__(method_name)
-
- self.canshu = canshu
-
- #静态参数化要领
-
- @staticmethod
-
- def parametrize(testcase_klass, default_name=None, canshu=None):
-
- """ Create a suite containing all tests taken from the given
-
- subclass, passing them the parameter 'canshu'
-
- """
-
- test_loader = unittest.TestLoader()
-
- testcase_names = test_loader.getTestCaseNames(testcase_klass)
-
- suite = unittest.TestSuite()
-
- if default_name != None:
-
- for casename in testcase_names:
-
- if casename == defName:
-
- suite.addTest(testcase_klass(casename, canshu=canshu))
-
- else:
-
- for casename in testcase_names:
-
- suite.addTest(testcase_klass(casename, canshu=canshu))
-
- return suite
这里,canshu 就是优化后加的自界说参数,参数范例可所以元组或列表。下面行使这个参数化类来改写之前的代码。
- class ApiTestSample(ExtendTestCaseParams):
-
- def setUp(self):
-
- pass
-
- def tearDown(self):
-
- pass
-
- def jiafa(self, input01, input02):
-
- result = input01 + input02
-
- return result
-
- def test_jiafa(self):
-
- input_01 = self.param[0]
-
- input_02 = self.param[1]
-
- expectedResult = self.param[2]
-
- result = self.sub(input_01, input_02)
-
- print(result)
-
- self.assertEqual(result, expectedResult)
-
- if __name__=='__main__':
-
- testData = [
-
- (10, 9, 19),
-
- (12, 13, 25),
-
- (12, 10, 22),
-
- (2, 4, 6)
-
- ]
-
- suite = unittest.TestSuite()
-
- for i in testData:
-
- suite.addTest(ExtendTestCaseParams.parametrize(ApiTestSample, 'test_jiafa', canshu=i))
-
- runner = unittest.TextTestRunner()
-
- runner.run(suite)
执行功效如下:
- ....
-
- ## 19
-
- 25
-
- Ran 4 tests in 0.000s
-
- 22
-
- 6
-
- OK
通过对 unittest 框架优化,我们实现了 unittest 框架的参数化,这样就可以用于接口测试了。固然我们实现了参数化,可是测试功效的展示不足直观,这个时辰必要一个可视化页面来直接表现测试功效。所幸的是,python 中有专门展示测试功效的框架:HTMLTestRunner。该框架可以将测试功效转换为 HTML 页面,而且该框架可以和unittest 框架美满的团结起来。接下来我们报告一下 HTMLTestRunner 框架的行使。
3、测试功效可视化 (编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|