• TestLink学习七:TestLink测试用例Excel转换XML工具


    最近在整理测试用例,所以想找一个合适的工具来完成对测试需求、测试用例的管理。对比了一翻,发现开源工具中扩展比较好的还属TestLink,而且还可以与JIRA进行对接,这样就引起了我更大的兴趣。加上之前本来就接触过此工具,只是源于各种原因没能深入去研究来着,这次也就是决心于此!于是就找来了Testlink的最新版1.9.3,将其搭建在Ubuntu Server上,很快我们就可以正常方访问了。不过说实话,Testlink界面确实很难看,不过毕竟它不是商业工具,而且可以自己去扩展并定制开发,这就是最大的优点了。

      Testlink平台完成之后,接下来就要面临的是测试用例的管理,面临大量的测试用例excel表格,当然最便捷的就是能够快速的通过导入方式将所有的用例都导入到Testlink中,不过即便走到这一步,才发现原来开源的软件真是可爱有可恨。虽然1.9.3版本中导入用例选项中提供了XML和XLS两种格式来导入,但试过之后发现XLS格式导入excel,并不能导入成功,至于为何导不成功,我想基本是我们自己的excel文档格式与testlink内部定义不一致导致的,与其去研究他哪些格式不对,还不如尝试另一种方式XML导入。说到这里,便立刻去网上翻了一翻,发现没有现成可以用的工具以及方法,即便有一个,居然还是收费的~其实,Excel转换XML,基本思路都差不多,也就是将Excel单元格的数据取出来,然后通过一些拼凑,成为与XML格式一致,然后生成XML即可,不过这个中间的转换还是比较麻烦的,基本步骤如下:

      1、首先,在Testlink中手动编写一个测试用例

      2、然后,将刚才编写的用例导出一份XML格式

      3、通过编辑工具打开XML文件,取其格式

      4、通过脚本读取Excel文件以及单元格的内容

      5、接着将读取的Excel单元格内容对应XML格式进行拼接,完成符合XML的格式

      6、最后生成XML文件

    思路基本上就是这样了,经过一番周折,我这里通过VBS来模拟完成了此过程,而且还有辅助界面,这样避免了因为不同文件不同路径而需要每次都修改源代码,界面基本实现如下:

      1、先获取文件,这里需要输入绝对的文件路径和名称,如下图:  

      

      2、按照如上步骤,确定之后,需要输入读取的Excel中目标表格的名称,如下图:

      

      3、接着以上步骤,确定之后,需要输入转换之后的XML文件保存的路径以及名称,如下图:  

      

      4、确定后待转换结束,会给出提示,并提示总共完成多少条数据的转换,如下图所示:

      

      基本上通过如上四个步骤就能快速完成Excel转换XML,然后就可以通过转换之后的XML格式的文件导入TestLink的测试用例中,如果导入成功,则说明脚本正确地完成此了此功能~

      下一章节中将会详细介绍代码的实现,并贴出源代码~

    以下是通过VBScript实现的Excel数据转换成XML格式,主要用于实现Testlink1.9.3~1.9.10的测试用例导入。代码实现如下:

    根据到处的测试用例xml,定义一下我的Excel的格式如下:

    编号 用例名称 摘要 重要性 测试方式 前提 步骤 期望结果 实际结果
    1 2 3 4 5 6 7 8 9

     

     

    如果还没有开始写用例的,可以一依据这个模板,在excel中编写用例,以下脚本是按照单元格的顺序读取的,所以这里的格式要调整,脚本中也要做相应的调整。

    脚本实现如下:

    Dim objexcel,objworkbook,objsheet,objxml_inter,objxml,totalrow,row,id,excelStr

    '========================================
    '创建Excel对象,关闭Excel对象--函数
    '=========================================
    Function getExcel(excelname, excelpath)
    Set objexcel = CreateObject("excel.application")
    Set objworkbook = objexcel.Workbooks.Open(excelpath)
    Set objsheet = objworkbook.Sheets(excelname)
    End Function

    Function clsExcel()
    objworkbook.Close
    End Function
    '============================================

    Function dealStr(excelStr)
        For id=2 To 8
            excelStr = Replace(excelStr,id&"、","<br/>"&id&"、")
            excelStr = Replace(excelStr,id&".","<br/>"&id&".")
        Next
        dealStr=excelStr
    End Function


    '========================
    '获取Excel单元格数据,并将XML的格式写入到对应的单元格,之后通过创建XML对象生成XML文件
    '========================
    Function getExcelData()
    row=2
    objxml_inter=""
    Do While Not (objsheet.cells(row,2).value="")

    'internalid
    objxml_inter=objxml_inter&CStr("<testcase internalid=""")  '
    objxml_inter=objxml_inter&CStr(dealStr(objsheet.cells(row,1))) '内部用例编号
    objxml_inter=objxml_inter&CStr(""" name=""")

    'caseName
    objxml_inter=objxml_inter&CStr(dealStr(objsheet.cells(row,2))) '用例名称
    objxml_inter=objxml_inter&CStr(""">")


    objxml_inter=objxml_inter&CStr("<node_order><![CDATA[0]]></node_order>")

    'externalid
    objxml_inter=objxml_inter&CStr("<externalid><![CDATA[")
    objxml_inter=objxml_inter&CStr(dealStr(objsheet.cells(row,1))) '外部用例编号
    objxml_inter=objxml_inter&CStr("]]></externalid>")

    'summary
    objxml_inter=objxml_inter&CStr("<summary><![CDATA[<p>")
    objxml_inter=objxml_inter&CStr(dealStr(objsheet.cells(row,3))) '摘要
    objxml_inter=objxml_inter&CStr("</p>]]></summary>")

    'preconditions
    objxml_inter=objxml_inter&CStr("<preconditions><![CDATA[<p>")
    objxml_inter=objxml_inter&CStr(dealStr(objsheet.cells(row,6))) '前置条件
    objxml_inter=objxml_inter&CStr("</p>]]></preconditions>")

    'execution_type    '执行方式
    objxml_inter=objxml_inter&CStr("<execution_type><![CDATA[1]]></execution_type>")

    'importance    '重要性
    objxml_inter=objxml_inter&CStr("<importance><![CDATA[2]]></importance>")

    'steps
    objxml_inter=objxml_inter&CStr("<steps>")

    'step
    objxml_inter=objxml_inter&CStr("<step>")

    'step_number
    objxml_inter=objxml_inter&CStr("<step_number><![CDATA[1]]></step_number>")

    'action
    objxml_inter=objxml_inter&CStr("<actions><![CDATA[<p>")
    objxml_inter=objxml_inter&CStr(dealStr(objsheet.cells(row,7))) '测试步骤
    objxml_inter=objxml_inter&CStr("</p>]]></actions>")

    'expectedresults
    objxml_inter=objxml_inter&CStr("<expectedresults><![CDATA[<p>")
    objxml_inter=objxml_inter&CStr(dealStr(objsheet.cells(row,8))) '预期结果
    objxml_inter=objxml_inter&CStr("</p>]]></expectedresults>")

    'execution_type
    objxml_inter=objxml_inter&CStr("<execution_type><![CDATA[1]]></execution_type>")

    objxml_inter=objxml_inter&CStr("</step>")
    objxml_inter=objxml_inter&CStr("</steps>")

    objxml_inter=objxml_inter&CStr("</testcase>")

    'CStr(objsheet.cells(x,1)),CStr(objsheet.cells(x,2))
    'MyFile.Write(objxml_inter)
    'WScript.Echo x-1
    row=row+1
    Loop
    totalrow = row-2
    End Function



    '========================
    '创建XML文件
    '========================
    Sub CreateXML
    Dim fileObj, XmlFile
    Set fileObj = CreateObject("Scripting.FileSystemObject")
    Set XmlFile = fileObj.CreateTextFile(XMLname, True)
    'xml title
    objxml=CStr("<?xml version=""1.0"" encoding=""GBK""?>")
    objxml=objxml&CStr("<testcases>")
    objxml=objxml&objxml_inter
    objxml=objxml&CStr("</testcases>")
    XmlFile.Write(objxml)
    XmlFile.Close
    End Sub

    excelpath = Inputbox("请输入Excel文件正确的路径名和文件名:","TestLink 1.9.10小助手: Excel转换XML工具")

    If excelpath = "" Then
        MsgBox "文件名不能为空!"
        WScript.Quit
    ElseIf InStr(excelpath,".xls") < 1 Then
        MsgBox "文件名格式不对!"
        WScript.Quit
    End    If


    excelname = InputBox("请输入Excel中所要操作的表格名称:","TestLink 1.9.10小助手: Excel转换XML工具")

    If excelname = "" Then
        MsgBox "文件名不能为空!"
        WScript.Quit
    End If

    XMLname = InputBox("请输入转换之后的XML文件保存路径和名称:","TestLink 1.9.10小助手: Excel转换XML工具")
    If XMLname = "" Then
        MsgBox "文件名不能为空!"
        WScript.Quit
    ElseIf    InStr(XMLname,".xml") < 1 Then
        MsgBox "文件名格式不对!"
        WScript.Quit
    End    If

    '初始化excel对象
    Call getExcel(excelname, excelpath)
    '读入Excel数据
    Call getExcelData()
    '写入数据, XML
    CreateXML
    '关闭Excel对象
    Call clsExcel()

    '提示信息
    MsgBox "完成从Excel到XML的数据转换,总共"+CStr(totalrow)+"条!"

    脚本保存本地,选择编码方式为unicode,后缀名为.vbs

    2014-7-11-log:解决导入用户提示外部用例ID相同的问题,直接取excel表中的用例编号,所以excel表中的用例编号是不能相同的,应该是唯一的。

  • 相关阅读:
    JqueryAjax 常用复制
    linux 下调用wps 注意
    java 里执行javascript代码
    JS学习笔记
    javascript 区域外事件捕捉setCapture
    【MySQL基础打卡(一)】查询语句项目作业
    【分类问题中模型的性能度量(二)】超强整理,超详细解析,一文彻底搞懂ROC、AUC
    【分类问题中模型的性能度量(一)】错误率、精度、查准率、查全率、F1详细讲解
    【机器学习实战学习笔记(1-2)】k-近邻算法应用实例python代码
    【机器学习实战学习笔记(1-1)】k-近邻算法原理及python实现
  • 原文地址:https://www.cnblogs.com/hujiang1985/p/7236385.html
Copyright © 2020-2023  润新知