`

Python实现excel测试用例转xml导入到TestLink

 
阅读更多

 

 

 

使用python版本为:3.5

环境要求

1,安装jdk1.8

2,安装python

3,安装python模块xlrd、xml

 

运行(注意:excel文件、xml文件和代码执行文件在同一目录):

1、命令行进入到py文件的目录

(windows系统,cmd进入dos命令窗口,执行:“cd C:\Users\...”,进入到文件所在路径目录,这里举例文件在C:\Users目录下面)

(OS系统,进入终端,输入命令"cd /Users/xiaojingjing/Documents/",进入到文件所在路径目录,这里举例文件在/Users/xiaojingjing/Documents/目录下面,注意⚠️,cd后面有一个空格)

2、执行py脚本文件,举例:脚本为“main.py”

 (windows系统,输入命令:“python main.py”)

(OS系统,输入命令:“python main.py”)

 

excel格式要求:

1,excel文件名称为用例集名称

2,excel文件中的标签对应功能模块名称

3,目前一个testcase只能对应一个步骤和一个预期结果

参考附件截图



 

代码中是自定义测试用例集名称为“运维端app1.2版本”,可以用

testsuitename1=excelfilename[0:-4] 来截取文件前半部分名称来作为测试用例集名称

 

代码如下:

 

# -*- coding:utf-8 -*-
__author__ = '三天',
__time__ = '2018/3/18 下午9:58',
version = '',

from xml.dom.minidom import Document
import xlrd

# 指定生成xml文件名称以及路径,这里是在根目录下
# xmlfilename='testcase.xml'
# 指定源excel文件名称以及路径,这里是在根目录下
excelfilename='your_testCases_suite.xlsx'
# 创建dom文档

doc = Document()
testsuiteid='1233'
#testuitename为用例集名称,按照用例规范确定用例集名称,上线日期+项目版本,例如:20180329好医生APP1.2
testsuitename=excelfilename[0:-5]
print("用例集名称:",testsuitename)
#设置生成xml文件名称与Excel文件名称对应
xmlfilename=testsuitename+'.xml'
testsuite = doc.createElement('testsuite')
#设置根节点属性
testsuite.setAttribute('id',testsuiteid)
testsuite.setAttribute('name',testsuitename)
# 根节点插入dom树
doc.appendChild(testsuite)
# ====================================================
#创建节点node_order
node_order=doc.createElement('node_order')
#创建node_order的文本节点
node_order_text=doc.createTextNode('<![CDATA[5]]>')
#将文本节点插入到<node_order>下
node_order.appendChild(node_order_text)
#将<node_order>插入到父节点<testsuite>下
testsuite.appendChild(node_order)
# =====================================================
#创建节点details
details=doc.createElement('details')
#创建node_order的文本节点
details_text=doc.createTextNode("<![CDATA[]]>")
#将文本节点插入到<node_order>下
details.appendChild(details_text)
#将<node_order>插入到父节点<testsuite>下
testsuite.appendChild(details)


datacases=xlrd.open_workbook(excelfilename)

print("标签数量:",datacases.sheet_names())

sheets=datacases.sheet_names()
case_num = 0
for sheet in sheets:

    sheet1=datacases.sheet_by_name(sheet)

# ====================测试用例功能模块一1⃣️===============================
    #创建节点testsuite
    testsuite1=doc.createElement('testsuite')
    #创建节点testsuite属性
    id='999'
    testsuite1.setAttribute('id',id)
    testsuite1.setAttribute('name',sheet)
    testsuite.appendChild(testsuite1)

    # ====================================================
    #创建节点node_order
    node_order=doc.createElement('node_order')
    #创建node_order的文本节点
    node_order_text=doc.createTextNode('<![CDATA[5]]>')
    #将文本节点插入到<node_order>下
    node_order.appendChild(node_order_text)
    #将<node_order>插入到父节点<testsuite>下
    testsuite1.appendChild(node_order)

    # =====================================================
    #创建节点details
    details=doc.createElement('details')
    #创建node_order的文本节点
    details_text=doc.createTextNode("<![CDATA[]]>")
    #将文本节点插入到<node_order>下
    details.appendChild(details_text)
    #将<node_order>插入到父节点<testsuite>下
    testsuite1.appendChild(details)


    #定义行数为文档中有数据的行数

    row_num=sheet1.nrows
    # print(sheet,"用例个数为:",case_num)
    row_nums = 0
    for i in range(1,row_num):
        # casenum=casenum+1

        # Actions_Number=1
        #定义默认步骤编号第一步
        Actions_Number=sheet1.cell_value(i,0)
        TestCase = sheet1.cell_value(i, 1)
        Summary = sheet1.cell_value(i, 2)
        Preconditions = sheet1.cell_value(i, 3)
        Actions = sheet1.cell_value(i, 4)
        Expectedresults = sheet1.cell_value(i, 5)




        if len(TestCase) <= 1:
            #增加步骤编号
            # Actions_Number=Actions_Number+1

            # # =============================================================

            # 创建节点step
            step = doc.createElement('step')

            steps.appendChild(step)

            # =============================================================

            # =============================================================

            # 创建节点step_number
            step_number = doc.createElement('step_number')
            Actions_Number=str(Actions_Number)
            step_number_text = doc.createTextNode(Actions_Number)
            step_number.appendChild(step_number_text)
            step.appendChild(step_number)

            # =============================================================

            # 创建节点actions
            actions = doc.createElement('actions')
            actions_text = doc.createTextNode(Actions)
            actions.appendChild(actions_text)
            step.appendChild(actions)

            # =============================================================


            # 创建节点expectedresults
            expectedresults = doc.createElement('expectedresults')
            expectedresults_text = doc.createTextNode(Expectedresults)
            expectedresults.appendChild(expectedresults_text)
            step.appendChild(expectedresults)

            # =============================================================

            # 创建节点execution_type
            execution_type = doc.createElement('execution_type')
            execution_type_text = doc.createTextNode("<![CDATA[1]]>")
            execution_type.appendChild(execution_type_text)
            step.appendChild(execution_type)

        else:
            case_num = case_num + 1
            row_nums =row_nums+1
            # 创建节点testcase
            testcase = doc.createElement('testcase')
            # 创建testcase节点属性
            testcase.setAttribute('internalid', 'id')
            testcase.setAttribute('name', TestCase)
            testsuite1.appendChild(testcase)

            # =============================================================
            # 创建节点node_order
            node_order = doc.createElement('node_order')
            # 创建node_order的文本节点
            node_order_text = doc.createTextNode('<![CDATA[1000]]>')
            # 将文本节点插入到<node_order>下
            node_order.appendChild(node_order_text)
            # 将<node_order>插入到父节点<testsuite>下
            testcase.appendChild(node_order)

            # =============================================================
            # 创建节点externalid
            externalid = doc.createElement('externalid')
            # 创建externalid的文本节点
            externalid_text = doc.createTextNode('<![CDATA[216]]>')
            # 将文本节点插入到<externalid>下
            externalid.appendChild(externalid_text)
            # 将<nexternalid>插入到父节点<testsuite>下
            testcase.appendChild(externalid)

            # =============================================================

            # 创建节点version
            version = doc.createElement('version')
            # 创建node_order的文本节点
            version_text = doc.createTextNode('<![CDATA[1]]>')
            # 将文本节点插入到<node_order>下
            version.appendChild(version_text)
            # 将<node_order>插入到父节点<testsuite>下
            testcase.appendChild(version)

            # =============================================================

            # 创建节点summary
            summary = doc.createElement('summary')
            # 创建node_order的文本节点
            summary_conent = '<![CDATA[1]]>' + Summary
            summary_text = doc.createTextNode(summary_conent)
            # 将文本节点插入到<node_order>下
            summary.appendChild(summary_text)
            # 将<node_order>插入到父节点<testsuite>下
            testcase.appendChild(summary)

            # =============================================================
            # preconditions
            # 创建节点preconditions
            preconditions = doc.createElement('preconditions')
            # 创建preconditions的文本节点
            preconditions_conent = '<![CDATA[1]]>' + Preconditions
            preconditions_text = doc.createTextNode(preconditions_conent)
            # 将文本节点插入到<node_order>下
            preconditions.appendChild(preconditions_text)
            # 将<node_order>插入到父节点<testsuite>下
            testcase.appendChild(preconditions)

            # =============================================================

            # =============================================================
            # 创建节点execution_type
            execution_type = doc.createElement('execution_type')
            # 创建preconditions的文本节点
            execution_type_text = doc.createTextNode('<![CDATA[1]]>')
            # 将文本节点插入到<node_order>下
            execution_type.appendChild(execution_type_text)
            # 将<node_order>插入到父节点<testsuite>下
            testcase.appendChild(execution_type)

            # =============================================================

            # 创建节点importance
            importance = doc.createElement('importance')
            # 创建preconditions的文本节点
            importance_text = doc.createTextNode('<![CDATA[2]]>')
            # 将文本节点插入到<node_order>下
            importance.appendChild(importance_text)
            # 将<node_order>插入到父节点<testsuite>下
            testcase.appendChild(importance)

            # =============================================================
            # 创建节点estimated_exec_duration
            estimated_exec_duration = doc.createElement('estimated_exec_duration')
            testcase.appendChild(estimated_exec_duration)

            # =============================================================
            # 创建节点status
            status = doc.createElement('status')
            status_text = doc.createTextNode('1')
            status.appendChild(status_text)
            testcase.appendChild(status)

            # =============================================================
            # 创建节点is_open
            is_open = doc.createElement('is_open')
            is_open_text = doc.createTextNode('1')
            is_open.appendChild(is_open_text)
            testcase.appendChild(is_open)

            # =============================================================
            # 创建节点active
            active = doc.createElement('active')
            active_text = doc.createTextNode('1')
            active.appendChild(active_text)
            testcase.appendChild(active)

            # =============================================================

            # 创建节点steps
            steps = doc.createElement('steps')

            testcase.appendChild(steps)

            # =============================================================

            # 创建节点step
            step = doc.createElement('step')

            steps.appendChild(step)

            # =============================================================

            # 创建节点step_number
            step_number = doc.createElement('step_number')
            step_number_text_count =str(Actions_Number)
            step_number_text = doc.createTextNode(step_number_text_count)
            step_number.appendChild(step_number_text)
            step.appendChild(step_number)

            # =============================================================

            # 创建节点actions
            actions = doc.createElement('actions')
            actions_text = doc.createTextNode(Actions)
            actions.appendChild(actions_text)
            step.appendChild(actions)

            # =============================================================


            # 创建节点expectedresults
            expectedresults = doc.createElement('expectedresults')
            expectedresults_text = doc.createTextNode(Expectedresults)
            expectedresults.appendChild(expectedresults_text)
            step.appendChild(expectedresults)

            # =============================================================

            # 创建节点execution_type
            execution_type = doc.createElement('execution_type')
            execution_type_text = doc.createTextNode("<![CDATA[1]]>")
            execution_type.appendChild(execution_type_text)
            step.appendChild(execution_type)

    print(sheet, "用例个数为:", row_nums)

# 将dom对象写入本地xml文件
with open(xmlfilename, 'w') as f:
    f.write(doc.toprettyxml(indent='\t'))
f.close()

print("共计用例条数为:",case_num,"条!")

 

 

小技巧:

如果要实现换行,需要在excel单元格换行部分增加<p></p>

例如:

<p>1.当前设备已绑定</p>

<p>2.BD工号:123456</p>

<p>3.设备类型:小桩机</p>

<p>4.mac地址:456789</p>

<p>5.门店:哈哈</p>

效果如下:



 

 

 

 

  • 大小: 345.7 KB
  • 大小: 138.9 KB
分享到:
评论

相关推荐

    Testlink 用例导出xml文件转csv格式(python)

    PYTHON2.7编写的脚本,用于将testlink中导出的xml用例文件转换成csv文件; 支持testlink1.9.16

    TestLink用例上传工具,python编写。

    总的来说,这个基于Python编写的TestLink用例上传工具,通过自动化Excel到XML的转换以及与TestLink平台的集成,提高了测试团队的工作效率,减轻了手动操作的负担。其易用性和灵活性使其在测试领域有着实际的应用价值...

    Excel转Xml工具

    总结来说,"Excel转Xml工具"是为了方便用户将Excel数据转换为XML格式,以便于在软件测试环境中,特别是与TestLink系统的交互中,更高效地管理和导入测试数据。这个工具简化了数据格式转换的过程,提高了工作效率,...

    testlinkcasechange.rar

    在本压缩包“testlinkcasechange.rar”中,包含的是一个使用Python编写的程序,该程序能够将Excel文件中的测试用例转换为XML格式,然后将这些XML文件导入到TestLink中。这一过程对于那些习惯使用Excel来编写测试用例...

    excelToXml

    【Excel到XML转换详解】 在软件测试领域,Testlink是一款广泛应用的开源测试管理工具,它支持测试用例的创建、组织和执行。然而,在实际工作中,我们可能需要将已有的Excel测试用例表格导入到Testlink中,这时就...

    《自拍教程64》Python Testlink用例导入拆分Excel工具

    本教程主要针对Testlink在导入测试用例时遇到的问题以及如何通过Python工具进行解决,特别是对XML格式的测试用例文件进行拆分和导入。 Testlink支持多种格式的测试用例导入,其中XML格式由于其结构化和灵活性,被...

    Python实现将xml导入至excel

    本篇文章主要介绍如何使用Python的`xml.dom.minidom`和`xlwt`库将XML数据导入到Excel表格中。 首先,我们需要了解XML文件的基本结构。XML(Extensible Markup Language)是一种用于存储和传输结构化数据的标准格式...

    TestLink-API-Python-client:用于TestLink的Python XML-RPC客户端-开源

    TestLink-API-Python-client是用于TestLink的Python XML-RPC客户端,最初基于James Stock testlink-api-python-client R7和Olivier Renault JinFeng的想法-TestLink,Robot Framework和Jenkins的交互。 TestLink-API...

    python-unittest-v2.zip

    - 将unittest的结果回写到TestLink通常需要使用API接口,开发一个适配器或者利用已有的库如`testlink-api-python-client`来实现数据同步。 6. **集成自动化测试**: - 可以将unittest测试脚本集成到持续集成/持续...

    xmlToexcel.py

    testlink导出用例为xml格式,python写了个脚本,支持将xml用例转为excel。

Global site tag (gtag.js) - Google Analytics