python提效小工具-统计xmind用例数量

问题:做测试的朋友们经常会用到xmind这个工具来梳理测试点或写测试用例,但是xmind8没有自带的统计测试用例,其他版本的xmind有些自带节点数量统计功能,但也也不会累计最终的数量,导致统计测试工作量比较困难。

解决方法:利用python开发小工具,实现同一份xmind文件中一个或多个sheet页的用例数量统计功能。

一、源码

#!/usr/bin/env python

-- coding:utf-8 --

author = ‘zhongxintao’
import tkinter as tk
from tkinter import filedialog, messagebox
from xmindparser import xmind_to_dict
import xmind

class ParseXmind:
def init(self, root):
self.count = 0
self.case_fail = 0
self.case_success = 0
self.case_block = 0
self.case_priority = 0

    # total汇总用
    self.total_cases = 0
    self.total_success = 0
    self.total_fail = 0
    self.total_block = 0
    self.toal_case_priority = 0

    # 设置弹框标题、初始位置、默认大小
    root.title(u'xmind文件解析及用例统计工具')
    width = 760
    height = 600
    xscreen = root.winfo_screenwidth()
    yscreen = root.winfo_screenheight()
    xmiddle = (xscreen - width) / 2
    ymiddle = (yscreen - height) / 2
    root.geometry('%dx%d+%d+%d' % (width, height, xmiddle, ymiddle))

    # 设置2个Frame
    self.frm1 = tk.Frame(root)
    self.frm2 = tk.Frame(root)

    # 设置弹框布局
    self.frm1.grid(row=1, padx='20', pady='20')
    self.frm2.grid(row=2, padx='30', pady='30')

    self.but_upload = tk.Button(self.frm1, text=u'上传xmind文件', command=self.upload_files, bg='#dfdfdf')
    self.but_upload.grid(row=0, column=0, pady='10')
    self.text = tk.Text(self.frm1, width=55, height=10, bg='#f0f0f0')
    self.text.grid(row=1, column=0)
    self.but2 = tk.Button(self.frm2, text=u"开始统计", command=self.new_lines, bg='#dfdfdf')
    self.but2.grid(row=0, columnspan=6, pady='10')
    self.label_file = tk.Label(self.frm2, text=u"文件名", relief='groove', borderwidth='2', width=25,
                               bg='#FFD0A2')
    self.label_file.grid(row=1, column=0)
    self.label_case = tk.Label(self.frm2, text=u"用例数", relief='groove', borderwidth='2', width=10,
                               bg='#FFD0A2').grid(row=1, column=1)
    self.label_pass = tk.Label(self.frm2, text=u"成功", relief='groove', borderwidth='2', width=10,
                               bg='#FFD0A2').grid(row=1, column=2)
    self.label_fail = tk.Label(self.frm2, text=u"失败", relief='groove', borderwidth='2', width=10,
                               bg='#FFD0A2').grid(row=1, column=3)
    self.label_block = tk.Label(self.frm2, text=u"阻塞", relief='groove', borderwidth='2', width=10,
                                bg='#FFD0A2').grid(row=1, column=4)
    self.label_case_priority = tk.Label(self.frm2, text="p0case", relief='groove', borderwidth='2',
                                        width=10, bg='#FFD0A2').grid(row=1, column=5)

def count_case(self, li):
    """统计xmind中的用例数"""
    for i in range(len(li)):
        if li[i].__contains__('topics'):
            # 带topics标签表示有子标题,递归执行方法
            self.count_case(li[i]['topics'])
            # 不带topics表示无子标题,此级别即是用例
        else:
            # 有标记成功或失败时会有makers标签
            if li[i].__contains__('makers'):
                for mark in li[i]['makers']:
                    # 成功
                    if mark == "symbol-right":
                        self.case_success += 1
                    # 失败
                    elif mark == "symbol-wrong":
                        self.case_fail += 1
                    # 阻塞
                    elif mark == "symbol-attention":
                        self.case_block += 1
                    # 优先级
                    elif mark == "priority-1":
                        self.case_priority += 1
            # 用例总数
            self.count += 1

def new_line(self, filename, row_number):
    """用例统计表新增一行"""
    # sheets是一个list,可包含多sheet页
    sheets = xmind_to_dict(filename)  # 调用此方法,将xmind转成字典
    for sheet in sheets:
        print(sheet)
        # 字典的值sheet['topic']['topics']是一个list
        my_list = sheet['topic']['topics']
        print(my_list)
        self.count_case(my_list)

    # 插入一行统计数据
    lastname = filename.split('/')
    self.label_file = tk.Label(self.frm2, text=lastname[-1], relief='groove', borderwidth='2', width=25)
    self.label_file.grid(row=row_number, column=0)

    self.label_case = tk.Label(self.frm2, text=self.count, relief='groove', borderwidth='2', width=10)
    self.label_case.grid(row=row_number, column=1)
    self.label_pass = tk.Label(self.frm2, text=self.case_success, relief='groove', borderwidth='2',
                               width=10)
    self.label_pass.grid(row=row_number, column=2)
    self.label_fail = tk.Label(self.frm2, text=self.case_fail, relief='groove', borderwidth='2', width=10)
    self.label_fail.grid(row=row_number, column=3)
    self.label_block = tk.Label(self.frm2, text=self.case_block, relief='groove', borderwidth='2', width=10)
    self.label_block.grid(row=row_number, column=4)
    self.label_case_priority = tk.Label(self.frm2, text=self.case_priority, relief='groove', borderwidth='2',
                                        width=10)
    self.label_case_priority.grid(row=row_number, column=5)
    self.total_cases += self.count
    self.total_success += self.case_success
    self.total_fail += self.case_fail
    self.total_block += self.case_block
    self.toal_case_priority += self.case_priority

def new_lines(self):
    """用例统计表新增多行"""
    # 从text中获取所有行
    lines = self.text.get(1.0, tk.END)
    row_number = 2
    # 分隔成每行
    for line in lines.splitlines():
        if line == '':
            break
        print(line)
        self.new_line(line, row_number)
        row_number += 1

    # total汇总行
    self.label_file = tk.Label(self.frm2, text='total', relief='groove', borderwidth='2', width=25)
    self.label_file.grid(row=row_number, column=0)
    self.label_case = tk.Label(self.frm2, text=self.total_cases, relief='groove', borderwidth='2', width=10)
    self.label_case.grid(row=row_number, column=1)

    self.label_pass = tk.Label(self.frm2, text=self.total_success, relief='groove', borderwidth='2',
                               width=10)
    self.label_pass.grid(row=row_number, column=2)
    self.label_fail = tk.Label(self.frm2, text=self.total_fail, relief='groove', borderwidth='2', width=10)
    self.label_fail.grid(row=row_number, column=3)
    self.label_block = tk.Label(self.frm2, text=self.total_block, relief='groove', borderwidth='2',
                                width=10)
    self.label_block.grid(row=row_number, column=4)

    self.label_case_priority = tk.Label(self.frm2, text=self.toal_case_priority, relief='groove',
                                        borderwidth='2',
                                        width=10)
    self.label_case_priority.grid(row=row_number, column=5)

def upload_files(self):
    """上传多个文件,并插入text中"""
    select_files = tk.filedialog.askopenfilenames(title=u"可选择1个或多个文件")
    for file in select_files:
        self.text.insert(tk.END, file + '\n')
        self.text.update()

if name == ‘main’:
r = tk.Tk()
ParseXmind®
r.mainloop()

二、工具使用说明
1、xmind文件中使用下列图标进行分类标识:

标记表示p0级别case:数字1

标记表示执行通过case:绿色√

标记表示执行失败case:红色×

标记表示执行阻塞case:橙色!

2、执行代码

3、在弹框内【上传xmind文件】按钮

4、在弹框内【开始统计】按钮

三、实现效果
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值