大家好,我是金鱼座,一个走在测试领域这片蓝海中, 蹉跎前行的技术渣渣,唯有一直走下去,也许能改变点什么,加油!
前一篇文章测试用例管理之xmind体验给大家展示了一个比较明朗的xmind测试用例管理思路,那么结合我们日常中不论是实际测试人员还是测试管理者,都会关心的问题就是
测试输出如何体现,测试过程如何体现???
作为用例,输出就是用例文档,过程就是用例的执行过程
首先我们先改造一下xmind,让它能够更加方便大家理解测试用例
如上图,使用xmind自带的图标功能,通过测试标题的图标1可以作为优先级定义,在期望结果中增加对号来标识执行结果
通过上述的非常简单的改造,实际上作为日常的简单测试用例管理已经绰绰有余,既然工作使用xmind来编写用例,可是如果公司更加希望有excel类等的执行结果输出怎么办?
要是xmind可以自己转成excel内容就好了
对就是这个思路,我们让xmind自己转成excel,期望的结果如图
如果有这种功能,那么用xmind来逻辑发散用例,excel来作为执行输出和过程监控,这是一个非常好的思路
有了思路,就不怕无法操作
首先选择python,为什么选他,很简单,因为xmind支持python,有个xmind模块,里面有满足我们所需的任何操作
详细的过程在这里不做过多的介绍,就说明下脚本中的一些重点
整个过程实际上就分了两步走,先解析xmind转成testcase,在将testcase转成excel输出,如下图
先看第一步:xmind的dict输出转成testcase对象,看下面代码
def xmind2case(self):
models = self.xmind_sheet_data["topic"]['topics']
global l
for model in models:
# 如果存在优先级9,那么则忽略当前的内容
if 'priority-9' in model['markers'] : continue
for func in model['topics']:
if 'priority-9' in func['markers']: continue
for ca in func['topics']:
if 'priority-9' in ca['markers']: continue
case = xcase.XmindCase()
# 设置模块
case.set_model(model['title'])
# 设置功能
case.set_function(func['title'])
# 设置用例
case.set_title(ca['title'])
# 判断该case的优先级,并设置
if ca['markers']:
case.set_priority(ca['markers'][0])
case.set_step(ca['topics'][0]['title'])
# 判断当前的case中的期望结果是否达到预期
if 'symbol-right' in ca['topics'][0]['topics'][0]['markers']:
case.set_result('Pass')
elif 'symbol-wrong' in ca['topics'][0]['topics'][0]['markers']:
case.set_result('Fail')
elif ca['topics'][0]['topics'][0]['markers'] == []:
case.set_result('None')
# 设置期望值
case.set_expect(ca['topics'][0]['topics'][0]['title'])
# 判断备注是否有,如果没有该节点则默认为空,有则赋值topics下的title
if len(ca['topics'][0]['topics'][0]['topics']) > 0:
case.set_notes(ca['topics'][0]['topics'][0]['topics'][0]['title'])
else:
case.set_notes('')
l.append(case)
成功转成xmindcase后, 就可以对这些case进行excel转化,
import openpyxl
from openpyxl.styles import Font
from tools.xmind_parse import l
from openpyxl.styles.colors import RED, BLUE, GREEN
class ExcelWriter():
def __init__(self, excel_name, sheet_name="测试用例"):
self.wb = openpyxl.Workbook()
self.sheet = self.wb.active
self.sheet.title = sheet_name
self.excel_name = excel_name
def __enter__(self):
return self
# 初始化标题
def init_title(self):
self.sheet['A1']= '测试编号'
self.sheet['B1'] = '模块'
self.sheet['C1'] = '功能'
self.sheet['D1'] = '优先级'
self.sheet['E1'] = '测试标题'
self.sheet['F1'] = '测试步骤'
self.sheet['G1'] = '期望结果'
self.sheet['H1'] = '测试结果'
self.sheet['I1'] = '备注'
# 给用例标题加粗
for col in range(1, 10):
self.sheet.cell(row=1, column=col).font = Font(bold=True)
def write_rows(self):
global l
row = 2
# 按行赋值
for i in l:
self.sheet.cell(row=row, column=1).value = row-1
self.sheet.cell(row=row, column=2).value = i.model
self.sheet.cell(row=row, column=3).value = i.function
self.sheet.cell(row=row, column=4).value = i.priority
self.sheet.cell(row=row, column=5).value = i.title
self.sheet.cell(row=row, column=6).value = i.step
self.sheet.cell(row=row, column=7).value = i.expect
self.sheet.cell(row=row, column=8).value = i.result
self.sheet.cell(row=row, column=9).value = i.notes
if i.result == 'Pass':
self.sheet.cell(row=row, column=8).font = Font(color=GREEN)
elif i.result == 'Fail':
self.sheet.cell(row=row, column=8).font = Font(color=RED)
row += 1
def __exit__(self, exc_type, exc_val, exc_tb):
self.wb.save(self.excel_name)
完成这两个部分的核心逻辑代码,那么基本上就能进行xmind转excel的操作了,经过实测,最终会完成上述截图中的xmind》》》》excel的输出
Xmind_2_TestCase:git 改变之路,从未停止,你觉得它应该怎么改变?欢迎大家留言讨论。