robotframework笔记20
配置执行
选择测试用例
机器人框架提供了几个选择的命令行选项 执行测试用例。 也工作在相同的选项 后处理输出与 Rebot 。
通过测试套件和测试用例的名称
测试套件和测试用例可以选择通过他们的名字的命令 行选项 ——套件(- s) 和 ——测试(- t) , 分别。 这两个选项可以多次使用 选择几个测试套件或案例。 这些选项的参数 情况下,space-insensitive也可以 简单的 模式 匹配多个名字。 如果 ——套件 和 ——测试 选项,只在匹配的测试用例套件 选择匹配的名称。
--test Example --test mytest --test yourtest --test example* --test mysuite.mytest --test *.suite.mytest --suite example-?? --suite mysuite --test mytest --test your*
使用 ——套件 选择是或多或少一样执行 适当的测试用例文件或目录。 一个主要的好处是 可能选择套件基于母公司套件。 的语法 父母和孩子是指定的套件名称分开 一个点。 在这种情况下,可能的setup和teardown父母 套件执行。
--suite parent.child --suite myhouse.myhousemusic --test jack*
选择单个测试用例的 ——测试 选择是非常 实际在创建测试用例,但运行测试时相当有限 自动。 的 ——套件 选项可能是有用的 情况下,但总的来说,选择测试用例通过标记名称 灵活。
通过标签名称
有可能包括和排除测试用例 标签 名字的 ——包括(我) 和 ——排除(e) 选项,分别。 如果 ——包括 选择使用,只有测试用例有一个匹配 选择标签, ——排除 有一个选择测试用例 匹配的标记。 如果使用了两个,只测试一个标签 匹配前的选择,而不是一个标签匹配的后者, 被选中。
--include example --exclude not_ready --include regression --exclude long_lasting
这两个 ——包括 和 ——排除 可以使用几个 次匹配多个标签。 在这种情况下一个测试被选中 如果它有一个标签匹配任何包含标记,也没有标签 匹配任何排除标签。
除了指定标签完全匹配,可以使用 标记模式 在哪里 *
和 吗?
通配符, 和
, 或
, 不
运营商可用于 结合个人标签或模式:
--include feature-4? --exclude bug* --include fooANDbar --exclude xxORyyORzz --include fooNOTbar
选择测试用例,标记是一种非常灵活的机制,允许 许多有趣的可能性:
- 测试之前执行其他测试的子集,通常被称为烟雾 测试,可以标记
烟
和执行——包括烟
。 - 未完成的测试可以致力于与一个标签版本控制等
not_ready
和排除在测试执行——排除not_ready
。 - 测试可以标记
sprint——< num >
,在那里< num >
指定当前sprint的数量 执行所有的测试用例后,只包含一个单独的报告 可以生成某个sprint的测试(例如,rebot ——包括sprint-42 output.xml
)。
重新执行失败的测试用例
命令行选项 ——rerunfailed(- r) 可以用来选择所有失败了 测试从早期 输出文件 re-execution。 这个选项是有用的, 例如,如果运行所有测试需要很长时间和一个希望 迭代修复失败的测试用例。
robot tests # first execute all tests robot --rerunfailed output.xml tests # then re-execute failing
幕后这个选项选择的失败的测试 选择单独的 ——测试 选择。 进一步是可能的 通过使用微调的列表选择测试 ——测试 , ——套件 , ——包括 和 ——排除 选项。
使用一个输出不是来自执行相同的测试运行 现在造成未定义的结果。 此外,这是一个错误如果输出 不包含任何失败的测试。 使用一种特殊的价值 没有一个
作为输出 一样是不指定这个选项。
提示
Re-execution结果和原始结果 合并在一起 使用 ——合并 命令行选项。
请注意
重新执行失败的测试是机器人Framework 2.8中的一个新特性。 之前被任命为机器人框架2.8.4选项 ——runfailed 。 旧的名字仍然有效,但是它在未来将被删除。
当没有测试匹配选择
默认情况下在没有测试匹配选择条件测试执行失败 这样的一个错误:
[ ERROR ] Suite 'Example' with includes 'xxx' contains no test cases.
因为没有输出是生成的,这种行为可以有问题如果测试 自动执行和结果处理。 幸运的是一个命令行 选项 ——RunEmptySuite 可用于套件执行力 在这种情况下。 结果正常输出创建但显示零 执行测试。 可以使用相同的选项也改变了行为 一个空的目录或文件不含测试执行测试用例。
类似的情况也发生在处理输出文件 Rebot 。 有可能是没有测试匹配过滤标准或使用 输出文件中不含测试开始。 默认情况下执行 没有室内可容纳在这些情况下,但它有一个单独的——ProcessEmptySuite 选项,可以用来改变行为。 在实践中该选项一样工作 ——RunEmptySuite 当 运行测试。
请注意
——ProcessEmptySuite 2.7.2选项添加机器人框架。
设定临界
测试执行的最终结果是基于确定的 关键的测试。 如果一个关键的测试失败,整个测试运行 被认为是失败了。 另一方面,非关键的测试用例 失败,总体状况仍被视为通过。
所有测试用例被认为是关键的默认,但这可以改变 与 ——关键(- c) 和 ——被(- n) 选项。 这些选项指定哪些测试是至关重要的 基于 标签 类似地, ——包括 和 ——排除 是用来 通过标签来选择测试 。 如果只有 ——关键 ,与一个测试用例 匹配标签是至关重要的。 如果只有 ——被 使用, 测试没有一个匹配的标记是至关重要的。 最后,如果两者都是 使用,只测试一个关键标记但是没有一个非关键标记 至关重要的。
这两个 ——关键 和 ——被 同样也支持 标签 模式 作为 ——包括 和 ——排除 。 这意味着模式 匹配的情况下,空间,强调不敏感, *
和 吗?
支持通配符, 和
, 或
和 不
运营商可以用来创建相结合的模式。
--critical regression --noncritical not_ready --critical iter-* --critical req-* --noncritical req-6??
最常见的用例设置临界测试用例 没有准备好或测试功能仍在发展 测试执行。 这些测试也可以排除在外 测试执行的 ——排除 选择,但 包括非关键测试使您能够看到 他们开始通过。
测试时临界集 没有存储任何地方执行。 如果你想保持相同的临界 当 后处理输出 用,室内可容纳你需要 使用 ——关键 和/或 ——被 还用它:
# Use rebot to create new log and report from the output created during execution robot --critical regression --outputdir all tests.robot 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 robot --log NONE --report NONE tests.robot rebot --critical feature1 output.xml
设置元数据
设置名称
当机器人框架分析测试数据, 创建测试套件的名称 从文件和目录的名称 。 顶级测试套件的名称 然而,可以被覆盖命令行选项 ——名称(- n) 。 强调了在给定的名称转换为 自动空间,和文字的名字大写。
设置文档
除了 定义文档的测试数据 、文档 的顶级套房可以从命令行得到 选项 ——医生(- d) 。 强调了在给定的文档 转换为空间,它可能包含简单吗 HTML格式 。
设置免费的元数据
免费测试套件的元数据 也可以从命令行得到的吗 选项 ——元数据(- m) 。 参数必须在格式 名称:值
,在那里 的名字
元数据集的名称 价值
是它的价值。 名称和值转换为下划线 空间,后者可能包含简单 HTML格式 。 这个选项可以 使用几次设置多个元数据。
配置在哪里搜索库和其他扩展
当机器人框架进口 测试库 , 侦听器 或其他 基于Python的扩展,它使用Python解释器模块导入 从系统包含扩展。 位置模块的列表 寻找的是叫什么 该模块搜索路径 ,其内容可以 使用不同的配置方法在这一节中解释。 当导入Java库或者其他扩展基于Jython,Java 类路径使用除了正常的模块搜索路径。
机器人框架使用Python的模块搜索路径也在导入 资源 和变量文件 如果指定的路径不直接匹配任何文件。
该模块搜索路径设置正确,以便库和其他 扩展是一个要求成功的测试执行。 如果 你需要定制它使用下面的方法解释说,这是经常 要创建一个自定义一个好主意 启动脚本 。
位置自动模块搜索路径
Python解释器有自己的标准库以及一个目录 第三方模块是自动安装的模块搜索 路径。 这意味着测试库 包装使用Python的包装 系统 会自动安装,这样就可以进口的没有 任何额外的配置。
PYTHONPATH环境 , JYTHONPATH 和 IRONPYTHONPATH
Python,Jython和IronPython阅读额外的位置添加到 该模块搜索路径 PYTHONPATH环境 , JYTHONPATH 和 IRONPYTHONPATH 环境变量,分别。 如果你想 指定多个位置在其中任何一个,你需要分开 冒号在类unix机器上的位置(如。 / opt / libs:$ HOME / testlibs
)和Windows上的分号(如 D:\ libs % HOMEPATH % \ testlibs
)。
环境变量可以永久系统范围或者配置 他们只影响一个特定的用户。 或者他们可以暂时设置 在运行一个命令之前,在自定义的东西非常好用 启动脚本 。
请注意
机器人Framework 2.9,之前的内容 PYTHONPATH环境 环境 变量被添加到模块搜索路径框架本身 当运行在Jython和IronPython。 现在不做 了, JYTHONPATH 和 IRONPYTHONPATH 必须使用 这些翻译。
使用 ——pythonpath环境
选项
机器人框架有一个单独的命令行选项 ——pythonpath(- p) 将位置添加到模块搜索路径。 虽然选项名称 Python这个词,它的工作原理也在Jython和IronPython。
可以由多个位置用冒号分隔他们,不管 操作系统,或者多次使用这个选项。 给定的路径 也可以是一团模式匹配多个路径,但它通常 需要 逃了出来 。
例子:
--pythonpath libs --pythonpath /opt/testlibs:mylibs.zip:yourlibs --pythonpath mylib.jar --pythonpath lib/STAR.jar --escape star:STAR
配置 sys.path
以编程方式
Python解释器将他们使用的模块搜索路径存储为字符串的列表 在 sys.path 属性。 在执行这个列表可以动态更新,更改 考虑下次进口。
Java类路径
当库中实现Java与Jython进口,他们可以 在Jython中正常的模块搜索路径或 Java类路径 。 最 常见的方式来改变路径的设置 类路径 环境变量 同样作为 PYTHONPATH环境 , JYTHONPATH或 IRONPYTHONPATH 。 或者可以使用Java的 - cp 命令行选项。 这个选项不接触 机器人 跑脚本 ,但这是 可以使用Jython通过添加 - j 前缀像 jython -J-cp例子。 jar - m机器人。 运行tests.robot
。
使用独立的JAR分布时,类路径中必须设置一个 有些不同,由于这一事实 java jar
命令不支持 的 类路径 环境变量和 - cp 选择。 有 两种不同的方式来配置类路径:
java -cp lib/testlibrary.jar:lib/app.jar:robotframework-2.9.jar org.robotframework.RobotFramework tests.robot java -Xbootclasspath/a:lib/testlibrary.jar:lib/app.jar -jar robotframework-2.9.jar tests.robot
设置变量
变量 可以从命令行设置 单独 使用 ——变量(- 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
排练
机器人框架支持所谓的 排练 测试模式 正常运行,但关键字来自测试库 不执行。 干燥的运行模式可用于验证 测试数据,如果干运行通过,数据应该是语法 正确的。 这个模式使用触发选项 ——dryrun 。
演习执行可能会失败,有以下原因:
- 没有发现使用关键字。
- 使用关键字与错误的数量的参数。
- 使用用户关键字无效语法。
除了这些失败,正常 执行错误 所示, 例如,当测试库或资源文件不能进口 解决。
请注意
干燥的运行模式不验证变量。 这 限制可能在将来的版本中取消。
随机的执行顺序
测试执行的顺序可以随机选择 ——随机<什么>(<种子>): ,在那里 <什么>
是下列之一:
测试
- 测试用例在每个测试套件以随机的顺序执行。
套房
- 所有测试套件执行在一个随机的顺序,但里面的测试用例 套件运行的顺序定义。
所有
- 测试用例和测试套件都以随机的顺序执行。
没有一个
- 测试的执行顺序和套房都不是随机的。 这个值可以用来覆盖前面的值集 ——随机 。
从机器人2.8.5框架,它可以给一个定制的种子 初始化随机发生器。 这是非常有用的,如果你想重新运行测试 使用相同的顺序。 种子作为价值的一部分 ——随机 在格式 < >:<种子>
它必须是一个整数。 如果没有种子,它是随机生成的。 顶级执行测试 套件自动获得 元数据 命名 随机 告诉两个 什么是随机的,种子被使用。
例子:
robot --randomize tests my_test.robot robot --randomize all:12345 path/to/tests
编程修改测试数据
如果提供的内置功能修改测试数据之前执行 是不够的,机器人框架2.9和更新提供了一个可以做什么 自定义编程方式修改。 这是通过创建完成 模型修改器,使用激活它——prerunmodifier 选择。
模型修改器应该能够遍历实现为游客 可执行测试套件结构并根据需要修改它。 访问者 接口的一部分解释 机器人框架API文档 ,它可能改变执行 测试套件 , 测试用例 和 关键字 使用它。 下面的示例应该给一个想法 如何使用模型修改器,这个功能是多么强大。
from robot.api import SuiteVisitor
class SelectEveryXthTest(SuiteVisitor):
"""Visitor that keeps only every Xth test in the visited suite structure."""
def __init__(self, x, start=0):
self.x = int(x)
self.start = int(start)
def start_suite(self, suite):
"""Modify suite's tests to contain only every Xth."""
suite.tests = suite.tests[self.start::self.x]
def end_suite(self, suite):
"""Remove suites that are empty after removing tests."""
suite.suites = [s for s in suite.suites if s.test_count > 0]
def visit_test(self, test):
"""Save time to avoid visiting tests and their keywords."""
pass
当模型修改器使用在命令行上使用 ——prerunmodifier 选项,它可以指定的名称 修饰符修饰符的类或路径文件。 如果修饰符 作为一个类名,必须在包含类的模块 模块搜索 路径 ,如果模块名称和类名不同,给定的 名称必须包括 module.ModifierClass
。 如果修饰符 路径,类名必须与文件名相同。 这对于大多数部分 工作就像当 指定一个测试库导入 。
如果一个修饰词需要参数,就像上面的例子一样,他们可以 后修饰符指定的名称或路径使用冒号( :
)或 分号( ;
)作为分隔符。 如果两个值中使用,一分之一 被认为是实际的分离器。
例如,如果上面的模型修改器可以在一个文件中 SelectEveryXthTest.py ,它可以是这样的:
# Specify the modifier as a path. Run every second test. robot --prerunmodifier path/to/SelectEveryXthTest.py:2 tests.robot # Specify the modifier as a name. Run every third test, starting from the second. # SelectEveryXthTest.py must be in the module search path. robot --prerunmodifier SelectEveryXthTest:3:1 tests.robot
如果需要多个模型修改器,他们可以通过使用指定 的 ——prerunmodifier 多次选择。 如果类似的修改 需要在创建结果之前, 编程式的修改结果 可以使用吗 ——prerebotmodifier 选择。
控制控制台输出
有各种各样的命令行选项来控制测试的执行 在控制台上。
控制台输出类型
整个控制台输出类型设置的 ——控制台 选择。 它支持以下不区分大小写的值:
详细的
- 每一个测试套件和测试用例单独报告。 这是 默认值。
虚线
- 只显示
。
通过测试,f
对于非关键失败测试,F
对失败的关键测试,x
跳过,因为测试 测试执行退出 。 失败的关键测试单独列出 后执行。 这个输出类型很容易看到有什么 失败在执行期间,即使会有很多测试。 安静的
- 没有输出,除了 错误和警告 。
没有一个
- 没有任何输出。 当创建一个自定义输出使用有用, 例如, 听众 。
单独的方便选择 ——点(-)。 和 ——安静 的快捷键 ——控制台点缀
和 ——控制台安静
,分别。
例子:
robot --console quiet tests.robot robot --dotted tests.robot
请注意
——控制台 , ——点缀 和 ——安静 在机器人Framework 2.9新选项。 在此之前输出 总是在当前的一样吗 详细的
模式。
控制台宽度
测试执行的宽度可以使用设置在控制台输出 的选项 ——consolewidth(- w) 。 默认的宽度是78个字符。
提示
在许多类unix机器可以使用方便 美元列
环境变量如 ——consolewidth美元列
。
请注意
机器人框架2.9之前这个功能被启用 ——monitorwidth 选项,第一次被弃用, 现在删除。 简单的选择 - w 以同样的方式工作 在所有版本。
控制台的颜色
的 ——consolecolors(- c) 选项用于控制是否 颜色应该使用控制台输出。 颜色是实现 使用 ANSI颜色 除了在Windows上,默认情况下,窗口 使用api。 从Jython访问这些api是不可能的, 因此颜色不使用Jython在Windows。
该选项支持以下不区分大小写的价值观:
汽车
- 颜色时启用输出写入控制台,但不是 当他们被重定向到一个文件中或其他地方。 这是默认的。
在
- 使用颜色也当输出重定向。 在Windows上不工作。
ansi
- 一样
在
但使用ANSI颜色也在Windows。 有用的,例如, 当重定向输出到一个程序理解ANSI颜色。 2.7.5新机器人框架。 从
- 颜色是禁用的。
请注意
机器人框架2.9之前这个功能被启用 ——monitorcolors 选项,第一次被弃用, 现在删除。 简单的选择 - c 以同样的方式工作 在所有版本。
控制台标记
从机器人Framework 2.7,特殊的标记 。
(成功), F
(失败)使用时显示在控制台上 详细输出 和顶级关键词测试用例结束。 标记允许后 高水平的测试执行,测试用例结束时抹去。
从机器人第2.7.4框架,可以配置标记 是使用 ——consolemarkers(- k) 选择。 它支持以下 不区分大小写的价值观:
汽车
- 标记写入标准输出时启用控制台, 但当它被重定向到一个文件中或其他地方。 这是默认的。
在
- 标记总是使用。
从
- 标记是被禁用的。
请注意
机器人框架2.9之前这个功能被启用 ——monitormarkers 选项,第一次被弃用, 现在删除。 简单的选择 - k 以同样的方式工作 在所有版本。
设置监听器
可以用来监控测试执行。 当他们进入 使用从命令行,他们指定使用 ——侦听器 命令行选项。 的值可以是一个路径或一个侦听器 一个侦听器的名字。 看到 监听器接口 为更多的细节部分 关于进口的听众和使用它们。