Chapter5: 如何批量上传测试案例到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">  
        <details>details>  
        <testcase name="1 Check system power on">
            <summary>summary>
            <steps>steps>
            <expectedresults>expectedresults>
            <execution_type>2]]>execution_type> 
            <custom_fields>
                <custom_field>
                    <name>1]]>name> 
                    <value>1 Check system power on.1Main]]>value>  
                custom_field>
            custom_fields>
        testcase>
        <testcase name="2 Check log in system">
            <summary>summary>
            <steps>steps>
            <expectedresults>expectedresults>
            <execution_type>2]]>execution_type>
            <custom_fields>
                <custom_field>
                    <name>1]]>name>
                    <value>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(''))
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(''))
    TestCaseSteps = doc.createElement('steps')
    TestCaseSteps.appendChild(doc.createTextNode(''))
    TestCaseExpectedResults = doc.createElement('expectedresults')
    TestCaseExpectedResults.appendChild(doc.createTextNode(''))
    TestCaseExecutionType = doc.createElement('execution_type')
    TestCaseExecutionType.appendChild(doc.createTextNode(''))
    TestCaseCustomFields = doc.createElement('custom_fields')
    TestCaseCustomField = doc.createElement('custom_field')
    TestCaseCustomFieldName = doc.createElement('name')
    TestCaseCustomFieldName.appendChild(doc.createTextNode(''))
    TestCaseCustomFieldValue = doc.createElement('value')
    TestCaseCustomFieldValue.appendChild(doc.createTextNode('' + 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;转换成
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()