xmind转Excel测试用例

一、引言

作为一名测试点工,我们是需要经常写测试用例的,一般我们都会使用xmind或者freemain先写出导图,然后根据导图再编写我们的测试用例。那我们能不能直接把导图中的内容直接转成Excel测试用例呢,…有了想法,开始行动起来,测试人不要怂,开始干。

二、环境准备

点工一般都使用python居多,本次我们也是用python来写脚本实现本次需求,从网上了解到xmindparser库可以解析xmind文件数据,支持将xmind文件解析为dict、json、xml数据类型。数据解析完成后,还需要把解析的数据存在Excel中,python处理Excel库很多,在这边我使用的是openpyxl库。

python 3.7.1
xmindparser 1.0.9
openpyxl 3.0.9

上面介绍完本次使用的库,还有一个重点就是,xmind的导图如何每个人写法都不一样,我们该如何解析形成统一标准呢,所以我们应该制定一个写导图的规则,下方是我制定的一个规则,后面都以此规则讲解。规则不是唯一,可根据实际情况自行制定。

中心主题:项目标题
二级标题:模块标题
三级标题:用例正标题
四级标题:操作步骤
五级标题:预期结果
在这里插入图片描述

三、脚本编写

1、读取xmind文件

读取xmind文件数据,xmind_to_dict(xmind_file_path)[0][“topic”] 返回数据如图所示,我们读取文件时把中心主题和二级目录下分支数据取出,用于后续处理。
在这里插入图片描述
代码如下:

from xmindparser import xmind_to_dict
def read_xmind_data(xmind_file_path):
    """
    读取xmind文件,返回中心主题标题和其他分支list数据
    :param xmind_file: xmind文件路径
    :return:
    """
    case_data_dict=xmind_to_dict(xmind_file_path)[0]["topic"]
    title = case_data_dict["title"]
    data_list=case_data_dict["topics"]
    return title,data_list

2、根据读取数据,解析数据

上面我们已经读取出数据,先分析下数据构成,我们发现每一个topics下面都有下一级的list,我们可以使用循环或者递归来提取出数据,并形成类似:登录-输入正确账号密码登录-进入登录页面-成功进入登录页面 这种结构的数据。
返回数据如下:
在这里插入图片描述

代码如下:

def xmind_to_caselist(data_list,title,listcase,strcase=''):
    """
    根据传入的list数据,递归解析出数据,形成以:
    登录-输入正确账号密码登录-进入登录页面-成功进入登录页面 的数据
    :param data_list: 传入解析后list
    :param strcase: 初始字符串,默认为空
    :param listcase: 存用例数据的list
    :return: 返回以每条用例数据的list
    """
    for branch_one in data_list:
        strcase_one = strcase + branch_one['title'] + '_'
        if 'topics' not in branch_one:
            # 分支中不存在topics时,把数据添加到listcase中
            strcase_one=title+'_'+ strcase_one
            listcase.append(strcase_one)
            continue
        branch = branch_one['topics']
        # 递归,遍历所有分支
        xmind_to_caselist(branch,title,listcase,strcase=strcase_one)

    return listcase

3、定义测试用例标题

目前我所在的公司使用tapd,tapd中所用的测试用例模板标标题为:ID 用例目录 用例名称 前置条件 用例步骤 预期结果 用例类型 用例状态 用例等级。其中一些标题一般都没什么变化,我这边使用默认值。由上面返回的listcase数据,把数据拆分后重新组成一条用例,一条用例为一个list,方便后续写入Excel中。
返回数据如下:
在这里插入图片描述

代码如下:

def change_case(listcase,top_term='',case_type='功能测试',case_state='待更新',case_grade='中'):
    """
    Excel中用例标题分为如下9个(tapd上的上传标准):
    ID	用例目录	用例名称	前置条件	用例步骤	预期结果	用例类型	用例状态	用例等级

    ID:自增
    用例目录:项目名称-模块名称 例如:某某某项目-登录模块
    用例名称:提取传入数据的三级标题+四级标题+五级标题
    前置条件:默认为空,可自己填写通用数据
    用例步骤:提取数据的四级标题
    预期结果:提取数据的五级标题
    用例类型:默认值为功能测试,可填其他值为:性能测试,安全性测试
    用例状态:默认值为待更新,可填其他值为:正常,已废弃
    用例登记:默认值为中,可填其他值为:高,低
    :param data_list: 传入已从xmind分解成的list数据
    :param top_term: 前置条件
    :param case_type: 用例类型
    :param case_state: 用例状态
    :param case_grade: 用例等级
    :return: 返回以一条用例为一个list的数据,例如[[用例1],[用例2],[用例3]]
    """
    total_case=[]#总的用例格式的list
    case_id=1
    for data in listcase:
        case_list=[]#每一条用例的list
        data_sp=data.split('_')
        case_list.append(case_id)
        case_list.append(data_sp[0]+"-"+data_sp[1])
        case_list.append(data_sp[2]+','+data_sp[3]+','+data_sp[4])
        case_list.append(top_term)
        case_list.append(data_sp[3])
        case_list.append(data_sp[4])
        case_list.append(case_type)
        case_list.append(case_state)
        case_list.append(case_grade)
        total_case.append(case_list)
        case_id+=1
    return total_case

4、数据写入Excel中

在上面步骤中,已经完成对数据的梳理,下面使用openpyxl库完成对数据的写入并相应的调整样式。
代码如下:

def write_excel_case(total_case,save_path):
	"""
    把解析的数据写入Excel中
    :param total_case: 解析完成的数据
    :param save_path: 文件保存路径
    :return: 
    """
    wb=Workbook()
    ws=wb.active
    ws['A1']='ID'
    ws['B1']='用例目录'
    ws['C1']='用例名称'
    ws['D1']='前置条件'
    ws['E1']='用例步骤'
    ws['F1']='预期结果'
    ws['G1']='用例类型'
    ws['H1']='用例状态'
    ws['I1']='用例等级'
    i=1
    for case in total_case:
        ws['A{}'.format(i + 1)] = case[0]
        ws['B{}'.format(i + 1)] = case[1]
        ws['C{}'.format(i + 1)] = case[2]
        ws['D{}'.format(i + 1)] = case[3]
        ws['E{}'.format(i + 1)] = case[4]
        ws['F{}'.format(i + 1)] = case[5]
        ws['G{}'.format(i + 1)] = case[6]
        ws['H{}'.format(i + 1)] = case[7]
        ws['I{}'.format(i + 1)] = case[8]
        i+=1
    column_list = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I']
    cell_list = ['A1', 'B1', 'C1', 'D1', 'E1', 'F1', 'G1', 'H1', 'I1']
    #设置表头字体
    font=Font(name='宋体',bold=True)
    for cel in cell_list:
        cell=ws[cel]
        cell.font=font
    # 设置列的表格居中
    alignment = Alignment(horizontal='center',wrapText=True)
    for col_name in column_list:
        col_list = ws[col_name]
        for col in col_list:
            col.alignment = alignment
    #设置列的宽度
    ws.column_dimensions['B'].width = 20
    ws.column_dimensions['C'].width = 60
    ws.column_dimensions['D'].width = 30
    ws.column_dimensions['E'].width = 30
    ws.column_dimensions['F'].width = 30
    ws.column_dimensions['G'].width = 15
    ws.column_dimensions['H'].width = 15
    ws.column_dimensions['I'].width = 15
    #设置行的高度
    for x in range(2,ws.max_row+1):
        ws.row_dimensions[x].height = 40
    wb.save(save_path)

5、运行入口

上述步骤中已经把脚本所需函数完成,下面写下运行脚本函数:
代码如下:

def run_main(xmind_file_path,save_path,top_term='',case_type='功能测试',case_state='待更新',case_grade='中'):
    """

    :param xmind_file_path: xmind文件路径
    :param save_path: 文件保存路径
    :param top_term: 前置条件
    :param case_type: 用例类型
    :param case_state: 用例状态
    :param case_grade: 用例等级
    :return:
    """
    title,data_list=read_xmind_data(xmind_file_path)
    listcase=xmind_to_caselist(data_list,title,[])
    total_case = change_case(listcase, top_term=top_term,case_type=case_type,case_state=case_state,case_grade=case_grade)
    write_excel_case(total_case,save_path)

运行结果图如下:
在这里插入图片描述

四、总结

实现该需求并不是很难,主要是使用对应库解析数据并保存,目前只是实现了脚本,后续继续学习,希望把脚本转换成Tkinter桌面应用,使用更方便。

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值