如何进行自动化批处理测试

本节展示了运行自动化测试和处理结果的多种方法。推荐的较新方法将首先列出,较旧的方法则为了历史目的而列出。请参阅自动化批量测试

处理测试结果

将结果上传到Squish测试中心

本节展示了如何使用squishrunner命令行程序直接生成并上传XML测试结果到Squish测试中心。

为了演示,我们将查看运行我们之前使用的示例测试套件suite_addressbook_py产生的结果。该测试用例检查将这些数据输入到简单的addressbook自动测试单元(AUT)是否按预期工作。

当我们使用testcenter报告生成器时,我们提供了Squish测试中心运行实例的URL。squishserver也必须已运行。

squishrunner --testsuite suite_addressbook_py --reportgen testcenter,http://localhost:8800/project/MyProject?token=MyToken&label=MyLabelKey1%3DMyLabelValue1&label=OS%3DLinux&batch=MyBatch

Squish测试中心的提供的URL在其查询字符串中包含额外的信息,这些信息确定如何将其组织在结果数据库中。

  • 项目名称,MyProject
  • 某种形式的认证,例如用户名和密码,或者在这种情况下,上传令牌,MyToken。有关详细信息,请参阅Squish测试中心文档
  • 0个或多个label=,每个可以包含一个键值对,其中等于URL编码为%3D。URL上面的编码标签是MyLabelKey1=MyLabelValue1OS=Linux
  • 批次名称,MyBatch,可以是任意字符串。分支名称或版本号通常在这里使用。

项目名称、批次和标签是在Web界面中用于组织选择测试报告的概念,并在此处更详细地解释

结果上传后,可以通过Web浏览器导航到Squish测试中心的URL来查看HTML报告。

生成HTML测试结果

在本节中,我们将演示如何将Squish的结果直接生成到HTML格式。

Squish使用HTML意味着测试结果可以在Web浏览器中轻松处理和查看。

为了演示,我们将查看由我们之前使用的示例测试套件suite_addressbook_py产生的HTML结果。该测试用例检查将这些数据输入到简单的addressbookAUT是否按预期工作。

要生成HTML报告,我们使用squishrunner运行测试套件——当然,squishserver必须已经运行

squishrunner --testsuite suite_addressbook_py --reportgen html,/tmp/results

如您可能注意到的那样,我们再次使用了--reportgen选项,并提供了html作为值。其语法与我们用于其他报告类型的方法相同。除了提及报告类型外,我们还指定了最终数据将存储的结果目录/tmp/results。如果目录已存在且包含以前的执行结果,则新的执行结果将附加到现有结果中并产生聚合报告。

由于我们指定了html格式,squishrunner将在指定的目录中生成HTML报告。您可以在任何Web浏览器中打开index.html结果文件进行查看和分析。

"Example Web Report generated by squishrunner run with \c {--reportgen} option"

生成XML测试结果

自动化测试运行的一个重要部分是将测试结果以易于访问的格式展示,以便测试团队能立即发现任何发生的问题。Squish可以将测试结果以XML格式保存,该格式非常适合任意处理。在本节中,我们将展示一个Python脚本,该脚本可以将Squish的XML输出格式转换为HTML。

Squish使用XML意味着测试结果可以轻松被处理成其他工具使用的格式。这使得将Squish测试运行的结果集成到测试管理系统中变得可能。无论输出是HTML还是其他格式,变换Squish XML格式数据所需的处理方式都是相同的,因此尽管本节展示了从XML到HTML的变换,其中展示的概念和方法也可以用于任何其他需要的变换。

为了转换Squish结果XML格式,我们首先必须理解其格式,如《处理测试结果》中所述。

为了更具体地说明问题,我们将查看由运行包含一个测试用例的示例suite_py测试套件产生的XML测试结果文件。该测试用例检查将某些数据输入到简单的addressbook AUT中是否符合预期。

为了生成XML报告,我们使用squishrunner运行测试套件——当然,squishserver必须已经运行。

squishrunner --testsuite suite_addressbook_py --reportgen xml3.5,/tmp/results

--reportgen的有效值取决于Squish的版本,并列在squishrunner –reportgen:生成报告中。

由于我们指定了xml3.5格式,因此我们获得了一个类似于以下所示的XML结果文件

<?xml version="1.0" encoding="UTF-8"?>
<SquishReport version="3.4" xmlns="http://www.froglogic.com/resources/schemas/xml3">
    <test type="testsuite">
        <prolog time="2015-06-19T11:22:27+02:00">
            <name><![CDATA[suite_test]]>%lt;/name>
            <location>
                <uri><![CDATA[file:///D:/downloads/simple]]>%lt;/uri>
            </location>
        </prolog>
        <test type="testcase">
            <prolog time="2015-06-19T11:22:27+02:00">
                <name><![CDATA[tst_case1]]></name>
                <location>
                    <uri><![CDATA[x-testsuite:/tst_case1]]>%lt;/uri>
                </location>
            </prolog>
            <verification>
                <location>
                    <uri><![CDATA[x-testcase:/test.py]]></uri>
                    <lineNo><![CDATA[2]]></lineNo>
                </location>
                <scriptedVerificationResult time="2015-06-19T11:22:27+02:00" type="PASS">
                    <scriptedLocation>
                        <uri><![CDATA[x-testcase:/test.py]]>%lt;/uri>
                        <lineNo><![CDATA[2]]></lineNo>
                    </scriptedLocation>
                    <text><![CDATA[Verified]]></text>
                    <detail><![CDATA[True expression]]></detail>
                </scriptedVerificationResult>
            </verification>
            <verification>
                <location>
                    <uri><![CDATA[x-testcase:/test.py]]></uri>
                    <lineNo><![CDATA[3]]></lineNo>
                </location>
                <scriptedVerificationResult time="2015-06-19T11:22:27+02:00" type="FAIL">
                    <scriptedLocation>
                        <uri><![CDATA[x-testcase:/test.py]]></uri>
                        <lineNo><![CDATA[3]]></lineNo>
                    </scriptedLocation>
                    <text><![CDATA[Comparison]]></text>
                    <detail><![CDATA['foo' and 'goo' are not equal]]></detail>
                </scriptedVerificationResult>
            </verification>
            <epilog time="2015-06-19T11:22:27+02:00"/>
        </test>
        <epilog time="2015-06-19T11:22:27+02:00"/>
    </test>
</SquishReport>

xml3 XML格式在《报告格式》中描述。

自动运行测试

本节展示了如何自动化运行测试,并调用squishxml3html.py脚本来将XML报告转换为HTML。这是在Squish还没有HTML报告生成器或Jenkins集成之前编写的,此处仅作学术/历史用途。

以下是如何在Shell或命令提示符中直接使用squishxml3html.py的一个示例

cd squish_dir
./python2/bin/python ./examples/regressiontesting/squishxml3html.py -d /home/myuser/squish_reports_html /home/myuser/squish_xml3_report/results.xml

执行此操作后,HTML报告将位于/home/myuser/squish_reports_html

为了自动化这一点,我们只需要定义一系列测试套件和主机,然后使用循环,在所有主机上使用squishrunner运行测试套件。然后使用squishxml3html.py程序自动将这些结果是XML文件转换为HTML。HTML结果的文件名包含日期、测试套件和主机,以确保它们是唯一的。

squishruntests.py脚本提供了我们所需要的自动化。它从与squishruntests.py脚本相同的目录中简单的.ini格式文件中读取所需的信息,默认为runtests.ini。可以在命令行上使用-i--ini选项指定另一个.ini文件。

以下是一个示例runtests.ini文件——仅必需的键值是SQUISHDIRSUITES——所以其他的可以省略。

# Use ~ to stand for your HOME directory---on Windows or Unix
SQUISHDIR = ~/opt/squish/bin
SUITES = ~/testing/myapp/version1/suite_main \
        ~/testing/myapp/version1.1/suite_main \
        ~/testing/myapp/version1.1/suite_extra
RESULTSDIR = ~/testing/myapp/results
HOSTS = 127.0.0.1
PRESERVE = 0
ISO = 1

SQUISHDIR键值是必需的,必须设置为找到Squish可执行文件的路劲。

SUITES键值是必需的,必须设置为一个或多个以空格分隔的套件路径(每个路径都必须包含一个suite.conf文件)。

RESULTSDIR键值是可选的,应设置为目标XML和HTML结果文件必须去的路劲。如果不存在,将会创建该目录。默认是当前目录。

HOSTS键值是可选的,应设置为一或多个由空格分隔的主机名或IP地址。每个测试套件将在每个主机上执行。默认为单个主机,127.0.0.1,本地机器,并使用Squish的默认端口号。每个主机名或IP地址后可以跟一个冒号和一个端口号。例如:192.0.4.67:9812。

PRESERVE键值是可选的,默认为0(不保存消息的格式)。如果设置为1,结果HTML文件中日志消息和类似的格式将得到保留。

ISO键值是可选的,默认为0(使用特定区域的日期/时间格式);设置为1以使用ISO 8601日期/时间格式。

如示例文件所示,长行可以通过转义换行符分散到多行。此外,可以使用~来代表您的家目录。

运行此脚本时,假定squishserver在所有指定主机上运行,并且AUT路径已设置,以便测试套件运行的AUT可以被找到。

最后一步就是让squishruntests.py脚本自动运行,例如每晚运行一次,以确保没有将回归引入到AUT中。这通常是在CI(持续集成)系统(如Jenkins)中完成的。

结论

本节展示了如何使用Squish的命令行工具和不同的报告生成器设置自动测试运行。最能提供灵活性的方法是上传结果到Squish测试中心,因为从那里可以在网页浏览器中轻松查看结果,或下载到其他squishide

©2024 The Qt Company Ltd. 文档中的贡献均为各自拥有者的版权。
所述文档根据《GNU自由文档许可》第1.3版许可提供,由自由软件基金会发布。
Qt及其相关标志是芬兰以及全球其他国家和地区的The Qt Company Ltd.的商标。所有其他商标均为其各自拥有者的财产。