Chapter5: 如何批量上传测试案例到Testlink中
本系列文章见总链接:
总章:TestStand+Jenkins+Testlink 自动化测试平台搭建
为了批量创建Testcase,可以借助Testlink提供的import功能。本文样例以Testlink1.9.20做展示
帮助文档:
在testlink路径下C:\xampp\htdocs\testlink-1.9.20\docs\tl-file-formats.pdf可以找到上次的XML文件的格式说明
XML文件格式
参照文档介绍,可以上传整个TestSuite,包括Testcases也可以只上传单个Testcase。接下来就直接解读具体被上传的XML文件,参照代码注释。
<?xml version="1.0" encoding="utf-8"?> <testsuite name="TestSuite1"> <!-- 要上传整个TestSuite,就需要从testsuite标签开始 --> <details><![CDATA[]]></details> <!-- 值为空,代表不写入数据 --> <testcase name="1 Check system power on"> <summary><![CDATA[]]></summary> <steps><![CDATA[]]></steps> <expectedresults><![CDATA[]]></expectedresults> <execution_type><![CDATA[2]]></execution_type> <!-- 值为2,代表Automated, 若值为1,代表Manual --> <custom_fields> <custom_field> <name><![CDATA[1]]></name> <!-- 值为1,代表我testlink中field_id为1的custom field,即robot --> <value><![CDATA[1 Check system power on.1Main]]></value> <!-- 填入Custom field的值,即“文件名.1Main” --> </custom_field> </custom_fields> </testcase> <testcase name="2 Check log in system"> <summary><![CDATA[]]></summary> <steps><![CDATA[]]></steps> <expectedresults><![CDATA[]]></expectedresults> <execution_type><![CDATA[2]]></execution_type> <custom_fields> <custom_field> <name><![CDATA[1]]></name> <value><![CDATA[2 Check log in system.1Main]]></value> </custom_field> </custom_fields> </testcase> </testsuite>
需要注意的是,这里custom field的name值,不能写实际定义的名字,需要写field_id值。可以从数据库中查看
上传XML文件
在主页面,选择“Test Specification”,双击左侧的项目名,点击右侧的工具按钮,可以看到上传图标,点击。
对于Action for duplicates,可以有4个选项,1)不要上传,2)更新之前的版本,3)创建一个不同名的testcase,4)创建一个新版本。
选择创建好的XML文件,点击Upload file按钮上传。会提示上传结果为ok。
查看testcase
Execution Type为Automated, robot值为"1 Check system power on.1Main"
利用Python脚本创建可以上传的XML文件
import xml.dom.minidom import re #在内存中创建一个空的文档 doc = xml.dom.minidom.Document() #创建一个根节点TestSuite对象 TestSuite = doc.createElement('testsuite') #设置根节点的属性 TestSuite.setAttribute('name', 'TestSuite1') Details = doc.createElement('details') Details.appendChild(doc.createTextNode('<![CDATA[]]>')) TestSuite.appendChild(Details) #将根节点添加到文档对象中 doc.appendChild(TestSuite) txtfile = open('C:\\IncludeTeststandScriptFileName.txt', "rb") for eachline in txtfile.readlines(): TestCase = doc.createElement('testcase') print(eachline) type(eachline) eachline=eachline.decode() type(eachline) TestCaseName = eachline.strip().split('.seq') TestCase.setAttribute('name', TestCaseName[0]) print(TestCaseName[0]) #给叶子节点summary设置一个文本节点,用于显示文本内容 TestCaseSummary = doc.createElement('summary') TestCaseSummary.appendChild(doc.createTextNode('<![CDATA[]]>')) TestCaseSteps = doc.createElement('steps') TestCaseSteps.appendChild(doc.createTextNode('<![CDATA[]]>')) TestCaseExpectedResults = doc.createElement('expectedresults') TestCaseExpectedResults.appendChild(doc.createTextNode('<![CDATA[]]>')) TestCaseExecutionType = doc.createElement('execution_type') TestCaseExecutionType.appendChild(doc.createTextNode('<![CDATA[2]]>')) TestCaseCustomFields = doc.createElement('custom_fields') TestCaseCustomField = doc.createElement('custom_field') TestCaseCustomFieldName = doc.createElement('name') TestCaseCustomFieldName.appendChild(doc.createTextNode('<![CDATA[2]]>')) TestCaseCustomFieldValue = doc.createElement('value') TestCaseCustomFieldValue.appendChild(doc.createTextNode('<![CDATA[' + TestCaseName[0] + '.1Main' + ']]>')) #将各叶子节点添加到父节点TestCase中, TestCaseCustomField.appendChild(TestCaseCustomFieldName) TestCaseCustomField.appendChild(TestCaseCustomFieldValue) TestCaseCustomFields.appendChild(TestCaseCustomField) TestCase.appendChild(TestCaseSummary) TestCase.appendChild(TestCaseSteps) TestCase.appendChild(TestCaseExpectedResults) TestCase.appendChild(TestCaseExecutionType) TestCase.appendChild(TestCaseCustomFields) #最后将TestCase添加到根节点TestSuite中 TestSuite.appendChild(TestCase) #开始写xml文档 fp = open('C:\\Users\\xxx\\Desktop\\TestSuiteAndTestCases.xml', 'w') doc.writexml(fp, indent='\t', addindent='\t', newl='\n', encoding="utf-8") fp.close() txtfile.close() #将生成的XML文件中<![CDATA[]]&glt;转换成<![CDATA[]]> fp = open('C:\\Users\\xxx\\Desktop\\TestSuiteAndTestCases.xml', 'r') content = fp.read() content = content.replace("<",'<') newcontent = content.replace(">",'>') with open("C:\\Users\\xxx\\Desktop\\TestSuiteAndTestCases.xml",'w') as fp: fp.write(newcontent) fp.close()