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文件中&lt;![CDATA[]]&glt;转换成<![CDATA[]]>
fp = open('C:\\Users\\xxx\\Desktop\\TestSuiteAndTestCases.xml', 'r')
content = fp.read()
content = content.replace("&lt;",'<')
newcontent = content.replace("&gt;",'>')
with open("C:\\Users\\xxx\\Desktop\\TestSuiteAndTestCases.xml",'w') as fp:
    fp.write(newcontent)
fp.close()

 

posted on 2020-08-30 16:25  swee632  阅读(602)  评论(0编辑  收藏  举报

导航