xmind2testcase使用与二次开发

这篇具有很好参考价值的文章主要介绍了xmind2testcase使用与二次开发。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

xmind2testcase安装、简单二次开发与使用说明:

添加xmind文件备份

重构生成CSV文件

preview预览页面数据显示重构

一、安装

1.xmind2testcase安装

pip install xmind2testcase

2.启动服务

进入默认位置:C:\Users\dell\AppData\Roaming\Python\Python38\Scripts,打开cmd命令窗口,执行命令xmind2testcase.exe webtool 5000,浏览器地址栏输入http://本地ip:5000 访问

xmind2testcase使用与二次开发,python,自动化测试,python

二、二次开发

源码地址C:\Users\dell\AppData\Roaming\Python\Python38\site-packages\webtool

1.xmind文件备份

打开application.py,添加BACKUP_FOLDER = os.path.join(here, 'backup')

xmind2testcase使用与二次开发,python,自动化测试,python

init()方法添加

if not exists(BACKUP_FOLDER):
    os.mkdir(BACKUP_FOLDER)

xmind2testcase使用与二次开发,python,自动化测试,pythonsave_file(file)添加

shutil.copy(upload_to, BACKUP_FOLDER)

xmind2testcase使用与二次开发,python,自动化测试,python

2.重构生成CSV脚本

import xlwt
from xmindparser import xmind_to_dict
import os

'''
对xmind文件增加了多种样式的处理
'''


def font():
    '''
    设置字体
    :return:
    '''
    font = xlwt.Font()
    font.bold = False
    return font


def border():
    '''
    设置边框
    :return:
    '''
    border = xlwt.Borders()
    border.left = 1
    border.right = 1
    border.top = 1
    border.bottom = 1
    return border


def backcolor():
    '''
    设置背景色
    :return:
    '''
    backcolor = xlwt.Pattern()
    backcolor.pattern = xlwt.Pattern.SOLID_PATTERN
    backcolor.pattern_fore_colour = 21
    return backcolor


def style():
    '''
    设置不同样式
    :return:
    '''
    # 设置第一行样式
    alignment0 = xlwt.Alignment()
    alignment0.horz = 0x02
    alignment0.vert = 0x01
    style0 = xlwt.XFStyle()
    style0.alignment = alignment0
    style0.borders = border()
    style0.font = font()
    style0.pattern = backcolor()

    # 用例编码、模块样式
    alignment1 = xlwt.Alignment()
    alignment1.horz = 0x02
    alignment1.vert = 0x01
    style1 = xlwt.XFStyle()
    style1.alignment = alignment1

    # 测试用例名称样式
    alignment2 = xlwt.Alignment()
    alignment2.horz = 0x01
    alignment2.vert = 0x01
    alignment2.wrap = 1
    style2 = xlwt.XFStyle()
    style2.alignment = alignment2

    # 操作步骤样式
    alignment3 = xlwt.Alignment()
    alignment3.horz = 0x01
    alignment3.vert = 0x01
    alignment3.wrap = 1  # 单元格内自动换行
    style3 = xlwt.XFStyle()
    style3.alignment = alignment3
    style3.alignment.wrap = 1  # 单元格有换行符时换行

    # 预期结果样式
    alignment4 = xlwt.Alignment()
    alignment4.horz = 0x01
    alignment4.vert = 0x01
    alignment4.wrap = 1
    style4 = xlwt.XFStyle()
    style4.alignment = alignment4

    return style0, style1, style2, style3, style4


class xmind_to_csv():
    """ xmind文档用例转xls文档用例"""

    def infinite_for(self, loop, case, case_list, n):

        for branches in loop:
            # 定义新字符串,把所有路径加起来
            strvar = case + branches['title'] + '/#'
            if 'topics' not in branches:
                # 分支遍历完,把他加到列表里面
                case_list.append(strvar)
                continue
            branch = branches['topics']
            # 无限循环调用方法,遍历他的全部分支
            self.infinite_for(branch, strvar, case_list, n)
        # 根据传参重写路径
        # else:
        #     strvar = strvar

    def read_xmind(self, filename):
        if filename.endswith('.xmind') and os.path.exists(filename):
            self.xmind = xmind_to_dict(filename)
            self.file_name = filename.split('.')[0]
            return self.xmind, self.file_name
        else:
            print('文件格式不对或文件不存在!')

    def write_excel(self, filename):
        '''生成excel文件函数'''

        global li_var

        styles = style()  # xls单元格样式

        self.workbook = xlwt.Workbook(encoding='utf-8')
        self.worksheet = self.workbook.add_sheet('sheet1', cell_overwrite_ok=True)

        row_0 = ['用例编码', '模块', '测试要点', '测试用例标题', '操作步骤', '预期结果', '实际结果', '是否通过',
                 '执行人员', '备注']
        sizes = [10, 15, 30, 30, 50, 30, 30, 10, 10, 30]  # 设置单元格长度
        for i in range(len(row_0)):
            self.worksheet.write(0, i, row_0[i], styles[0])
            self.worksheet.col(i).width = sizes[i] * 256  # 设置单元格长度
            self.worksheet.row(0).height_mismatch = True  # 设置单元格高度
            self.worksheet.row(0).height = 4 * 256
        self.worksheet.set_panes_frozen('1')  # 设置冻结为真
        self.worksheet.set_horz_split_pos(1)  # 水平冻结第一行
        self.worksheet.set_vert_split_pos(2)  # 垂直冻结第一列

        # 开始解析xmind并写入excel
        self.xd = self.read_xmind(filename)
        self.xls_name = self.xd[0][0]['topic']['title']
        case_list = []  # 所有用例
        case = ''  # 单条用例
        self.data_case = self.xd[0][0]['topic']['topics']
        # 循环遍历整个字典,并把每个最小分支的路径按 /# 加入到case_list 列表中
        self.infinite_for(self.data_case, case, case_list, 0)
        try:
            # print(listvar)
            n = 1
            for a_var in case_list:
                l_var = a_var.split('/#')[:-1]
                print(l_var)
                if len(l_var) < 3:
                    # print('格式不符合要求')
                    continue
                elif len(l_var) == 5:
                    Test_no = '%03d' % n  # 用例编号
                    Module = f'{l_var[0]}'  # 所属模块
                    Test_point = f'{l_var[1]}'  # 测试要点
                    Test_title = f'{l_var[2]}'  # 测试标题
                    Test_step = f'{l_var[-2]}'  # 操作步骤
                    Test_result = f'{l_var[-1]}'  # 预期结果

                    # 写入的参数
                    li_var = [Test_no, Module, Test_point, Test_title, Test_step, Test_result]


                elif len(l_var) == 4:
                    Test_no = '%03d' % n  # 用例编号
                    Module = f'{l_var[0]}'  # 所属模块
                    Test_point = f'{l_var[1]}'  # 测试要点
                    Test_title = f'{l_var[1]}'  # 测试标题
                    Test_step = f'{l_var[-2]}'  # 操作步骤
                    Test_result = f'{l_var[-1]}'  # 预期结果

                    li_var = [Test_no, Module, Test_point, Test_title, Test_step, Test_result]


                elif len(l_var) == 3:
                    Test_no = '%03d' % n  # 用例编号
                    Module = f'{l_var[0]}'  # 所属模块
                    Test_point = f'{l_var[0]}'  # 测试要点
                    Test_title = f'{l_var[0]}'  # 测试标题
                    Test_step = f'{l_var[-2]}'  # 操作步骤
                    Test_result = f'{l_var[-1]}'  # 预期结果

                    li_var = [Test_no, Module, Test_point, Test_title, Test_step, Test_result]

                else:
                    Test_no = '%03d' % n  # 用例编号
                    Module = f'{l_var[0]}'  # 所属模块
                    Test_point = f'{l_var[1]}'  # 测试要点
                    Test_title = f'{l_var[2]}'  # 测试标题
                    Test_step = f'{l_var[-2]}'  # 操作步骤
                    Test_result = f'{l_var[-1]}'  # 预期结果

                    li_var = [Test_no, Module, Test_point, Test_title, Test_step, Test_result]

                # for j in li_var:
                #     self.worksheet.write(n, int(j[-1]), j[:-1])

                for i in range(len(li_var)):
                    self.worksheet.write(n, 0, li_var[0], styles[1])
                    self.worksheet.write(n, 1, li_var[1], styles[1])
                    self.worksheet.write(n, 2, li_var[2], styles[2])
                    self.worksheet.write(n, 3, li_var[3], styles[2])
                    self.worksheet.write(n, 4, li_var[4], styles[3])
                    self.worksheet.write(n, 5, li_var[5], styles[3])

                n += 1

            self.workbook.save(self.xd[1] + '.csv')  # xls名称取xmind主题名称

        except Exception as e:
            print(e)


if __name__ == '__main__':
    run = xmind_to_csv()
    run.write_excel(filename='系统消息001.xmind')
    # os.system('pause')
download_zentao_file(filename)方法修改,引用新的处理方法,注释原部分代码,使用新的处理方法

xmind2testcase使用与二次开发,python,自动化测试,python

#使用重构生成CSV脚本
xmind_csv_file = xmind_to_csv()
xmind_csv_file.write_excel(full_path)
filename=filename.split('.')[0]+'.csv'
if not exists(join(app.config['UPLOAD_FOLDER'], filename)):
    abort(404)
@app.route('/<filename>/to/zentao')
def download_zentao_file(filename):
    full_path = join(app.config['UPLOAD_FOLDER'], filename)

    if not exists(full_path):
        abort(404)

    # zentao_csv_file = xmind_to_zentao_csv_file(full_path)
    # filename = os.path.basename(zentao_csv_file) if zentao_csv_file else abort(404)
    # return send_from_directory(app.config['UPLOAD_FOLDER'], filename, as_attachment=True)

    #使用重构生成CSV脚本
    xmind_csv_file = xmind_to_csv()
    xmind_csv_file.write_excel(full_path)
    filename=filename.split('.')[0]+'.csv'
    if not exists(join(app.config['UPLOAD_FOLDER'], filename)):
        abort(404)

    return send_from_directory(app.config['UPLOAD_FOLDER'], filename, as_attachment=True)

3.预览页面重构

预览数据处理

import xlwt
from xmindparser import xmind_to_dict
import os


def read_xmind(filename):
    '''
    读取xmind文件
    :param filename: xmind文件名
    '''
    if filename.endswith('.xmind') and os.path.exists(filename):
        xmind = xmind_to_dict(filename)
        return xmind
    else:
        print('文件格式不对或文件不存在!')

def infinite_for(loop, case, TestCase_lise, n):

    for branches in loop:
        # 定义新字符串,把所有路径加起来
        strvar = case + branches['title'] + '/#'
        if 'topics' not in branches:
            # 分支遍历完,把他加到列表里面
            TestCase_lise.append(strvar)
            continue
        branch = branches['topics']
        # 无限循环调用方法,遍历他的全部分支
        infinite_for(branch, strvar, TestCase_lise, n)
    # return TestCase_lise


def do_xmind(filename):
    '''
    处理xmind文件,数据将显示在preview预览页面
    '''
    TestCase_lise = []
    suite = read_xmind(filename)
    # print(suite)

    suite_name = suite[0]['topic']['title']
    case_list = []  # 所有用例
    case = ''  # 单条用例
    data_case = suite[0]['topic']['topics']
    infinite_for(data_case, case, case_list, 0)
    # print(case_list)
    # print(len(case_list))
    for i in case_list:
        i=i.split('/#')[:-1]
        TestCase_lise.append(i)
    print(TestCase_lise)
    return TestCase_lise


if __name__ == '__main__':
    do_xmind('系统消息001.xmind')
application.py引入模块

xmind2testcase使用与二次开发,python,自动化测试,python

preview_file(filename)方法修改,注释旧代码,引入新处理方法
# testcases = get_xmind_testcase_list(full_path)
#重写界面显示数据
testcases=do_xmind(full_path)
@app.route('/preview/<filename>')
def preview_file(filename):
    full_path = join(app.config['UPLOAD_FOLDER'], filename)

    if not exists(full_path):
        abort(404)

    testsuites = get_xmind_testsuites(full_path)
    suite_count = 0
    for suite in testsuites:
        suite_count += len(suite.sub_suites)

    # testcases = get_xmind_testcase_list(full_path)

    #重写界面显示数据
    testcases=do_xmind(full_path)


    return render_template('preview.html', name=filename, suite=testcases, suite_count=suite_count)

preview.html修改

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{{ name }} | Xmind2TestCase Preview</title>
    <link rel="shortcut icon" href="{{ url_for('static',filename='favicon.ico') }}" type="image/x-icon"/>
    <link rel="stylesheet" type="text/css" media="all" href="{{ url_for('static',filename='css/pure-min.css') }}">
    <link rel="stylesheet" type="text/css" media="all" href="{{ url_for('static',filename='css/custom.css') }}">
</head>
<body>
<div class="header">
    <h1>{{ name }}</h1>
    <h2>用例模块: {{ suite_count }} / 用例数量: {{ suite | length }}
        / <a href="{{ url_for("download_zentao_file",filename= name) }}">下载CSV</a>
        / <a href="{{ url_for("download_testlink_file",filename= name) }}">下载XML</a>
        / <a href="{{ url_for("index") }}">返回首页</a></h2>
</div>
<table class="pure-table tests-table">
    <thead>
    <tr>
        <th width="5%">序号</th>
        <th width="10%">模块</th>
        <th>测试要点</th>
        <th width="40%">操作步骤</th>
        <th width="23%">预期结果</th>
    </tr>
    </thead>
    <tbody>
{#    {% for test in suite %}#}
{#        <tr>#}
{#            <td>{{ loop.index }}</td>#}
{#            <td>{{ test.suite }}</td>#}
{#            <td {% if test.name|length>100 %}class="long-name" {% endif %}>{{ test.name }}#}
{#                {% if test.name|length>100 %}#}
{#                    <span class="long-name-info">Warn: test name might be too long: {{ test.name|length }}!</span>#}
{#                {% endif %}#}
{#            </td>#}
{#            <td>#}
{#                <div class="tag-success tooltip">#}
{#                    Priority {{ test.importance }}#}
{#                    <span class="tooltiptext">Priority {{ test.importance }} </span>#}
{#                </div>#}
{#                {% if test.preconditions %}#}
{#                    <div class="pure-button tag-info tooltip">PreCond.#}
{#                        <p class="tooltiptext">#}
{#                            <b>Preconditions:</b> <br>#}
{#                            {{ test.preconditions | replace('\n','<br>') |safe }}#}
{#                        </p></div>#}
{#                {% endif %}#}
{#                {% if test.summary %}#}
{#                    <div class="pure-button tag-warn tooltip">Summary#}
{#                        <p class="tooltiptext">#}
{#                            <b>Summary:</b> <br>#}
{#                            {{ test.summary | replace('\n','<br>') |safe }}#}
{#                        </p></div>#}
{#                {% endif %}#}
{#            <td>#}
{#                {% if test.steps %}#}
{#                    <ol>#}
{#                        {% for step in test.steps %}#}
{#                            <li>{{ step.actions }}#}
{#                                {% if step.expectedresults %}#}
{#                                    <ul>#}
{#                                        <li>{{ step.expectedresults }}</li>#}
{#                                    </ul>#}
{#                                {% endif %}#}
{#                            </li>#}
{#                        {% endfor %}#}
{#                    </ol>#}
{#                {% endif %}#}
{#            </td>#}
{#        </tr>#}
{#    {% endfor %}#}

    {% for test in suite %}
        <tr>
            <td>{{ loop.index }}</td>
            <td>{{ test[0] }}</td>
            {% if test|length>2 %}
            <td>
                {{ test[-3] }}
            </td>
            {% else %}
            <td>
                {{ test[0] }}
            </td>
            {% endif %}
            <td>
                {{ test[-2] }}
            <td>
                {{ test[-1] }}
            </td>
        </tr>
    {% endfor %}

    </tbody>
</table>
{#<div class="footer">#}
{#    <a href="{{ url_for('static', filename='guide/index.html') }}" target="_blank">User Guide</a> |#}
{#    <a href="https://github.com/zhuifengshen/xmind2testcase/issues/new" target="_blank">Report Issue</a> |#}
{#    Powered by <a href="https://github.com/zhuifengshen/xmind2testcase" target="_blank">XMind2TestCase</a>#}
{#</div>#}
</body>
</html>

效果:

xmind2testcase使用与二次开发,python,自动化测试,python

xmind2testcase使用与二次开发,python,自动化测试,python

xmind2testcase使用与二次开发,python,自动化测试,python文章来源地址https://www.toymoban.com/news/detail-740067.html

到了这里,关于xmind2testcase使用与二次开发的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用ChatGPT+Xmind一键生成思维导图,简直泰裤辣

    💖 作者简介:大家好,我是阿牛,全栈领域优质创作者。😜 📝 个人主页:馆主阿牛🔥 🎉 支持我:点赞👍+收藏⭐️+留言📝 💬格言:迄今所有人生都大写着失败,但不妨碍我继续向前!🔥 思维导图是一种非常实用的工具,可以帮助我们整理思路、梳理知识、提高效率

    2024年02月02日
    浏览(43)
  • 【测试效率提升技巧】xmind测试用例转换为excel工具使用手册

    1.在命令行执行pip install xmind2testcase -U 2.到python中xmind2testcase的安装路径(我的路径是D:pythonLibsite-packagesxmind2testcase)下新建一个文件夹,命名为web 3.在命令行cd到刚刚创建的web文件夹,执行pip freeze requirements.txt 4.命令行执行pip install -r requirements.txt -U PS:请尽量使用xMind8 Up

    2024年02月12日
    浏览(40)
  • 如何在 XMind 中绘制流程图

    XMind 是专业强大的思维导图软件,由于其结构没有任何限制,很多朋友特别喜欢用它来绘制流程图。禁不住大家的多次询问,今天 XMind 酱就将这简单的流程图绘图方法分享给大家。 在 XMind 中,绘制流程图的主角是「自由主题」和「联系」。它们可以打破思维导图的限制,让

    2024年02月10日
    浏览(47)
  • Xmind 网页端登录及多端同步

    好久没用 Xmind 了,前几天登录网页端突然发现没办法登录了,总是跳转到 Xmind AI 页面。本以为他们不再支持网页端了,后来看提示才知道只是迁移到了新的网址,由原来的 xmind.works 现在改成了的  xmind.ai 。又花费好长时间才重新登录上,那就来看看具体是如何操作的吧~

    2024年01月17日
    浏览(36)
  • xmind文件数据解析重构成mindmap可识别数据

    【需求背景】 测试平台开发中,需要引入前端 mindmap 模块,进行在线xmind实时解析并前端展示 【卡点难点】 选取什么库进行xmind解析 如何转换成mindmap可以识别的数据 【xmind解析】 直接选用官方xmind-sdk-python,发现已经2018后停止维护了,解析最新版本报无法识别错误,弃用

    2024年02月09日
    浏览(29)
  • Xmind Copilot 和 iThinkAir 的AI功能比较

    昨晚刚获得Xmind Copilot的使用资格,很高兴地试了试,同时和之前用的iThinkAir的AI功能做个比较。 Xmind Copilot的AI功能主要有几个: One-liner:一句话生成思维导图 注册登录后,界面上就只有一个类似搜索框的输入框。 这里我输入‘阿米巴经营’,点‘给我思维导图’,然后差不

    2024年02月09日
    浏览(39)
  • 关于XMind自动安装到c盘的解决方案

    问题 XMind会默认安装到c盘,如何更改安装盘符释放c盘空间呢? 原理 修改windows系统的默认软件安装位置 一般有“ProgramFilesDir”和“ProgramFilesDir(x86)” 解决方案 1、win+r,输入“regedit”打开注册表编辑器 2、在注册表中,找到如下路径 路径指引:HKEY_LOCAL_MACHINESOFTWAREMicrosof

    2024年02月04日
    浏览(44)
  • Django实现接口自动化平台(十四)测试用例模块Testcases序列化器及视图【持续更新中】

    相关文章: Django实现接口自动化平台(十三)接口模块Interfaces序列化器及视图【持续更新中】_做测试的喵酱的博客-CSDN博客 本章是项目的一个分解,查看本章内容时,要结合整体项目代码来看: python django vue httprunner 实现接口自动化平台(最终版)_python+vue自动化测试平台

    2024年02月17日
    浏览(37)
  • 【python自动化实战-引入trace】在项目中引入trace跟踪每条testcase执行过程中的日志+日志推送es

    最近公司在跑自动化case过程中有很多异常case,有的很难依据现有的日志定位问题(日志多且乱,无关联性),时常需要本地debug才能发现问题,很影响写自动化的效率以及自动化运行的通过率。 因此领导下发了一个需求:需要给每一条case绑定一个trace,通过trace关联case执行过程

    2024年02月04日
    浏览(39)
  • 数据结构:图文详解 树与二叉树(树与二叉树的概念和性质,存储,遍历)

    目录 一.树的概念 二.树中重要的概念 三.二叉树的概念 满二叉树 完全二叉树 四.二叉树的性质 五.二叉树的存储 六.二叉树的遍历 前序遍历 中序遍历  后序遍历  树是一种 非线性数据结构 ,它由节点和边组成。树的每个节点可以有零个或多个子节点,其中一个节点被指定为

    2024年02月04日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包