测试用例封装(根据pytest规则)
1、目的
(1)需要一个py文件(以test_开头)
(2)需要一个pytest的类(以Test开头)
(3)需要pytest用例(以test_开头)
(4)能通过数据驱动读取yaml测试用例
(5)通过数据驱动获取请求四要素并发送请求
2、在 pytest框架 的基础上去将测试用例封装起来
第一步:首先在testcase目录下建立test_all_case.py文件(对应目的中的(1))
第二步:创建一个TestAllCase类(对应目的中的(2))
class TestAllCase:
pass
第三步:通过yaml文件创建用例(对应目的中的(3))
# 获取testcase的路径
testcase_path = Path(__file__).parent
# 获取testcase路径下的所有yaml文件列表
yaml_case_list = testcase_path.glob("**/*.yaml")
# 通过每个yaml文件循环生成以test_开头的用例,并加入到TestAllCase类下
for yaml_path in yaml_case_list:
# 通过反射,重命名函数名,并加载到TestAllCase类下
setattr(TestAllCase, "test_"+yaml_path.stem, create_testcase(yaml_path))
第四步:在第三步中需要用到create_testcase()函数(对应目的的(4、5))
def create_testcase(yaml_path):
@pytest.mark.parametrize("caseinfo", read_testcase_yaml(yaml_path))
def func(self, caseinfo):
# **new_caseinfo.request解包request字典,变成url="", method=""。。等
RequestsUtil().send_all_requests(**caseinfo.request)
return func
最终代码如下:
class TestAllCase:
pass
# 通过yaml文件创建用例(testcase下有多少个yaml文件就创建多少个用例)
def create_testcase(yaml_path):
@pytest.mark.parametrize("caseinfo", read_testcase_yaml(yaml_path))
def func(self, caseinfo):
# 发送请求四要素,**new_caseinfo.request解包request字典,变成url="", method=""。。等
RequestsUtil().send_all_requests(**caseinfo.request)
return func
# 获取testcase的路径
testcase_path = Path(__file__).parent
# 获取testcase路径下的所有yaml文件列表
yaml_case_list = testcase_path.glob("**/*.yaml")
# 通过每个yaml文件循环生成以test_开头的用例,并加入到TestAllCase类下
for yaml_path in yaml_case_list:
# 通过反射,重命名函数名,并加载到TestAllCase类下
setattr(TestAllCase, "test_"+yaml_path.stem, create_testcase(yaml_path))