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表中的用例编号是不能相同的,应该是唯一的。