Robot Framework(十二) 执行测试用例——配置执行
3.4配置执行
本节介绍可用于配置测试执行或后处理输出的不同命令行选项。与生成的输出文件相关的选项将在下一节中讨论。
3.4.1选择测试用例
Robot Framework提供了几个命令行选项,用于选择要执行的测试用例。使用rebot工具后处理输出时,相同的选项也有效。
通过测试套件和测试用例名称
可以使用命令行选项--suite(-s)和--test(-t)分别按名称选择测试套件和测试用例。这两个选项都可以多次使用,以选择多个测试套件或案例。这些选项的参数是区分大小写和空格不敏感的,并且还可以有匹配多个名称的简单模式。如果同时使用--suite和 --test选项,则仅选择匹配套件中具有匹配名称的测试用例。
--test Example --test mytest --test yourtest --test example* --test mysuite.mytest --test *.suite.mytest --suite example-?? --suite mysuite --test mytest --test your*
注意
使用长名称(例如mysuite.mytest)选择测试用例与Robot Framework 2.5.6及更高版本一起使用。
使用--suite选项或多或少与仅执行适当的测试用例文件或目录相同。一个主要的好处是可以根据其父套件选择套件。其语法是指定用点分隔的父套件和子套件名称。在这种情况下,执行父套件的可能设置和拆除。
--suite parent.child --suite myhouse.myhousemusic --test jack*
在创建测试用例时,使用--test选项选择单个测试用例非常实用,但在自动运行测试时非常有限。在这种情况下,-- suite选项很有用,但通常,按标记名称选择测试用例更灵活。
按标签名称
可以使用--include(-i)和--exclude(-e)选项分别按标记名称 包含和排除测试用例。当使用前者时,仅选择具有匹配标签的测试用例,而对于后者,具有匹配标签的测试用例不被选择。如果两者都使用,则仅选择具有与前一选项匹配的标签的测试,而不选择与后者匹配的标签。
--include example --exclude not_ready --include regression --exclude long_lasting
无论--include和--exclude可以多次使用,以匹配多个标签,以及它们的参数可以是简单的模式。在这些情况下,选择测试用例的规则适用,因此选择具有与任何包含模式匹配的标记的测试用例,并且不使用匹配排除模式的标记进行测试。通过使用&或 AND(区分大小写)分隔标记,也可以仅选择具有两个或更多指定标记的测试用例。从Robot Framework 2.1.3开始,只能通过用NOT(区分大小写)分隔这些标记来选择具有特定标记但没有任何其他标记的测试。如果任何模式之间的多个 NOT 匹配,未选择测试用例。
--include req-* --include regressionANDiter-42 --include tag1&tag2&tag3&tag4 --exclude regressionNOTowner-* --include tag1NOTtag2NOTtag3&tag4 (includes tests which have `tag1`, but not tests which additionally have `tag2` or both tags `tag3` and `tag4`)
通过标签选择测试用例是一种非常灵活的机制,允许许多有趣的可能性:
- 在其他测试之前执行的测试子集可以使用smoke标记并使用--include smoke执行。
- 未完成的测试可以使用标记not_ready提交到版本控制, 并使用--exclude not_ready从测试执行中排除 。
- 可以使用iter- <num>标记测试,其中 <num>指定当前迭代的编号,并且在执行所有测试用例之后,可以生成仅包含特定迭代的测试的单独报告(例如,rebot - -include iter-42 output.xml)。
当没有测试匹配选择时
默认情况下,当没有测试与选择条件匹配时,测试执行失败并出现如下错误:
[ ERROR ] Suite 'Example' with includes 'xxx' contains no test cases.
由于未生成任何输出,因此如果执行测试并自动处理结果,则此行为可能会出现问题。幸运的是,在这种情况下,命令行选项--RunEmptySuite可用于强制执行套件。结果,创建了正常输出但显示零执行测试。当执行不包含测试的空目录或测试用例文件时,也可以使用相同的选项来更改行为。
使用rebot处理输出文件时也会发生类似情况。可能没有测试与使用的过滤条件匹配,或者输出文件不包含任何测试。默认执行 情况下,在这些情况 rebot失败,但它有一个单独的 --ProcessEmptySuite选项,可用于更改行为。在实践中,此选项与运行测试时的--RunEmptySuite的工作方式相同。
注意
--RunEmptySuite选项在2.7.2中添加了Robot Framework 2.6和--ProcessEmptySuite。
3.4.2设置关键性
测试执行的最终结果是在关键测试的基础上确定的。如果单个关键测试失败,则认为整个测试运行失败。另一方面,非关键测试用例可能会失败,整体状态仍然会通过。
默认情况下,所有测试用例都很关键,但可以使用--critical(-c)和--noncritical(-n) 选项进行更改。这些选项根据标记指定哪些测试用例被认为是关键的,类似于--include和 --exclude用于按标记名称选择测试用例。如果仅使用--critical,则具有匹配标记的测试用例至关重要。如果仅使用--noncritical,则没有匹配标记的测试至关重要。最后,如果两者都使用,则仅使用关键标签进行测试但没有非关键标签被认为是关键的。这两个选项都接受简单的模式 ,可以多次给出:
--critical regression --noncritical not_ready --critical iter-* --critical req-* --noncritical req-6??
设置关键性的最常见用例是在测试执行中还没有准备好测试用例或测试功能仍在开发中。当然,这些测试可以通过--exclude选项完全排除在测试执行之外,但是将它们包括在非关键测试中可以让您看到它们何时开始通过。
从Robot Framework 2.1开始,执行测试时的关键性设置不会存储在任何地方。如果你想保持相同的临界时,处理后的输出与rebot,你需要使用--critical和/或--noncritical也与它:
# Use rebot to create new log and report from the output created during execution pybot --critical regression --outputdir all my_tests.html rebot --name Smoke --include smoke --critical regression --outputdir smoke all/output.xml # No need to use --critical/--noncritical when no log or report is created jybot --log NONE --report NONE my_tests.html rebot --critical feature1 output.xml
3.4.3设置元数据
设置名称
当Robot Framework分析测试数据时,将根据文件名和目录名创建测试套件名称。但是,可以使用命令行选项--name(-N)覆盖顶级测试套件的名称 。给定名称中的下划线自动转换为空格,名称中的单词大写。
设置文档
除了在测试数据中定义文档之外,还可以从命令行使用选项--doc(-D)给出顶级套件的文档。给定文档中的下划线转换为空格,并且可能包含简单的HTML格式。
设置免费元数据
也可以从命令行使用选项--metadata(-M)给出免费的测试套件元数据。参数必须采用格式 name:value,其中name是要设置的元数据的名称, value是其值。名称和值中的下划线转换为空格,后者可能包含简单的HTML格式。可以多次使用此选项来设置多个元数据。
3.4.4调整库搜索路径
当使用测试库时,Robot Framework使用Python或Jython解释器从系统导入实现库的模块。搜索这些模块的位置称为PYTHONPATH,在Jython上运行测试或使用jar分发时,也使用Java CLASSPATH。
调整库搜索路径以便找到库是成功执行测试的必要条件。除了查找测试库之外,搜索路径还用于查找在命令行上设置的侦听器。有多种方法可以更改PYTHONPATH和CLASSPATH,但无论选择哪种方法,都建议使用自定义启动脚本。
PYTHONPATH中的位置自动
Python和Jython安装会自动将自己的库目录放入PYTHONPATH。这意味着使用Python自己的打包系统打包的测试库会自动安装到库搜索路径中的位置。Robot Framework还将包含其标准库的目录和执行测试的目录放入PYTHONPATH。
设置PYTHONPATH
有几种方法可以改变系统中的PYTHONPATH,但最常见的方法是在测试执行之前设置一个具有相同名称的环境变量。Jython实际上并不正常使用PYTHONPATH环境变量,但Robot Framework确保将其中列出的位置添加到库搜索路径中,而不管解释器如何。
设置CLASSPATH
CLASSPATH与Jython一起使用或在使用独立jar时使用。
使用Jython时,最常见的改变CLASSPATH的方法是设置一个与PYTHONPATH类似的环境变量。请注意,代替CLASSPATH,始终可以将PYTHONPATH与Jython一起使用,即使使用Java实现的库和侦听器也是如此。
使用独立jar分发时,由于java -jar命令不读取CLASSPATH环境变量,因此必须稍微设置CLASSPATH。在这种情况下,有两种不同的方法来配置CLASSPATH,如下面的示例所示:
java -cp lib/testlibrary.jar:lib/app.jar:robotframework-2.7.1.jar org.robotframework.RobotFramework example.txt java -Xbootclasspath/a:lib/testlibrary.jar:lib/app.jar -jar robotframework-2.7.1.jar example.txt
使用--pythonpath选项
Robot Framework还有一个单独的命令行选项 --pythonpath(-P),用于将目录或归档添加到PYTHONPATH中。可以通过用冒号(:)或多次使用此选项分隔多个路径。给定路径也可以是匹配多个路径的glob模式,但通常必须进行 转义。
例子:
--pythonpath libs/ --pythonpath /opt/testlibs:mylibs.zip:yourlibs --pythonpath mylib.jar --pythonpath lib/STAR.jar --escape star:STAR
3.4.5设置变量
可以从命令行 使用--variable(-v)选项单独设置变量,也可以通过 带有--variablefile(-V)选项的变量文件设置变量。变量和变量文件在单独的章节中进行了解释,但以下示例说明了如何使用这些选项:
--variable name:value --variable OS:Linux --variable IP:10.0.0.42 --variablefile path/to/variables.py --variablefile myvars.py:possible:arguments:here --variable ENVIRONMENT:Windows --variablefile c:\resources\windows.py
3.4.6干运行
Robot Framework支持所谓的干运行模式,否则测试会正常运行,但来自测试库的关键字根本不会执行。干运行模式可用于验证测试数据; 如果干运行通过,数据应该在语法上正确。此模式使用选项--runmode DryRun (不区分大小写)触发,并且从Robot Framework 2.5开始支持。
由于以下原因,干运行执行可能会失败:
- 使用未找到的关键字。
- 使用错误数量的参数的关键字。
- 使用语法无效的用户关键字。
除了这些故障之外,还会显示正常的执行错误,例如,无法解析测试库或资源文件导入时。
注意
干运行模式不验证变量。在将来的版本中可能会取消此限制。
3.4.7随机化执行顺序
该--runmode选项也可用于随机测试执行顺序。这是使用下面解释的不同值完成的。
- 随机:测试
- 每个测试套件中的测试用例以随机顺序执行。
- 随机:套装
- 所有测试套件都以随机顺序执行,但套件内的测试用例按照定义的顺序运行。
- 随机:所有
- 测试用例和测试套件都是以随机顺序执行的。
例:
pybot --runmode random:test my_test.txt
3.4.8控制控制台输出
控制台宽度
可以使用选项--monitorwidth(-W)设置控制台中测试执行输出的宽度。默认宽度为78个字符。
小费
在许多类UNIX机器上,你可以使用方便的$ COLUMNS 变量,如--monitorwidth $ COLUMNS。
控制台颜色
所述--monitorcolors(-C)选项用于控制是否颜色应在控制台输出被使用。使用Jython时,颜色应该适用于除Windows之外的所有其他平台。此选项具有以下不区分大小写的值:
- auto
- 输出写入控制台时启用颜色,但重定向到文件时不启用颜色。这是默认设置,很少需要更改它。
- on
- 输出重定向到文件时也使用颜色。对Windows没有影响。
- off
- 颜色被禁用。
- force
- 向后兼容Robot Framework 2.5.5及更早版本。不应该使用。
注意
支持Windows上的颜色和自动模式是Robot Framework 2.5.6中的新功能。
3.4.9设置监听器
所谓的侦听器可用于监视测试执行。它们与命令行选项 --listener一起使用,并且指定的侦听器必须与模块搜索路径一样,与测试库类似。