Python接口测试自动化实战及代码示例:含get、post等方法( 二 )


以下是对 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 = https://www.isolves.com/it/cxkf/yy/Python/2019-07-17/[
(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 框架的使用 。

Python接口测试自动化实战及代码示例:含get、post等方法

文章插图
 
3、测试结果可视化
【Python接口测试自动化实战及代码示例:含get、post等方法】HTMLTestRunner 框架可用来生成可视化测试报告,并能很好的与 unittest 框架结合使用,接下来我们以一段代码来展示一下 HTMLTestRunner 的使用 。
if __name__=='__main__':
from HTMLTestRunner import HTMLTestRunner
testData = https://www.isolves.com/it/cxkf/yy/Python/2019-07-17/[
(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))
currentTime = time.strftime("%Y-%m-%d %H_%M_%S")
result_path = './test_results'
if not os.path.exists(path):
os.makedirs(path)
report_path = result_path + '/' + currentTime + "_report.html"
reportTitle = '测试报告'
desc = u'测试报告详情'
with open(report_path, 'wd') as f:
runner = HTMLTestRunner(stream=f, title=reportTitle, description=desc)
runner.run(suite)
测试结果如下:
下面详细讲解一下 html 报告的生成代码:
runner = HTMLTestRunner(stream=fp, title=reportTitle, description=desc)
HTMLTestRunner 中的 stream 表示输入流,这里我们将文件描述符传递给 stream,title 参数表示要输出的测试报告主题名称,description 参数是对测试报告的描述 。在使用 HTMLTestRunner 时,有几点需要注意:
1)HTMLTestRunner 模块非 Python 自带库,需要到 HTMLTestRunner 的官网下载
该安装包;
2)官网的 HTMLTestRunner 模块仅支持 Python 2.x 版本,如果要在 Python 3.x中,需要修改部分代码,修改的代码部分请自行上网搜索;
如果需要生成 xml 格式,只需将上面代码中的
runner = HTMLTestRunner(stream=fp, title=reportTitle, description=desc)
runner.run(suite)


推荐阅读