执行测试用例
基本用法
机器人框架从命令行执行测试用例,和 最终的结果是,在默认情况下,一个 输出文件 以XML格式和一个HTML 报告 和 日志 。 执行后,可以组合和输出文件 否则 进行后期处理 工具室内可容纳。
启动测试执行
简介
robot [options] data_sources
python|jython|ipy -m robot [options] data_sources
python|jython|ipy path/to/robot/ [options] data_sources
java -jar robotframework.jar [options] data_sources
测试执行通常是开始使用 机器人 跑脚本 。 或者可以执行安装 机器人模块 或 机器人目录 直接使用选定的翻译。 最后一个 替代方法是使用 独立的JAR分布 。
请注意
机器人框架3.0之前版本没有的 机器人 脚本。 相反,他们有 pybot , jybot 和 ipybot 脚本执行 测试使用Python,Jython和IronPython分别。 这些脚本 仍然安装,但该计划在未来是轻视和删除它们。
无论执行方法,测试数据的路径(路径) 执行命令后作为参数给出。 此外,不同的 命令行选项可以用来改变测试执行或生成 输出在许多方面。
指定要执行的测试数据
机器人框架中创建的测试用例 文件 和 目录 , 他们通过给执行文件或目录的路径 选中的跑脚本问题。 路径可以是绝对的,或者 更常见的,相对于测试执行的目录 从。 给定的文件或目录创建*测试套件, 而得名,除非覆盖 ——名字 选项 , 从 文件或目录名称 。 不同的执行的可能性 在下面的例子中。 注意,在这些例子中, 在其他的例子在这一节中,只有 机器人 脚本 可以使用,但其他执行的方法类似。
robot tests.robot
robot path/to/my_tests/
robot c:\robot\tests.robot
还可以给几个测试用例文件或路径 目录,用空格分开。 在这种情况下,机器人 框架会自动创建*测试套件和 指定的文件和目录成为其孩子测试套件。 这个名字 从创建测试套件的儿童套房名称 连接在一起与字符(&)和空间。 例如, 的名字下面第一个例子中的*套房 我的测试和测试 。 这些名字是自动创建的 通常相当漫长而复杂的。 在大多数情况下,它就更好 使用 ——名字 选择覆盖,如第二 在下面的例子:
robot my_tests.robot your_tests.robot
robot --name Example path/to/tests/pattern_*.robot
使用命令行选项
机器人框架提供了许多命令行选项,可以 用来控制如何执行测试用例,输出是什么 生成的。
利用期权
当使用选项时,他们必须给跑步者之间 脚本和数据来源。 例如:
robot -L debug my_tests.robot
robot --include smoke --variable HOST:10.0.0.42 path/to/tests/
短期和长期的选择
选择总是有很长的名字,例如 ——名字 , 最常需要的选项也有一个短名称,如 - n 。 除此之外,可以缩短长选项 只要他们是独一无二的。 例如, ——logle调试
的作品, 而 ——瞧log.html
不,因为前者只匹配 ——loglevel ,但后者匹配几个选项。 短 和缩短选项时实际执行测试用例 手动,但长时间的选择建议 启动脚本 , 因为他们更容易理解。
长选项格式是不区分大小写的,这有利于写作的选择 易读的格式的名称。 例如, ——SuiteStatLevel 相当于,但容易阅读比 ——suitestatlevel 。
设置选项值
大多数的选项需要一个值,后提供选择 的名字。 短期和长期选择接受的值分开 从选项的名称空间,如 ——包括标签
或 我的标签
。 长选项,分隔符也可以的 例如,等号 ——包括=标记
,短选项 分离器可以省略,如 -itag
。
可以指定一些选项好几次了。 例如, ——变量VAR1:值,变量VAR2:另一个
设置两个 变量。 如果选择只使用一个值数 次,最后给出的值是有效的。
禁用选项接受没有值
选项接受没有值可以通过使用相同的选项被禁用了 与 没有
前缀添加或删除。 最后一个选项优先级 使用多少次选项。 例如, ——dryrun dryrun——nodryrun ——nostatusrc statusrc
不会激活管制模式,会回来吗 正常状态rc。
请注意
支持添加或删除 没有
前缀是一个新的功能 2.9机器人框架。 在早期版本的选择接受不 值可以通过使用相同的选项被禁用了。
简单的模式
许多命令行选项参数 简单的模式 。 这些 glob-like模式 匹配按照下列规则:
-
*
是一个通配符匹配任何字符串,甚至一个空字符串。 -
吗?
是一个通配符匹配任何单个的字符。 - 除非特别指出,否则模式匹配情况下,空间,凸显不敏感。
例子:
--test Example* # Matches tests with name starting 'Example', case insensitively.
--include f?? # Matches tests with a tag that starts with 'f' or 'F' and is three characters long.
标记模式
大多数标签相关选项接受参数 标记模式 。 他们所有的 相同的特点 简单的模式 但他们也支持 和
, 或
和 不
运营商下面的解释。 这些操作符可以 用于将两个或两个以上的个人标签或模式。
-
和
或&
-
如果所有单个模式匹配整个模式匹配。
和
和&
是等价的:--include fooANDbar # Matches tests containing tags 'foo' and 'bar'.
--exclude xx&yy&zz # Matches tests containing tags 'xx', 'yy', and 'zz'. 或
-
整个模式匹配如果任何个人模式匹配:
--include fooORbar # Matches tests containing either tag 'foo' or tag 'bar'.
--exclude xxORyyORzz # Matches tests containing any of tags 'xx', 'yy', or 'zz'. 不
-
整个模式匹配左边如果模式匹配 右边不。 如果多次使用,没有 在第一模式
不
必须不匹配:--include fooNOTbar # Matches tests containing tag 'foo' but not tag 'bar'.
--exclude xxNOTyyNOTzz # Matches tests containing tag 'xx' but not tag 'yy' or tag 'zz'.从机器人Framework 2.9模式也可以开始
不
在这种情况下,模式匹配的模式不
不匹配:--include NOTfoo # Matches tests not containing tag 'foo'
--include NOTfooANDbar # Matches tests not containing tags 'foo' and 'bar'
上述运营商也可以一起使用。 运算符优先级, 从最高到最低 和
, 或
和 不
:
--include xANDyORz # Matches tests containing either tags 'x' and 'y', or tag 'z'.
--include xORyNOTz # Matches tests containing either tag 'x' or 'y', but not tag 'z'.
--include xNOTyANDz # Matches tests containing tag 'x', but not tags 'y' and 'z'.
尽管标签本身是不区分大小写的匹配,所有运营商 区分大小写,必须用大写字母写的。 如果标签自己 发生在包含大写 和
, 或
或 不
,他们需要指定 使用小写字母,以避免意外操作符用法:
--include port # Matches tests containing tag 'port', case-insensitively
--include PORT # Matches tests containing tag 'P' or 'T', case-insensitively
--exclude handoverORportNOTnotification
请注意
或
运营商在2.8.4机器人框架。
ROBOT_OPTIONS 和 REBOT_OPTIONS 环境变量
环境变量 ROBOT_OPTIONS 和 REBOT_OPTIONS 可以 用来指定默认的选项 测试执行 和 结果 后处理 ,分别。 选项和它们的值 定义为一个空格分隔的列表,他们被放置在任何面前 明确的在命令行选项。 主要的用例 环境变量是全球某些选项的默认值设置 避免需要重复他们每次运行测试或使用室内可容纳。
export ROBOT_OPTIONS="--critical regression --tagdoc 'mytag:Example doc with spaces'"
robot tests.robot
export REBOT_OPTIONS="--reportbackground green:yellow:red"
rebot --name example output.xml
请注意
支持 ROBOT_OPTIONS 和 REBOT_OPTIONS 环境 变量是在机器人框架2.8.2补充道。
可能周围有空间值的引用 2.9.2是新的机器人框架。
测试结果
命令行输出
最明显的测试执行的输出中显示的输出 命令行。 所有执行测试套件和测试用例,以及 他们的状态,在实时显示。 下面的例子显示了 输出执行一个简单的测试套件只有两个测试用例:
==============================================================================
Example test suite
==============================================================================
First test :: Possible test documentation | PASS |
------------------------------------------------------------------------------
Second test | FAIL |
Error message is displayed here
==============================================================================
Example test suite | FAIL |
2 critical tests, 1 passed, 1 failed
2 tests total, 1 passed, 1 failed
==============================================================================
Output: /path/to/output.xml
Report: /path/to/report.html
Log: /path/to/log.html
从机器人Framework 2.7,还有一个通知在控制台上 每当一个*关键词在一个测试用例结束。 如果使用一个绿点 关键字传递和红色F如果失败了。 这些标记都写完 线,它们覆盖的测试状态当测试结束。 编写标记是禁用如果控制台输出重定向到一个文件中。
生成的输出文件
命令行输出是非常有限的,单独的输出文件 通常需要对测试结果进行调查。 为例 以上所示,三个输出文件是默认情况下生成的。 第一个 一个是XML格式的,包含所有的测试信息 执行。 第二个是一个高层次的报告和第三更 详细的日志文件。 这些文件和其他可能的输出文件 一节中详细讨论 不同的输出文件 。
返回代码
跑脚本通信整体测试执行状态 系统使用返回代码运行它们。 当执行开始 成功,没有 关键的测试 失败,返回码为0。 下表列出了所有可能的返回代码。
钢筋混凝土 | 解释 |
---|---|
0 | 所有关键测试通过。 |
1 - 249 | 返回的关键测试失败了。 |
250年 | 250或更多关键的失败。 |
251年 | 帮助或版本信息打印出来。 |
252年 | 无效的测试数据或命令行选项。 |
253年 | 测试执行由用户停止。 |
255年 | 意想不到的内部错误。 |
返回代码应该总是容易执行后, 这使得它很容易自动确定总体执行 的地位。 例如,在bash shell特殊的返回码 变量 $ ?
,在Windows %返回码%
变量。 如果你使用一些外部工具来运行测试,咨询了 文档如何返回代码。
返回代码可以被设置为0即使失败使用至关重要 的 ——NoStatusRC 命令行选项。 这可能是有用的, 在持续集成服务器的后处理的结果 需要在测试执行的整体状态可以确定。
请注意
相同的返回代码也使用 Rebot 。
在执行期间的错误和警告
在测试执行期间可以有意想不到的问题 无法导入库或资源文件或关键字 弃用 。 根据这些问题严重程度进行分类 错误或警告和写入控制台(使用 标准错误流),显示在一个单独的 测试执行错误 在日志文件,也写进自己的机器人框架 系统日志 。 通常这些错误和警告是由机器人 框架本身,但库也可以记录 错误和警告 。 下面的示例说明了如何在日志文件错误和警告的样子。
20090322 19:58:42.528 | 错误 | 错误文件的/ home /机器人/测试。 机器人在表的设置在第二行元素:资源文件的资源。 机器人”并不存在 |
20090322 19:58:43.931 | 警告 | 关键字“SomeLibrary。 关键字的例子是弃用。 使用关键字的其他关键字。 |
复杂字符转义
因为空间是用来互相分离的选择,它是 有问题的选项值的使用它们。 一些选项,例如 ——名字 ,自动转换强调空间,但是 与他人空间必须转义。 此外,许多特殊 人物复杂的命令行上使用。 因为复杂的字符转义反斜杠或引用 值并不总是工作太好,机器人有自己的框架 通用逃避机制。 另一种可能性是使用 论点 文件 选项可以指定在纯文本格式。 这两个 在执行测试时,当这些机制工作 后处理输出,以及一些外部支持 工具有相同或相似的功能。
在机器人框架的命令行逃避机制, 有问题的字符与*选择的文本逃脱。 的 使用命令行选项 ——逃避(e) , 接受一个参数的格式吗 什么:
, 在哪里 什么
是人物的名字和逃走呢 与
是字符串来逃避它。 字符,可以 逃下表中列出:
字符 | 名称使用 | 字符 | 名称使用 |
---|---|---|---|
& | amp | ( | paren1 |
” | 7月 | ) | paren2 |
@ | 在 | % | 百分比 |
\ | bslash | | | 管 |
: | 结肠 | 吗? | 追求 |
, | 逗号 | ” | ” |
{ | curly1 | ; | semic |
} | curly2 | / | 削减 |
美元 | 美元 | 空间 | |
! | exclam | ( | square1 |
> | gt | ] | square2 |
# | 哈希 | * | 明星 |
< | lt |
下面的例子使语法更清楚。 在 第一个例子,元数据 X
得到的值 价值与 空间
,在第二个示例中变量 $ { VAR }
被分配给 “hello,world!”
:
--escape space:_ --metadata X:Value_with_spaces
-E space:SP -E quot:QU -E comma:CO -E exclam:EX -v VAR:QUHelloCOSPworldEXQU
请注意,所有给定的命令行参数,包括路径测试 数据,逃脱了。 因此需要转义字符序列 仔细选择。
参数文件
参数文件允许将所有或一些命令行选项和参数 到外部文件中,他们会读。 这可以避免的问题 字符在命令行上是有问题的。 如果大量的选项或 还需要参数,参数文件防止命令上使用 命令行增长太长了。
为使用参数文件 ——argumentfile(——) 选项 以及其他可能的命令行选项。
参数文件的语法
参数文件可以包含命令行选项和路径的测试数据, 每行一个选项或数据源。 短期和长期支持选项, 但后者建议,因为他们更容易理解。 参数文件可以包含任何字符没有逃离,但空间 的开始和结束线将被忽略。 此外,空行 线从一个散列马克(#)被忽略:
--doc This is an example (where "special characters" are ok!)
--metadata X:Value with spaces
--variable VAR:Hello, world!
# This is a comment
path/to/my/tests
在上面的例子中选项和它们的值之间的分隔符是一个单身 空间。 在机器人框架2.7.6和更新可以使用一个平等 号(=)或任何数量的空间。 作为一个例子,以下三行 相同:
--name An Example
--name=An Example
--name An Example
如果参数文件包含非ascii字符,他们必须保存使用 utf - 8编码。
使用参数文件
参数文件可以单独使用,包含所有的选项 和路径的测试数据,或连同其他选择和路径。 当 与其他参数使用一个参数文件,其内容是放入 原始的参数列表相同的参数文件的地方 选择是。 这意味着参数文件中的选项可以覆盖选项 之前,它的选项可以被选择。 这是可能的 使用 ——argumentfile 选项多次甚至递归地:
robot --argumentfile all_arguments.robot
robot --name Example --argumentfile other_options_and_paths.robot
robot --argumentfile default_options.txt --name Example my_tests.robot
robot -A first.txt -A second.txt -A third.txt tests.robot
从标准输入读取参数文件
特殊参数文件名 STDIN
可以用来读参数 标准输入流,而不是一个文件。 这可能是有用的在生成 参数的脚本:
generate_arguments.sh | robot --argumentfile STDIN
generate_arguments.sh | robot --name Example --argumentfile STDIN tests.robot
得到帮助和版本信息
在执行测试用例和后处理输出时,它是可能的 命令行帮助选项 ——帮助(- h) 。 这些文本有一个简短的概述和帮助 简要解释可用的命令行选项。
所有运动员脚本也支持的版本信息 的选项 ——版本 。 这些信息还包含Python 或Jython平台版本和类型:
$ robot --version
Robot Framework 3.0 (Jython 2.7.0 on java1.7.0_45) C:\>rebot --version
Rebot 3.0 (Python 2.7.10 on win32)
创建启动脚本
测试用例通常是由一个连续的自动执行 集成系统或其他机制。 在这种情况下,有一个 需要启动测试执行的脚本,并可能 也为后期处理输出。 类似的脚本也 手动运行测试时有用,特别是大量的 命令行选项或设置测试环境需要 复杂。
在类unix环境中,shell脚本提供了一个简单但强大的 创建自定义的启动脚本的机制。 Windows批处理文件 也可以使用,但他们更有限,经常更吗 复杂。 一个独立于平台的替代方法是使用Python或 其他一些高级编程语言。 不管 语言,建议使用长的选项名称,因为 他们比短的名字更容易理解。
在第一个例子中,相同的web测试执行不同 浏览器和结果相结合。 这与外壳是很容易的 脚本,因为实际上你只是所需的命令列表 另一个问题:
#!/bin/bash
robot --variable BROWSER:Firefox --name Firefox --log none --report none --output out/fx.xml login
robot --variable BROWSER:IE --name IE --log none --report none --output out/ie.xml login
rebot --name Login --outputdir out --output login.xml out/fx.xml out/ie.xml
实现上面的例子与Windows批处理文件不是很 复杂的。 最重要的是要记住 因为 机器人 和 rebot 脚本被实现为批处理文件 窗户, 调用 必须使用运行时他们从另一个批处理 文件。 否则执行第一个批处理文件时将结束 完成了。
@echo off
call robot --variable BROWSER:Firefox --name Firefox --log none --report none --output out\fx.xml login
call robot --variable BROWSER:IE --name IE --log none --report none --output out\ie.xml login
call rebot --name Login --outputdir out --output login.xml out\fx.xml out\ie.xml
在接下来的例子中,以下jar文件 * 目录是 投入 类路径 在开始测试之前执行。 在这些 例子,启动脚本要求路径执行测试 数据作为参数给出。 也可以使用命令行 *选择,即使一些选项已经被确定的 脚本。 所有这些都是使用bash相对比较直接:
#!/bin/bash cp=.
for jar in lib/*.jar; do
cp=$cp:$jar
done
export CLASSPATH=$cp robot --ouputdir /tmp/logs --suitestatlevel 2 $*
实现这种使用Windows批处理文件稍微复杂一些。 的 困难的部分是设置变量包含所需的罐子里 循环,因为出于某种原因,这是不可能的助手 函数。
@echo off set CP=.
for %%jar in (lib\*.jar) do (
call :set_cp %%jar
)
set CLASSPATH=%CP% robot --ouputdir c:\temp\logs --suitestatlevel 2 %* goto :eof :: Helper for setting variables inside a for loop
:set_cp
set CP=%CP%;%1
goto :eof
修改Java启动参数
有时使用Jython有需要修改Java启动参数。 最常见的用例是增加JVM最大内存大小 默认值可能没有足够的用于创建报告和日志的时候 输出是非常大的。 有两个简单的方法来配置JVM选项:
集 JYTHON_OPTS 环境变量。 可以永久 在操作系统级或每执行一个自定义的启动脚本。
-
传递所需的Java参数 - j Jython的选项, 将通过他们期待Java。 这是尤其容易 执行 机器人安装模块 直接:
jython -J-Xmx1024m -m robot tests.robot
调试问题
测试用例测试可能失败,因为系统不工作 正确,在这种情况下,测试发现一个bug,或者因为测试 本身是车。 显示在错误消息解释了失败 的 命令行输出 而在 报告文件 ,有时 错误消息是足以精确定位问题。 更经常 然而,这不是 日志文件 因为他们也需要吗 其他的日志消息和他们显示哪些关键字真的失败了。
故障时造成的测试应用程序中,错误消息 和日志消息应该足够了解引起的。 如果 事实并非如此,测试库没有提供 足够的 信息 ,需要加强。 在这种情况下运行 相同的手动测试,如果可能的话,也可以揭示更多的信息 关于这个问题。
失败的测试用例本身所致,或者他们使用关键词 有时很难调试。 例如,如果错误消息告诉 关键字是使用错误的参数固定的数量 问题显然是容易的,但如果一个关键词缺失或失败 意想不到的方式可以更难找到问题的根源。 第一个地方 寻找更多的信息 执行错误 部分 日志文件。 例如,一个测试库导入失败的错误 可以很好地解释了为什么一个测试失败了由于失踪的关键字。
如果日志文件中没有提供足够的信息在默认情况下,它是 可以以较低的执行测试 日志级别 。 例如 回溯显示在代码中发生的故障记录 使用 调试
水平,这些信息时都是非常宝贵的 问题是在一个单独的库关键字。
记录回溯不包含信息的方法在机器人 框架本身。 如果你怀疑一个错误是由于一个错误的框架, 您可以启用显示内部跟踪通过设置环境变量 ROBOT_INTERNAL_TRACES 任何非空值。 这个功能是 2.9.2新机器人框架。
如果日志文件仍然没有足够的信息,这是一个很好的 想法使 syslog 看看它所提供的信息。 它是 也可以添加一些关键词来测试用例是什么 在继续。 特别是 内装式 关键字 日志 和日志 变量 是有用的。 如果没有其他工作,它总是可能的 搜索帮助 邮件列表 或其他地方。
使用Python调试器(pdb)
也可以使用 pdb 从Python标准模块 图书馆设置断点和交互式调试运行测试。 典型的调用方式pdb插入
import pdb; pdb.set_trace()
在位置你想进入调试器不能正常工作 与机器人框架,标准输出流 在关键字执行重定向。 相反,您可以使用以下:
import sys, pdb; pdb.Pdb(stdout=sys.__stdout__).set_trace()