一、前言
最近做了点测试开发的工作,由于python属于脚本语言,易学好用,老大要求我们都要会python,所以终于给了自己一个机会,把一直想学的python学了点皮毛,正好测试同学有需求,需要将xmind解析成一条条的测试案例再调用测试平台接口将测试案例一键导入的测试平台,以前如果有上百个case就都要手动一条条的输入,很麻烦,这些就方便了。这次算是小试牛刀了。
高手觉得有更好的写法还请不吝赐教,写的过程中也遇到不少问题,好在都一一克服了。
二、安装xmindparser
我在iterm2上执行安装xmindparser不好使,但在pycharm里面却可以安装成功,我不知道为啥
iTerm2上安装
三、xmind文件内容
四、解析
# 模块名称(文件名为:parse_xmind.py)
import requests
import xmindparser
"""
@desc: 定义xmind中测试用例和质保平台对应的字段的类
@author: fanhuifang
@date: 2022-07-21
"""
class SaveTestCaseParam(object):
def __init__(self):
self.case_name = ""
self.test_case_level = ""
self.pre_condition = ""
self.step = ""
self.expected_results = ""
"""
@desc: 读取整个测试用例的根节点和对应的子节点
@author: fanhuifang
@date: 2022-07-21
"""
def xmind_parse_file(file_path, belong_to_system, belong_to_module, type, belong_platform):
content_dict = xmindparser.xmind_to_dict(file_path)
for index1 in content_dict:
node_lists = index1['topic']['topics']
case_list = []
read_node(node_lists, case_list)
return case_list
"""
@desc: 拼装xmind中的每一条测试用例
@author: fanhuifang
@date: 2022-07-21
"""
def read_node(node_lists, case_list):
if len(node_lists) >= 1:
for node in node_lists:
# 如何知道遍历的是最后一个节点
# 当前的node的所有的key中没有topics,那就说明是最后一个节点了
if not list(node.keys()).__contains__("topics"):
test_case_param = SaveTestCaseParam()
for key in node:
if key == "title":
setattr(test_case_param, 'case_name', node[key])
setattr(test_case_param, 'step', node[key])
setattr(test_case_param, 'expected_results', node[key])
continue
if key == "makers":
setattr(test_case_param, 'test_case_level', node[key][0])
# 添加到list中
case_list.append(test_case_param)
# 倒数第二个节点
else:
if list(node.keys()).__contains__("makers"):
test_case_param = SaveTestCaseParam()
for key in node:
if key == "title":
setattr(test_case_param, 'case_name', node[key])
continue
if key == 'topics':
parent_node = node[key]
for sub_node_key in parent_node:
for key1 in sub_node_key:
if key1 == "title":
title_content = sub_node_key['title']
if "前置条件" in title_content:
setattr(test_case_param, 'pre_condition', title_content)
continue
if "用例步骤" in title_content:
setattr(test_case_param, 'step', title_content)
continue
if "预期结果" in title_content:
setattr(test_case_param, 'expected_results', title_content)
continue
if key == 'makers':
setattr(test_case_param, 'test_case_level', node[key][0])
# 添加到list中
case_list.append(test_case_param)
else:
for key in node:
if key == 'topics':
read_node(node[key], case_list)
"""
@desc: 主入口
@author: fanhuifang
@date: 2022-07-21
"""
if __name__ == '__main__':
# 文件路径
file_path = "/Users/fanhuifang/Documents/ziroom/test_case_temple.xmind"
case_list = xmind_parse_file(file_path)
print("测试案例个数:", len(case_list))
注:我这里只展示了解析的地方,发送请求就很简单了,就不展示了。
-----------------------------------你知道的越多,不知道的越多--------------------------------