qvchuang

前言

废话不多说,因为工作需要,写这个工具就是为了方便编写以及上传测试用例

由于用例需要上传禅道,还需要按照禅道上的Excel模板来写,但是之前用脑图写习惯了,再加上强逼症,用禅道下载的Excel模板写非常难受,于是就百度找教程并借鉴部分代码。

实现原理:首先制定一套xmind模板规则,然后解析xmind用例数据,然后处理数据,写入Excel模板中

1、定制ximd模板规则

所属模块-相关需求-用例标题-前置条件-操作步骤-预期结果

没有前置条件时可以忽略

2、xmind数据解析(吐槽:俄罗斯套娃一样)

写好了xmind模板(demo)

首先要提取Xmind文件分支内容

[
	{
		\'title\': \'画布1\',
		\'topic\': {
			\'title\': \'A\',
			\'topics\': [
				{
					\'title\': \'B1\'
				},
				{
					\'title\': \'B2\',
					\'topics\': [
						{
							\'title\': \'C1\'
						},
						{
							\'title\': \'C2\'
						}
					]
				},
				{
					\'title\': \'B3\'
				}
			]
		},
		\'structure\': \'org.xmind.ui.map.unbalanced\'
	}
]

内容装在一个list里,字典最外层title为“画布1”,

topic装有我们需要的内容(可以看出其他位置叫topics),

这是xmind文件中没有的,经验证这是个固定值,可以忽略。

然后通过取list,A是字典中value值,key为title,其子节点装在topics的分支中。

处理后是这样,最外层是dict:

{
	\'title\': \'A\',
	\'topics\': [
		{
			\'title\': \'B1\'
		},
		{
			\'title\': \'B2\',
			\'topics\': [
				{
					\'title\': \'C1\'
				},
				{
					\'title\': \'C2\'
				}
			]
		},
		{
			\'title\': \'B3\'
		}
	]
}

需要一层层取子节点才可以得到我们想要的A\B2\C1、A\B2\C2,

节点值永远在title里,而子节点却在dict、list里的dict里,

而且子节点里有的只有一个title,有的有一个title加一个topics,

不难发现,有topics的是还有其子节点的

处理数据的逻辑大概是下面这样的:

如果  输入字典:

    当字典只有有title时:

      操作1

    当字典有title和topics时:

      操作2

如果  输入list:

    遍历list里的字典:

      对每个字典进行操作3

如果  输入的既不是字典也不是list:

    输出值

3、写入Excel

处理后的data数据:

(\'所属模块#1\', \'相关需求#1\', \'用例标题:B1\', \'无\', \'操作步骤\', \'预期结果\', \'\', 1, \'功能测试\') 
(\'所属模块#1\', \'相关需求#1\', \'用例标题:B1\', \'无\', \'操作步骤\', \'预期结果\', \'\', 1, \'功能测试\') 
(\'所属模块#1\', \'相关需求#1\', \'用例标题:B2\', \'前置条件\', \'操作步骤\', \'预期结果\', \'\', 1, \'功能测试\') 
(\'所属模块#1\', \'相关需求#1\', \'用例标题:B2\', \'前置条件\', \'操作步骤\', \'预期结果\', \'\', 1, \'功能测试\') 

写入模板文件:

from openpyxl import load_workbook
def save_excel(self,template, data, new_file):
    \'\'\'
        把数据写入模板用例中
        :param  template: Excel用例模板文件
        :param data: xmind转化后的data数据
        :param new_file: 保存至新的Excel表
        :return:
        \'\'\'
    wb = load_workbook(template)
    sheet = wb.active
    for i in data:
        print(i)
        self.color_handle(str(i))
        sheet.append(i)
        wb.save(new_file)
        print("运行结束!")

4、pyqt5可视化界面

5、写入data后的Excel用例文件

最后上传Excel用例至禅道即可

分类:

技术点:

相关文章: