解决读取用例数据自动生成测试方法,只能读取一级目录的问题。目前支持data目录存在多级,只要以test_开头的用例数据(excel/yaml)都能被读取到。如test_demo.yaml文件处于data/projects/project目录下,也可以读取到

This commit is contained in:
floraachy
2023-05-17 17:04:49 +08:00
parent 1f06223170
commit a577a19918
2 changed files with 116 additions and 51 deletions
+53 -51
View File
@@ -14,74 +14,73 @@ from config.global_vars import CaseFileType
from config.settings import CASE_FILE_TYPE
from string import Template
from loguru import logger
# 定义生成的测试用例的模板
with open(file=os.path.join(CONF_DIR, "case_template.txt"), mode="r", encoding="utf-8") as f:
case_template = f.read()
from common_utils.files_handle import get_files
def get_case_data():
"""
根据配置文件,从指定类型文件中读取用例数据,并调用生成用例文件方法,生成用例文件
"""
cases = []
# 判断配置文件里面CASE_DATA_TYPE,判断用例数据是从excel还是yaml文件中读取
# 从excel中读取用例数据
if CASE_FILE_TYPE == CaseFileType.EXCEL.value:
cases = []
# 在用例数据data_path目录中寻找后缀是xlsx的文件
for file in [excel for excel in os.listdir(DATA_DIR) if os.path.splitext(excel)[1] in [".xlsx", "xls"]]:
# 判断只有以test_开头的excel才生成测试用例py文件
if file.startswith("test_"):
# 读取excel文件中的用例数据,存储到data中
data = ReadExcel(os.path.join(DATA_DIR, file)).read()
# 将用例数据的名称作为测试用例文件名称
func_name = os.path.splitext(file)[0]
# 测试用例test_demo.py的类名是TestDemo
class_name = func_name.split("_")[0].title() + func_name.split("_")[1].title()
# 调用gen_case方法生成测试用例test_demo.py
gen_case_file(func_name, data, class_name)
# 将excel中读取的用例数据放到cases列表中
cases.extend(data)
# 在用例数据"DATA_DIR"目录中寻找后缀是xlsx, xls的文件
files = get_files(target=DATA_DIR, start="test_", end=".xlsx") + get_files(target=DATA_DIR, start="test_",
end=".xls")
for file in files:
# 这里file文件绝对路径,filename才是文件名称
filename = os.path.basename(file)
# 读取excel文件中的用例数据,存储到data中
data = ReadExcel(file).read()
# 将用例数据的名称作为测试用例文件名称
func_name = os.path.splitext(filename)[0]
# 测试用例test_demo.py的类名是TestDemo
class_name = func_name.split("_")[0].title() + func_name.split("_")[1].title()
# 调用gen_case方法生成测试用例test_demo.py
gen_case_file(func_name, data, class_name)
# 将excel中读取的用例数据放到cases列表中
cases.extend(data)
logger.debug(f"从excel中读取到的用例数据是:{cases}")
return cases
# 从yaml中读取用例数据
elif CASE_FILE_TYPE == CaseFileType.YAML.value:
cases = []
# 在用例数据data_path目录中寻找后缀是yaml/yml的文件
for file in [yaml for yaml in os.listdir(DATA_DIR) if
os.path.splitext(yaml)[1] in [".yaml", ".yml"]]:
# 判断只有以test_开头的yaml才生成测试用例py文件
if file.startswith("test_"):
# 读取yaml/yml文件中的用例数据,存储到data中
data = HandleYaml(os.path.join(DATA_DIR, file)).read_yaml
# 将用例数据的名称作为测试用例文件名称
func_name = os.path.splitext(file)[0]
# 测试用例test_demo.py的类名是TestDemo
class_name = func_name.split("_")[0].title() + func_name.split("_")[1].title()
# 调用gen_case方法生成测试用例test_demo.py
gen_case_file(func_name, data, class_name)
# 将excel中读取的用例数据放到cases列表中
cases.extend(data)
# 在用例数据"DATA_DIR"目录中寻找后缀是yaml, yml的文件
files = get_files(target=DATA_DIR, start="test_", end=".yaml") + get_files(target=DATA_DIR, start="test_",
end=".yml")
for file in files:
filename = os.path.basename(file)
# 读取yaml/yml文件中的用例数据,存储到data中
data = HandleYaml(file).read_yaml
# 将用例数据的名称作为测试用例文件名称
func_name = os.path.splitext(filename)[0]
# 测试用例test_demo.py的类名是TestDemo
class_name = func_name.split("_")[0].title() + func_name.split("_")[1].title()
# 调用gen_case方法生成测试用例test_demo.py
gen_case_file(func_name, data, class_name)
# 将excel中读取的用例数据放到cases列表中
cases.extend(data)
logger.debug(f"从yaml中读取到的用例数据是:{cases}")
return cases
else:
# 从excel以及yaml/yml文件中读取用例数据
cases = []
for file in [excel for excel in os.listdir(DATA_DIR) if
os.path.splitext(excel)[1] in [".yaml", ".yml", ".xlsx", "xls"]]:
# 判断只有以test_开头的yaml才生成测试用例py文件
if file.startswith("test_"):
if os.path.splitext(file)[1] == ".xlsx":
data = ReadExcel(os.path.join(DATA_DIR, file)).read()
func_name = os.path.splitext(file)[0]
cases.extend(data)
else:
data = HandleYaml(os.path.join(DATA_DIR, file)).read_yaml
func_name = os.path.splitext(file)[0]
cases.extend(data)
# 在用例数据"DATA_DIR"目录中寻找后缀是xlsx,xls, yaml, yml文件
files = get_files(target=DATA_DIR, start="test_", end=".xlsx") + get_files(target=DATA_DIR, start="test_",
end=".xls") + get_files(
target=DATA_DIR, start="test_", end=".yaml") + get_files(target=DATA_DIR, start="test_",
end=".yml")
for file in files:
filename = os.path.basename(file)
if os.path.splitext(file)[1] == ".xlsx" or os.path.splitext(file)[1] == ".xls":
data = ReadExcel(file).read()
func_name = os.path.splitext(filename)[0]
cases.extend(data)
else:
data = HandleYaml(file).read_yaml
func_name = os.path.splitext(filename)[0]
cases.extend(data)
class_name = func_name.split("_")[0].title() + func_name.split("_")[1].title()
gen_case_file(func_name, data, class_name)
class_name = func_name.split("_")[0].title() + func_name.split("_")[1].title()
gen_case_file(func_name, data, class_name)
logger.debug(f"从excel以及yaml中读取到的用例数据是:{cases}")
return cases
@@ -96,6 +95,9 @@ def gen_case_file(func_name, case_data, class_name):
"""
string.Template是将一个string设置为模板,通过替换变量的方法,最终得到想要的string。
"""
# 定义生成的测试用例的模板
with open(file=os.path.join(CONF_DIR, "case_template.txt"), mode="r", encoding="utf-8") as f:
case_template = f.read()
my_case = Template(case_template).safe_substitute({"case_data": case_data,
"func_title": func_name,
"class_title": class_name})