Python+Request【第八章】参数化测试
ParamUnittest
- 参数化测试引入 paramunittest
安装ParamUnittest
pip install paramunittest
查看源码示例
https://github.com/rik0/ParamUnittest
在这可以看到,这个是支持元祖传参进行参数化,那我们接下来直接来实验一下
使用元祖传参
# -*- coding: utf-8 -*-
# @Time : 2021/12/22 13:22
# @Author : Limusen
# @File : unitest_paramtest_demo_12
""" 安装 pip install paramunittest """
import unittest
import paramunittest
# 元祖举例
@paramunittest.parametrized(
(10, 20, 30), (30, 40, 70), (70, 80, 150)
)
class ParamUnittestDemo12(paramunittest.ParametrizedTestCase):
def setParameters(self, numa, numb, numc):
self.a = numa
self.b = numb
self.c = numc
def test_add_case(self):
print("%s + %s ?= %s" % (self.a, self.b, self.c))
self.assertEqual(self.a + self.b, self.c)
if __name__ == '__main__':
unittest.main(verbosity=2)
使用字典传参
# -*- coding: utf-8 -*-
# @Time : 2021/12/22 13:22
# @Author : Limusen
# @File : unitest_paramtest_demo_12
""" 安装 pip install paramunittest """
import unittest
import paramunittest
# 字典举例
@paramunittest.parametrized(
{
"numa": 20, "numb": 30, "numc": 50},
{
"numa": 40, "numb": 60, "numc": 100},
{
"numa": 80, "numb": 110, "numc": 190}
)
class PUnitTestDemo(paramunittest.ParametrizedTestCase): # unittest.TestCase
def setParameters(self, numa, numb, numc):
self.a = numa
self.b = numb
self.c = numc
def test_add_case(self):
print("%d + %d ?= %d" % (self.a, self.b, self.c))
self.assertEqual(self.a + self.b, self.c)
if __name__ == '__main__':
unittest.main(verbosity=2)
从现在这个情况看来,这个支持列表传参,刚好我们封装的测试数据读取也是一个列表,那我们试一下能不能直接使用我们封装好的数据来进行参数化
使用excel数据类型测试
示例代码
# -*- coding: utf-8 -*-
# @Time : 2021/12/22 13:22
# @Author : Limusen
# @File : unitest_paramtest_demo_12
""" 安装 pip install paramunittest """
import unittest
import paramunittest
cast_info = [
{
"case_id": "api_case_01", "case_step": ".....1"},
{
"case_id": "api_case_02", "case_step": ".....2"},
{
"case_id": "api_case_03", "case_step": ".....3"}
]
# 整合测试用例
@paramunittest.parametrized(
*cast_info
)
class PUnitTestDemo(paramunittest.ParametrizedTestCase): # unittest.TestCase
def setParameters(self, case_id, case_step):
self.case_id = case_id
self.case_step = case_step
def test_add_case(self):
print("case_id: %s ,case_step: %s " % (self.case_id, self.case_step))
assert True
if __name__ == '__main__':
unittest.main(verbosity=2)
代码图示
封装测试用例类
新建测试用例类,执行读取excel的数据
示例代码
# -*- coding: utf-8 -*-
# @Time : 2021/12/22 13:47
# @Author : Limusen
# @File : test_api_case
import unittest
import paramunittest
from common.testcase_data_utils import TestCaseDataUtils
from common.request_utils import RequestsUtils
testcase_data_lists = TestCaseDataUtils().convert_data_info_list()
@paramunittest.parametrized(
*testcase_data_lists
)
class TestApiCase(paramunittest.ParametrizedTestCase):
def setParameters(self, case_id, case_step):
self.case_id = case_id
self.case_step = case_step
def test_api_case(self):
test_result = RequestsUtils().request_steps(self.case_step)
self.assertTrue(test_result["check_result"])
if __name__ == '__main__':
unittest.main(verbosity=2)
代码图示
优化excel是否执行用例
将excel是否执行用例改成否
在数据转换的时候判断如果为是的话执行,为否的话不执行
示例代码
# -*- coding: utf-8 -*-
# @Time : 2021/12/9 13:42
# @Author : Limusen
# @File : testcase_data_utils
import os
from common.excel_utils import ExcelUtils
current = os.path.dirname(os.path.abspath(__file__))
excel_file_path = os.path.join(current, '..', 'testcase_data', 'testcase_infos.xlsx')
excel_sheet_name = "Sheet1"
class TestCaseDataUtils:
def __init__(self):
self.ex = ExcelUtils(excel_file_path=excel_file_path,
sheet_name=excel_sheet_name)
def convert_data_info_dict(self):
""" 将测试数据转换成字典 :param testcase_info: :return: """
test_case_dict = {
}
for testcase in self.ex.get_all_excel_data():
if testcase["用例执行"] == "是": # 新增代码
test_case_dict.setdefault(testcase['测试用例编号'], []).append(testcase)
return test_case_dict
def convert_data_info_list(self):
test_case_list = []
for key, value in self.convert_data_info_dict().items():
type_dict = {
}
type_dict["case_id"] = key
type_dict["case_step"] = value
test_case_list.append(type_dict)
return test_case_list
if __name__ == '__main__':
print(TestCaseDataUtils().convert_data_info_list())
总结
本章节主要说到的引入了参数化设置,方便我们读取测试用例并执行,封装测试类,我们封装好了就不需要修改了,只要修改excel里面的测试数据,后期会继续优化测试数据类.
代码
地址 : https://gitee.com/todayisgoodday/PythonRequest
博客园地址
https://www.cnblogs.com/yushengaqingzhijiao/category/2076022.html
文章评论