背景: xmind2testcase 个人觉得是一个非常好用,因为个人习惯使用 xmind,就想着写用例的时候只有 xmind 来提高写用例的效率,在 testerhome 中发现这个方案,在此感谢大佬提供开源,感谢 testerhome。由于个人习惯倾向使用 excel,所以改了源码。由于技术有限,只能改成这样,大家要是有更好的方案希望留下宝贵意见。本人菜鸟第一帖,不喜勿喷!!!

1.在 zentao.py 文件中增加写入 excel 的方法,写入 excel 采用的是 openpyxl。实现代码如下:

def xmind_to_zento_excel_file(xmind_file):
    """
        写入excle文件xlsx
    """
    xmind_file = get_absolute_path(xmind_file)
    logging.info('Start converting XMind file(%s) to zentao file...', xmind_file)
    testcases = get_xmind_testcase_list(xmind_file)
    fileheader = ["所属模块", "用例标题", "前置条件", "步骤", "预期", "关键词", "优先级", "用例类型", "适用阶段", "相关研发需求"]
    zentao_testcase_rows = [fileheader]
    for testcase in testcases:
        row = gen_a_testcase_row(testcase)
        zentao_testcase_rows.append(row)
    zentao_file = xmind_file[:-7] + ".xlsx"
    if os.path.exists(zentao_file):
        os.remove(zentao_file)
        logging.info('The zentao csv file already exists, return it directly: %s', zentao_file)

    workbook = openpyxl.workbook.Workbook()
    ws = workbook.active
    line = 1
    for data in zentao_testcase_rows:
        for col in range(1, len(data) + 1):
            ws.cell(row=line, column=col).value = data[col - 1]
        line += 1
    workbook.save(zentao_file)
    logging.info('Convert XMind file(%s) to a zentao csv file(%s) successfully!', xmind_file, zentao_file)
    return zentao_file

2.在 application.py 文件增加导入 excel 的视图函数,

@app.route('/<filename>/to/zentao_excle')
def download_zentao_excle_file(filename):
    full_path = join(app.config['UPLOAD_FOLDER'], filename)

    if not exists(full_path):
        abort(404)

    zentao_excel_file = xmind_to_zento_excel_file(full_path)
    filename = os.path.basename(zentao_excel_file) if zentao_excel_file else abort(404)

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

3..在 application.py 文件中修改删除函数 delete_record 和 delete_records

def delete_record(filename, record_id):
    xmind_file = join(app.config['UPLOAD_FOLDER'], filename)
    testlink_file = join(app.config['UPLOAD_FOLDER'], filename[:-5] + 'xml')
    zentao_file = join(app.config['UPLOAD_FOLDER'], filename[:-5] + 'csv')
    zentao_file_exlce = join(app.config["UPLOAD_FOLDER"], filename[:-6] + "xlsx") #此处修改,增加删除excle文件

    for f in [xmind_file, testlink_file, zentao_file, zentao_file_exlce]:#此处修改,增加删除excle文件
        if exists(f):
            os.remove(f)

    c = g.db.cursor()
    sql = 'UPDATE records SET is_deleted=1 WHERE id = ?'
    c.execute(sql, (record_id,))
    g.db.commit()


def delete_records(keep=20):
    """Clean up files on server and mark the record as deleted"""
    sql = "SELECT * from records where is_deleted<>1 ORDER BY id desc LIMIT -1 offset {}".format(keep)
    assert isinstance(g.db, sqlite3.Connection)
    c = g.db.cursor()
    c.execute(sql)
    rows = c.fetchall()
    for row in rows:
        name = row[1]
        xmind_file = join(app.config['UPLOAD_FOLDER'], name)
        testlink_file = join(app.config['UPLOAD_FOLDER'], name[:-5] + 'xml')
        zentao_file = join(app.config['UPLOAD_FOLDER'], name[:-5] + 'csv')
        zentao_file_excle = join(app.config["UPLOAD_FOLDER", name[:-6] + 'xslx'])#此处修改,增加删除excle文件

        for f in [xmind_file, testlink_file, zentao_file, zentao_file_excle]:#此处修改,增加删除excle文件
            if exists(f):
                os.remove(f)

        sql = 'UPDATE records SET is_deleted=1 WHERE id = ?'
        c.execute(sql, (row[0],))
        g.db.commit()

4.在 index.html 和 preview.html 中增加导出 excle 文件,修改源码
indexl.html 文件中修改如下

<tbody>
                   {% for record in records %}
                       <tr>
                           <td title="{{ record[1] }}"> {{ record[0] }}</td>
                           <td>{{ record[2] }}</td>
                           <td><a href="{{ url_for('uploaded_file',filename=record[1]) }}">XMIND</a> |
                               <a href="{{ url_for("download_zentao_excle_file", filename=record[1]) }}">excel</a> |{#                                此处修改!!!#}
                               <a href="{{ url_for('download_zentao_file',filename=record[1]) }}">csv</a> |
                               <a href="{{ url_for('download_testlink_file',filename=record[1]) }}">XML</a> |
                               <a href="{{ url_for('preview_file',filename=record[1]) }}">PREVIEW</a> |
                               <a href="{{ url_for('delete_file',filename=record[1], record_id=record[4]) }}">DELETE</a>
                           </td>
                       </tr>
                   {% endfor %}

                   </tbody>

preview.html 修改如下

<div class="header">
    <h1>{{ name }} - Preview</h1>
    <h2>TestSuites: {{ suite_count }} / TestCases: {{ suite | length }}
        / <a href="{{ url_for("download_zentao_file",filename= name) }}">Get Zentao CSV</a>
        / <a href="{{ url_for("download_zentao_excle_file",filename= name) }}">Get Zentao XSLX</a> {#                                此处修改!!!#}
        / <a href="{{ url_for("download_testlink_file",filename= name) }}">Get TestLink XML</a>
        / <a href="{{ url_for("index") }}">Go Back</a></h2>
</div>


↙↙↙阅读原文可查看相关链接,并与作者交流