目录

一、xmind用例格式

二、python代码

三、转换结果

四、更新日志


一、xmind用例格式

注:标题不能超过三级

二、python代码

import xlwt
import os
import json
from xmindparser import xmind_to_dict

# 1、调用  xmind_to_dict 将xmind转为dict
def xmind_dict(filename):
    dict_data = xmind_to_dict(filename)
    #输出topics下的子节点
    topics_data = dict_data[0]['topic']['topics']
    return topics_data

# 2、读取dict,获取数据
def ng_test(testdata):
    case_sum_temp = []
    # print(json.dumps(testdata, ensure_ascii=False) )
    for i in range(len(testdata)):
        case_n1 = testdata[i]['title']
        b = len(testdata[i]['topics'])
        for j in range(b):
            case_n2 = testdata[i]['topics'][j]['title']
            c = len(testdata[i]['topics'][j]['topics'])
            for x in range(c):
                case_n3 = testdata[i]['topics'][j]['topics'][x]['title']
                case_name = '【'+case_n1+'-'+case_n2+'】'+case_n3  # 用例名
               #遇到不符合的case则忽略,判断条件-值错误
                try:
                    case_premise = testdata[i]['topics'][j]['topics'][x]['topics'][0]['title']
                    case_level = testdata[i]['topics'][j]['topics'][x]['topics'][0]['topics'][1]['title']
                except KeyError as a:
                    continue
                #是否冒烟
                try:
                    smoke = testdata[i]['topics'][j]['topics'][x]['topics'][0]['topics'][1]['topics'][0]['title']
                    case_smoke = "是" #不为空就为是
                except KeyError as exe:
                    case_smoke = "否"
                #步骤&预期
                d = testdata[i]['topics'][j]['topics'][x]['topics'][0]['topics'][0]['topics']
                case_step = ""
                case_result =""
                for y in range(len(d)):
                    step_temp = testdata[i]['topics'][j]['topics'][x]['topics'][0]['topics'][0]['topics'][y]['title']
                    case_step = case_step + step_temp #步骤
                    expect_result_temp = testdata[i]['topics'][j]['topics'][x]['topics'][0]['topics'][0]['topics'][y]['topics'][0]['title']
                    case_result = case_result + expect_result_temp #预期
                #保存为元祖添加到列表中
                case_sum_temp.append([case_name,case_premise,case_step,case_result,case_level,case_smoke])
    return case_sum_temp

#3、excel文件地址及文件名,写入对应值
def excel_info(filename):
    #a表格基本信息
    excel_name = filename[filename.rindex('/') + 1:filename.index('.xmind')]
    excel_path = filename[:filename.rindex('/')]
    excel_file = os.path.join(excel_path, excel_name + '.xls')
    return  excel_file

# 4、调用 数据存储至excel中
def excel_data(excel_name,testdata):
    # a、创建表格,初始化
    workbook = xlwt.Workbook(encoding='utf-8')
    data_sheet = workbook.add_sheet('sheet1')
    # b、输入表头
    excel_title = ['用例名称', '前置条件', '用例步骤', '预期结果', '优先级', '是否冒烟case']
    for i in range(len(excel_title)):
        data_sheet.write(0, i, excel_title[i])
    #c、输入case数据
    for x in range(len(ng_test(testdata))):
        for y in range(len(excel_title)):
            data_sheet.write(x+1, y, ng_test(testdata)[x][y])
    # d、保存
    workbook.save(excel_name)
    return data_sheet

if __name__ == '__main__':
    filename = 'case路径.xmind'
    excel_data(excel_info(filename),xmind_dict(filename))
    print("运行结束!")

三、转换结果

四、更新日志

0706更新

-修复bug

-对于不符合规范的case进行忽略,方便对case进行注释

-读取可优化为jsonpath读取

jsonpath中多条件提取和过滤提取_jsonpath多条件过滤_公子清羽的博客-CSDN博客

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐