3.5创建输出
执行测试时会创建几个输出文件,并且所有这些文件都与测试结果有某种关联。本节讨论创建的输出,如何配置它们的创建位置以及如何微调其内容。
3.5.1不同的输出文件
本节介绍可以创建的不同输出文件以及如何配置它们的创建位置。使用命令行选项配置输出文件,命令行选项将有问题的输出文件的路径作为参数获取。特殊值NONE (不区分大小写)可用于禁用创建特定输出文件。
输出目录
可以使用绝对路径设置所有输出文件,在这种情况下,它们将创建到指定位置,但在其他情况下,路径被视为相对于输出目录。默认输出目录是从中开始执行的目录,但可以使用--outputdir(-d)选项进行更改。使用此选项设置的路径再次相对于执行目录,但自然也可以作为绝对路径给出。无论如何获得单个输出文件的路径,如果它不存在,则自动创建其父目录。
输出文件
输出文件包含XML格式的所有测试执行结果。日志和报告文件是基于输出文件生成的,输出文件也可以在测试执行后进行组合和后处理。
命令行选项--output(-o)确定相对于输出目录创建输出文件的路径。运行测试时,输出文件的默认名称是output.xml。
当后处理输出时,除非明确使用--output(-o)选项,否则不会创建新的输出文件 。
从Robot Framework 2.6开始,在运行具有特殊值NONE的测试时,也可以禁用输出文件的创建。在这种情况下,还会禁用除调试文件之外的其他输出文件。
日志文件
日志文件包含有关HTML格式的已执行测试用例的详细信息。它们具有分层结构,显示测试套件,测试用例和关键字详细信息。几乎每次要详细调查测试结果时都需要日志文件。即使日志文件也有统计信息,报告也可以更好地获得更高级别的概述。
命令行选项--log(-l)确定创建日志文件的位置。除非使用特殊值NONE,否则始终会创建日志文件,其默认名称为 log.html。
报告文件
报告文件包含HTML格式的测试执行结果的概述。它们具有基于标签和执行的测试套件的统计信息,以及所有已执行测试用例的列表。生成报告和日志时,报告具有指向日志文件的链接,以便于导航到更详细的信息。从报告中很容易看到整体测试执行状态,因为如果所有关键测试都通过,其背景颜色为绿色,否则为亮红色。
命令行选项--report(-r)确定创建报告文件的位置。与日志文件类似,除非将NONE用作值,否则始终会创建报告,其默认名称为report.html。
XUnit兼容的结果文件
XUnit结果文件包含XUnit兼容XML格式的测试运行摘要。此文件可用作处理XUnit数据的工具的输入。例如,Hudson持续集成服务器内置了对此输出格式的支持,可以配置为基于此文件生成测试历史记录。
除非明确使用命令行选项--xunitfile(-x),否则不会创建XUnit输出文件 。
调试文件
调试文件是在测试执行期间写入的纯文本文件。从测试库获得的所有消息都写入它们,以及有关已启动和已结束的测试套件,测试用例和关键字的信息。调试文件可用于监视测试执行。这可以使用,例如,单独的fileviewer.py 工具,或在类UNIX系统中,只需使用tail -f命令即可完成。
除非明确使用命令行选项--debugfile(-b),否则不会创建调试文件 。
时间戳输出文件
本节中列出的所有输出文件都可以使用选项--timestampoutputs(-T)自动加上时间戳。使用此选项时,格式为YYYYMMDD-hhmmss的时间戳放在每个文件的扩展名和基本名称之间。例如,下面的示例将创建输出文件 output-20080604-163225.xml和mylog-20080604-163225.html:
pybot --timestampoutputs --log mylog.html --report NONE tests.html
设置标题
日志和报告的默认标题是通过在顶级测试套件的名称前加上测试日志或 测试报告的前缀生成的。可以使用选项--logtitle和--reporttitle分别从命令行提供自定义标题。给定标题中的下划线会自动转换为空格。
例:
pybot --logtitle Smoke_Test_Log --reporttitle Smoke_Test_Report --include smoke my_tests/
设置背景颜色
默认情况下,报告文件在所有关键测试通过时都具有绿色背景, 否则为红色背景。可以使用--reportbackground命令行选项自定义这些颜色,该选项采用以冒号分隔的两种或三种颜色作为参数:
--reportbackground blue:red --reportbackground green:yellow:red --reportbackground #00E:#E00
如果指定两种颜色,则将使用第一种颜色而不是默认的绿色,而使用第二种颜色而不是默认的红色。例如,这允许使用蓝色而不是绿色来使背景更容易为色盲人员分离。
如果指定三种颜色,则第一种颜色将在所有测试成功时使用,第二种颜色仅在非关键测试失败时使用,最后一次在出现严重故障时使用。因此,当非关键测试失败时,此功能允许使用单独的背景颜色,例如黄色。
指定的颜色用作body 元素的背景 CSS属性的值。该值按原样使用,可以是HTML颜色名称(例如红色),十六进制值(例如#F00或#FF0000)或RGB值(例如rgb(255,0,0))。默认的绿色和红色分别使用十六进制值#9F6和#F33指定。
3.5.2日志级别
可用的日志级别
日志文件中的消息可以具有不同的日志级别。一些消息是由Robot Framework本身编写的,但是执行的关键字也可以使用不同的级别记录信息。可用的日志级别为:
-
失败
- 关键字失败时使用。只能由Robot Framework本身使用。 警告
- 用于显示警告。它们也显示 在日志文件的控制台和“测试执行错误”部分中 ,但它们不会影响测试用例状态。 信息
- 普通邮件的默认级别。默认情况下,低于此级别的邮件不会显示在日志文件中。 DEBUG
- 用于调试目的。例如,用于记录内部库正在执行的操作很有用。当关键字失败时,将自动使用此级别记录显示代码中发生故障的位置的回溯。 跟踪
- 更详细的调试级别。使用此级别自动记录关键字参数和返回值。
设置日志级别
默认情况下,不会记录INFO级别以下的日志消息,但可以使用--loglevel(-L)选项从命令行更改此阈值 。此选项将任何可用的日志级别作为参数,该级别将成为新的阈值级别。特殊值NONE也可用于完全禁用日志记录。
从机器人框架2.5.2开始,也可以使用 --loglevel选项也当处理后的输出与 rebot。例如,这允许最初使用TRACE级别运行测试,并生成较小的日志文件,以便稍后使用INFO级别进行正常查看。默认情况下,执行期间包含的所有消息也将包含在rebot中。执行期间忽略的消息无法恢复。
更改日志级别的另一种可能性是在测试数据中使用BuiltIn关键字 Set Log Level。它采用与--loglevel选项相同的参数,并且还返回旧级别,以便稍后可以恢复,例如,在测试拆解中。
可见的日志级别
从Robot Framework 2.7.2开始,如果日志文件包含DEBUG或TRACE级别的消息, 则会在右上角显示可见的日志级别下拉列表。这允许用户从视图中删除所选级别以下的消息。这在TRACE级别运行测试时尤其有用 。
默认情况下,下拉列表将设置为日志文件中的最低级别,以便显示所有消息。可以使用--loglevel选项更改默认的可见日志级别,方法是 在冒号分隔正常日志级别后提供默认值:
--loglevel DEBUG:INFO
在上面的示例中,使用级别DEBUG运行测试,但日志文件中的默认可见级别为INFO。
3.5.3拆分日志
通常,日志文件只是一个HTML文件。当测试用例的数量增加时,文件的大小会变得如此之大以至于将其打开到浏览器中是不方便的,甚至是不可能的。从Robot Framework 2.6开始,可以使用--splitlog选项将部分日志拆分为外部文件,这些文件在需要时透明地加载到浏览器中。
拆分日志的主要好处是单个日志部分非常小,即使测试数据量非常大,也可以打开和浏览日志文件。一个小缺点是日志文件占用的总体大小增加。
从技术上讲,与每个测试用例相关的测试数据将保存到与主日志文件相同的文件夹中的JavaScript文件中。这些文件具有诸如log-42.js之类的名称,其中log是主日志文件的基本名称,42是递增的索引。
注意
复制日志文件时,还需要复制所有 log - * .js文件或缺少某些信息。
3.5.4配置统计信息
有迹象表明,可用于配置和调整的内容几个命令行选项由标签统计,通过统计套房,并通过标签测试详细信息在不同的输出文件表。所有这些选项在执行测试用例和后处理输出时都有效。
配置显示套件统计信息
当执行更深层的套件结构时,显示Statistics by Suite表中的所有测试套件级别可能会使表格难以阅读。Bt默认显示所有套件,但您可以使用命令行选项--suitestatlevel来控制它,该套件将套件级别显示为参数:
--suitestatlevel 3
包括和排除标签统计信息
使用许多标记时,“ 按标记统计”表可能会变得非常拥挤。如果发生这种情况,可以使用命令行选项 --tagstatinclude和--tagstatexclude来选择要显示的标记,类似于 --include和--exclude用于选择测试用例:
--tagstatinclude some-tag --tagstatinclude another-tag --tagstatexclude owner-* --tagstatinclude prefix-* --tagstatexclude prefix-13
生成组合标签统计信息
命令行选项--tagstatcombine可用于生成组合来自多个标记的统计信息的聚合标记。为此选项提供参数有三种不同的方式:
-
一个标签作为
简单模式
- 匹配给定模式的所有标签组合在一起。 由 AND或&分隔的两个或多个标签
- 组合统计信息包含具有所有列出标记的测试。标签可以作为简单模式给出。 由NOT分隔的两个或多个标签
- 组合统计信息包含具有第一个标记但不包含任何其他标记的测试。同样在这种情况下,标签可以是图案。
以下示例说明了这些用法,下图显示了使用以下选项执行示例测试数据时生成的Statistics by Tag表的片段:
--tagstatcombine owner-* --tagstatcombine smokeANDmytag --tagstatcombine smokeNOTowner-janne*
如上例所示,默认情况下,添加的组合统计信息的名称是从给定模式生成的。在某些情况下,此名称看起来非常神秘,可以指定更具描述性的名称。此名称的图案用冒号分开它后给予(:)。下面的示例生成组合标记,以便报告和日志中显示的名称为 严格测试:
--tagstatcombine *NOTnon-critical:Critical_Tests
从标记名称创建链接
您可以使用命令行选项--tagstatlink将外部链接添加到Statistics by Tag表。格式标记中给出了此选项的参数:link:name,其中tag 指定要分配链接的标记,link是要创建的链接,name是要赋予链接的名称。
标签可以是单个标签,但更常见的是一个简单的模式 ,其中*匹配任何东西和?匹配任何单个字符。当tag是模式时,与通配符的匹配可以在链接和标题中使用,语法为%N,其中“N”是从1开始的匹配的索引。
以下示例说明了此选项的用法,下图显示了使用以下选项执行示例测试数据时生成的Statistics by Tag表的片段:
--tagstatlink mytag:http://www.google.com:Google --tagstatlink jython-bug-*:http://bugs.jython.org/issue_%1:Jython-bugs --tagstatlink owner-*:mailto:%1@domain.com?subject=Acceptance_Tests:Send_Mail
3.5.5从输出中删除关键字
输出文件的大部分内容来自关键字,尤其是日志消息。在创建更高级别的报告时,根本不需要日志文件,然后关键字及其消息只会占用不必要的空间。如果日志文件包含for循环或其他多次重复某些关键字的构造,它们本身也会变得过大 。
在这些情况下,命令行选项--removekeywords可用于处理不必要的关键字。它既可以在执行测试时使用,也可以在使用rebot时使用,但在前一种情况下,关键字不会从输出文件中删除。除ALL模式外,不会删除包含警告的关键字。
该选项具有以下操作模式:
-
所有
- 无条件地从所有关键字中删除数据。 PASSED
- 从已通过且不包含 警告的 测试用例中删除关键字数据。在大多数情况下,之后创建的日志文件包含足够的信息来调查可能的故障。 对于
- 从 for循环中 删除所有传递的迭代。 WUKS
- 删除 BuiltIn 关键字 Wait Until Keyword Succeeds中除最后一个失败关键字之外的所有关键字。
例子:
rebot --removekeywords all output.xml pybot --removekeywords passed --removekeywords for tests.txt
注意
在Robot Framework 2.7中添加了在执行测试以及FOR和WUKS模式时使用--removekeywords的支持。
3.5.6设置执行的开始和结束时间
当组合输出使用rebot,可以设置使用选项组合的测试套件的开始和结束时间--starttime 和--endtime分别。这很方便,因为默认情况下,组合套件没有这些值。当给出开始和结束时间时,也基于它们计算经过的时间。否则,通过将子测试套件的经过时间相加来获得经过的时间。
从Robot Framework 2.5.6开始,还可以使用上述选项在使用rebot时设置单个套件的开始和结束时间 。将这些选项与单个输出一起使用始终会影响套件的已用时间。
时间必须以YYYY-MM-DD hh:mm:ss.mil格式的时间戳给出,其中所有分隔符都是可选的,并且可以省略从毫秒到小时的部分。例如,2008-06-11 17:59:20.495相当于20080611-175920.495和 20080611175920495,并且仅仅20080611也可以。
例子:
rebot --starttime 20080611-17:59:20.495 output1.xml output2.xml rebot --starttime 20080611-175920 --endtime 20080611-180242 *.xml rebot --starttime 20110302-1317 --endtime 20110302-11418 myoutput.xml
3.5.7系统日志
Robot Framework有自己的纯文本系统日志,用于写入有关的信息
- 处理和跳过测试数据文件
- 导入的测试库,资源文件和变量文件
- 执行测试套件和测试用例
- 创建输出
通常,用户从不需要此信息,但在调查测试库或Robot Framework本身的问题时,它可能很有用。默认情况下不会创建系统日志,但可以通过设置环境变量ROBOT_SYSLOG_FILE来启用它,使其包含所选文件的路径。
系统日志具有与普通日志文件相同的日志级别,但不是FAIL而是具有ERROR 级别。可以使用ROBOT_SYSLOG_LEVEL环境变量更改要使用的阈值级别, 如下例所示。除控制台和普通日志文件外,还可能将意外错误和警告写入系统日志。
#!/bin/bash
export ROBOT_SYSLOG_FILE=/tmp/syslog.txt
export ROBOT_SYSLOG_LEVEL=DEBUG pybot --name Syslog_example path/to/tests