xmind转自测用例工具

需求背景

上个月推行了这个东西进击的开发自测,其中有一点是前置提供开发自测,提供的是xmind格式的文档,作为测试记录,现在提供xmind转为自测用例的脚本,格式如下:

模块 用例名称 执行步骤 预期结果 验证人 自测结果 测试验证结果 优先级

使用

python3 xmind2devcase [目录]  #解析给定的单个目录xmind文件
python3 xmind2devcase #解析当前目录下所有xmind文件
xmind的格式
iShot2020-07-0620.27.06.png
iShot2020-07-0620.27.57.png
  • 用例名称前嵌入优先级1,2,3分别代表高中低级别
  • 用例嵌入备注填入开发自测人,比较简单不做过多解释了

脚本

xmind:这个开源库其实就是XMind SDK for python项目(https://github.com/xmindltd/xmind-sdk-python.git)的封装,xlwt这个是写excel的第三方库。

思路很简单,直接解析,创建xls文件,所以直接上脚本

import xmind,xlwt,os,sys

'''
转换xmind文件到excel文档,作为开发自测用例
1.统一的xmind格式编写
    目录,测试用例,执行步骤,预期结果
    测试用例解析为一行,执行步骤可以多条,解析成一行
    备注->填写指定验证人
    优先级 ->指定1、2、3优先级
2.定义提取的自测用例
依赖:xmind、xlwt模块
3.使用:
python3 xmind2devcase [目录]  #解析给定的单个目录xmind文件
python3 xmind2devcase #解析当前目录下所有xmind文件
'''

global parseAll
parseAll = True

def loadMind(path:str) -> dict:
    workbook = xmind.load(path)
    ret = workbook.getPrimarySheet().getData().get("topic")
    return ret

def generExcel(xl_name:str,mind_dic:dict) -> None:
    wb = xlwt.Workbook()
    ws = wb.add_sheet("自测用例") #type: xlwt.Worksheet
    style_title = xlwt.easyxf('font: bold on;align: wrap on, vert centre, horiz center')
    style_title_content = xlwt.easyxf('align: wrap on, vert centre')
    style_title_content2 = xlwt.easyxf('align: wrap on, vert centre,horiz center')
    ws.write(0,0,"模块",style=style_title)
    ws.write(0, 1, "用例名称",style=style_title)
    ws.write(0, 2, "执行步骤",style=style_title)
    ws.write(0, 3, "预期结果",style=style_title)
    ws.write(0, 4, "验证人",style=style_title)
    ws.write(0, 5, "自测结果",style=style_title)
    ws.write(0, 6, "测试验证结果", style=style_title)
    ws.write(0,7,"优先级",style=style_title)
    ws.col(0).width = 256 * 20
    ws.col(1).width = 256 * 20
    ws.col(2).width = 256 * 40
    ws.col(3).width = 256 * 40
    ws.col(4).width = 256 * 20
    ws.col(5).width = 256 * 20
    ws.col(6).width = 256 * 20
    ws.col(7).width = 256 * 20
    row = 1
    #解析开始
    dirs = mind_dic.get("topics")
    for dir in dirs:
        dir_title = dir.get("title")    #目录名字
        try:
            ws.write(row,0,dir_title,style_title_content2)
        except:
            ws.write(row+1, 0, dir_title, style_title_content2)
            row += 1
        cases = dir.get("topics")
        if not cases:
            continue
        for case in cases:
            case_title = case.get("title")  #用例名称
            case_note = case.get("note")    #用例执行人
            case_markers = case.get("markers")
            if not parseAll:
                if not case_markers:
                    continue
            case_priority = "高" if "priority-1" in case_markers else "中" if "priority-2" in case_markers else "低"    #用例优先级
            steps = case.get("topics")
            ws.write(row,1,case_title,style_title_content)
            ws.write(row,4, case_note,style_title_content2)
            ws.write(row, 7, case_priority,style_title_content2)
            #下面都是跟随一行
            step_title_real = ""
            result_title_real = ""
            index = 1
            if not steps:
                row += 1
                continue
            for step in steps:
                step_title = step.get("title")  #步骤
                step_title_real += str(index) + "." +step_title+"\n"
                results = step.get("topics")
                if not results:
                    index += 1
                    continue
                is_first_time = True
                for result in results:
                    result_title = result.get("title")  #预期结果
                    if is_first_time:
                        result_title_real += str(index) + "." + result_title + "\n"
                    else:
                        result_title_real += "   " + result_title + "\n"
                    is_first_time = False
                index += 1
            ws.write(row,2,step_title_real,style_title_content)
            ws.write(row,3,result_title_real,style_title_content)
            row += 1
    wb.save(xl_name)

def init_args():
    args = sys.argv
    args_len =  args.__len__()
    return args,args_len

def x_main():
    if args_len < 2:
        # 解析当前目录
        cur_dir = os.path.dirname(os.path.abspath(args[0]))
        ret = os.listdir(cur_dir)
        ret = list(filter(lambda x:str(x).lower().strip().endswith("xmind"),ret))
        ret = list(map(lambda x:os.path.join(cur_dir,x),ret))
        for i in ret:
            d = loadMind(i)
            generExcel(i.replace("xmind", "xls"), d)
    else:
        # 解析传入目录
        d = loadMind(args[1])
        generExcel(str(args[1]).replace("xmind","xls"),d)

if __name__ == "__main__":
    global args,args_len
    args,args_len = init_args()
    x_main()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。