测试用例构造测试用例表中可用 关键词。 关键字可以进口 测试库 或 资源 文件 或创建的 关键字表 的测试用例文件 本身。
测试用例表中第一列包含测试用例的名称。 一个 测试用例开始在这一列和行了 继续下一个测试用例名称或表的结束。 它是 之间有一个错误表标题和第一 测试。
第二列通常有关键字的名字。 一个例外 是 从关键字设置变量返回值 ,当第二和 也可能随后列包含变量名和关键字 的名字是位于。 在这两种情况下,列在关键字的名字 包含可能的参数指定的关键字。
*** Test Cases ***
Valid Login
Open Login Page
Input Username demo
Input Password mode
Submit Credentials
Welcome Page Should Be Open
Setting Variables
Do Something first argument second argument
${value} = Get Some Value
Should Be Equal ${value} Expected value
测试用例也可以有自己的设置。 设置名字总是 在第二列关键字通常是和它们的值 在随后的列。 设置名字方括号 他们区分关键字。 列出可用的设置 下面解释之后在这一节中。
示例设置测试用例:
*** Test Cases ***
Test With Settings
[Documentation] Another dummy test
[Tags] dummy owner-johndoe
Log Hello, world!
设置表可以有以下相关的测试用例 设置。 这些设置主要是默认值 上市前测试用例的具体设置。
前面的例子已经证明了关键词 不同的参数,本节讨论这个重要 功能更彻底。 如何真正实现 用户 关键字 和 库关键字 用不同的参数是 讨论了在不同的部分。
关键字可以接受零个或多个参数,和一些参数 有默认值。 什么参数关键字接受取决于它 实现,通常最好的地方搜索 信息关键字的文档。 在这个例子中 部分文档将使用生成的 Libdoc工具,但相同的信息是可用的 文档生成工具,如通用文档 javadoc 。
大部分关键词有一定数量的参数,必须始终 考虑到。 在这个用指定关键字的文档 参数名称用逗号分隔 第一,第二, 第三 。 参数名称实际上并不重要,在这种情况下,除了 他们应该解释什么论点,但它是很重要的 有完全相同的数量的参数中指定 文档。 使用太少或太多的争论将导致 错误。
下面的测试使用关键词 创建目录 和 复制 文件 从 操作 图书馆。 他们的论点是 指定为 路径 和 源,目的地 ,这意味着 他们把一个和两个参数,分别。 最后一个关键字, 没有操作 从内装式 ,不接受参数。
*** Test Cases ***
Example
Create Directory ${TEMPDIR}/stuff
Copy File ${CURDIR}/file.txt ${TEMPDIR}/stuff
No Operation
参数通常可以被给予或有默认值 不是。 在文档中默认值通常是分离的 从参数名称一个等号 name =违约 价值 ,但关键字使用Java实现的可能 多种实现 相同的关键字与不同 参数。 它是可能的,所有的参数有默认 值,但不能有任何位置参数后参数 用默认值。
使用下面的例子所示,使用默认值 创建文件 关键字的参数 路径、内容= utf - 8编码= 。 尝试使用它不带任何参数或以上 三个参数将不会工作。
*** Test Cases ***
Example
Create File ${TEMPDIR}/empty.txt
Create File ${TEMPDIR}/utf-8.txt Hyvä esimerkki
Create File ${TEMPDIR}/iso-8859-1.txt Hyvä esimerkki ISO-8859-1
也有可能一个字接受任意数量的参数。 这些所谓的 可变参数 可以结合强制参数 和参数使用默认值,但他们总是后 他们。 在之前的文档有星号的论点 名字像 *可变参数 。
例如, 删除文件 和 加入路径 关键字的 的 操作 图书馆有争论 *路径 和 基地,*部分 , 分别。 前者可以使用任意数量的参数,但是 后者要求至少有一个参数。
*** Test Cases ***
Example
Remove Files ${TEMPDIR}/f1.txt ${TEMPDIR}/f2.txt ${TEMPDIR}/f3.txt
@{paths} = Join Paths ${TEMPDIR} f1.txt f2.txt f3.txt f4.txt
命名参数的语法使得用参数 默认值 更多的 灵活,并允许显式标识某一参数值意味着什么。 技术上命名参数完全一样工作 关键字参数 在Python中。
是可能的名字前缀的参数给一个关键字值 与参数的名称 arg =值 。 这是特别 有用当多个参数有默认值, 可能的名字只有一些参数和让别人使用它们的默认值。 例如,如果一个关键词接受参数 __arg1 = a、最长= b,长度= c , 和它被称为一个参数 长度=覆盖 ,参数 __arg1 和 最长 默认值,但是 长度 获得的价值 覆盖 。 如果这听起来复杂, 命名参数 例子 下面希望使它更清楚。
命名参数语法既情况和空间敏感。 前 意味着,如果你有一个论点 参数 ,你必须使用它 arg =值 ,也不 Arg =值 也不 ARG =值 的工作原理。 后者意味着空间之前是不允许的 = 符号,和可能的空间后,被认为是给定值的一部分。
当使用命名参数的语法 用户的关键字 ,争论 名称必须是没有 $ { } 装饰。 例如,用户 关键字使用参数 $ { __arg1 } =第一,$ {最长} = 必须使用 就像 最长=覆盖 。
使用命名参数后正常位置参数,例如, | | |关键字参数=价值位置| ,不工作。 从机器人Framework 2.8这将导致一个显式的错误。 命名参数的相对顺序无关紧要。
请注意
机器人框架2.8之前是不可能命名参数 没有默认值。
可以使用 变量 指定参数名称和值。 如果该值是一个单身 标量变量 ,它是按原样传递给关键字。 这允许使用任何对象,不仅字符串,价值观也在使用 命名参数的语法。 例如,调用一个关键字 arg = $ {对象} 将变量 $ {对象} 不将它转换为关键字 一个字符串。
如果变量是用于命名参数名称,变量之前解决 匹配的参数名称。 这是机器人框架中的一个新特性 2.8.6。
命名参数语法要求等号是随便写的 在关键字的电话。 这意味着变量单独不能触发 命名参数语法,甚至如果有一个值 foo = bar 。 这是 要记住特别是包装关键字到其他关键词。 例如,如果一个关键词 数量可变的参数 就像 @ { args } 并将他们所有人传递到另一个使用相同的关键字 @ { args } 语法,可能 名叫=参数 语法用于调用方不认可。 下面的示例所示。
*** Test Cases ***
Example
Run Program shell=True # This will not come as a named argument to Run Process
*** Keywords ***
Run Program
[Arguments] @{args}
Run Process program.py @{args} # Named arguments are not recognized from inside @{args}
如果关键词需要接受和通过任何命名参数,必须 接受改变 免费的关键字参数 。 看到 kwargs例子 为 包装器关键字版本,可以通过两个位置参数和命名参数 前进。
使用命名参数语法只有当参数的一部分 在等号匹配关键字的一个参数。 这是可能的 有一个位置参数和一个文本值 foo = quux , 还有一个论点与名字无关 喷火 。 在这种情况下,参数喷火 要么不正确的值 quux 或者,更有可能的是, 有一个语法错误。
在罕见的情况下,有意外的比赛,是可能的 使用反斜杠字符 逃避 语法就像 foo \ = quux 。 现在的观点会得到一个文本值 foo = quux 。 注意,逃离 不需要如果没有争论的名字吗 喷火,而是因为它 使情况更显式的,不过它可能是一个好主意。
命名的参数已经解释说,语法使用关键词。 在 此外,它还在工作 导入库 。
命名参数支持 用户的关键字 和大多数 测试库 。 唯一的例外是使用基于Java库 静态库API 。 库文档生成 Libdoc 有一个注意图书馆吗 支持命名参数。
请注意
机器人框架2.8之前命名参数语法并不奏效 使用与测试库 动态库的API 。
下面的例子演示了使用命名参数语法 库关键字,用户关键字,当导入 远程登录 测试库。
*** Settings ***
Library Telnet prompt=$ default_log_level=DEBUG
*** Test Cases ***
Example
Open connection 10.0.0.42 port=${PORT} alias=example
List files options=-lh
List files path=/tmp options=-l
*** Keywords ***
List files
[Arguments] ${path}=. ${options}=
List files options=-lh
Execute command ls ${options} ${path}
机器人框架2.8添加支持 Python风格免费的关键字参数 ( * * kwargs )。 这意味着,关键词可以接收所有参数 使用 名称=值 语法和其他参数作为kwargs不一致。
同样是免费的关键字参数支持变量 命名参数 。 在实践中这意味着变量 可以使用的名称和值,但越狱标志必须吗 可见。 例如, foo = $ {酒吧} 和 $ { foo } = $ {酒吧} 是 有效的,只要使用的变量存在。 一个额外的限制是 免费的关键字参数名称必须是字符串。 支持变量 在名字中的一个新特性2.8.6机器人框架,在此之前 变量un-resolved。
最初只免费的关键字参数与基于Python库,但是 机器人框架2.8.2扩展的支持 动态库的API 和机器人框架2.8.3将进一步扩展到基于Java库和 的 远程库接口 。 最后,用户关键字了kwargs支持 在机器人框架2.9。 换句话说, 现在所有的关键词都可以支持kwargs。
作为使用kwargs的第一个例子,让我们看一看 运行过程 关键字的 过程 图书馆。 它有一个签名 命令,*参数,* *配置 ,这意味着它需要的命令 执行( 命令 ),其参数 数量可变的参数 ( *参数 免费的关键字),最后可选配置参数 参数( * *配置 )。 下面的示例还显示变量 使用免费的关键字参数时完全一样 使用命名参数 语法 。
*** Test Cases ***
Using Kwargs
Run Process program.py arg1 arg2 cwd=/home/user
Run Process program.py argument shell=True env=${ENVIRON}
看到 免费的关键字参数(* * kwargs) 下节 创建测试 库 关于使用kwargs语法的更多信息 您的自定义测试库。
第二个例子,让我们创建一个包装器 用户关键字 为运行 program.py 在上面的例子中。 包装的关键字 运行程序 接受任意数量的参数和kwargs,向前传递 运行过程 在执行命令的名称。
*** Test Cases ***
Using Kwargs
Run Program arg1 arg2 cwd=/home/user
Run Program argument shell=True env=${ENVIRON}
*** Keywords ***
Run Program
[Arguments] @{arguments} &{configuration}
Run Process program.py @{arguments} &{configuration}
一个完全不同的方法来指定参数嵌入 为关键字的名字。 支持这种语法 测试库关键字 和 用户的关键字 。
一个测试用例失败如果任何关键字使用失败。 通常这意味着 执行的测试用例是停止,可能的 测试拆卸 执行, 然后继续执行下一个测试用例。 还可以 使用特殊的 可持续的失败 如果不需要停止测试执行。
分配给一个失败的测试用例的错误信息是直接从了 失败的关键字。 错误消息通常是由关键字本身,但是 一些关键字允许配置它们。
在某些情况下,例如当使用可持续失败时, 一个测试用例可以失败很多次了。 在这种情况下最后一个错误消息 通过结合了个人的错误。 很长的错误消息 自动从中间继续削减 报告 更容易阅读。 完整的 错误消息总是可见的 日志 文件作为失败的消息 关键字。
默认错误消息是正常的文本,但是 从机器人Framework 2.8 包含HTML格式 。 这 由开始启用和标记的字符串错误消息吗 * HTML * 。 这个标记将被删除从最终的报告所示的错误消息 和日志。 使用HTML的一个自定义的消息在第二个示例中所示。
*** Test Cases ***
Normal Error
Fail This is a rather boring example...
HTML Error
${number} = Get Number
Should Be Equal ${number} 42 *HTML* Number is not my <b>MAGIC</b> number.
测试用例名称直接来自测试用例表:它是 究竟什么是输入到测试用例列。 在一个测试用例 测试套件应该使用唯一的名称。 有关这一点,你也可以 使用 自动变量 $ { TEST_NAME } 在测试 参考测试名称。 这是测试时可用 被执行,包括所有用户的关键词,以及测试设置 和测试拆卸。
的 (文档) 设置允许您设置一个免费的 测试用例文档。 文本命令行所示 输出,以及由此产生的测试记录和测试报告。 可以使用简单 HTML格式 在文档和 变量 可用于制造文档动态。
如果文档分成多个列,细胞在一行 与空间连接在一起。 这主要是有用的,当使用 的 HTML格式 和列是狭窄的。 如果文档是 分裂 到多个行 创建的文档本身 连接使用换行 。 如果一行换行不添加 已经以换行符或结束 逃避反斜杠 。
*** Test Cases ***
Simple
[Documentation] Simple documentation
No Operation
Formatting
[Documentation] *This is bold*, _this is italic_ and here is a link: http://robotframework.org
No Operation
Variables
[Documentation] Executed at ${HOST} by ${USER}
No Operation
Splitting
[Documentation] This documentation is split into multiple columns
No Operation
Many lines
[Documentation] Here we have
... an automatic newline
No Operation
重要的是,测试用例有明确的和描述性的名称,和 在这种情况下,他们通常不需要任何文档。 如果逻辑 的测试用例需要记录时,它通常是一个迹象表明,关键词 在测试用例需要更好的名称,它们是可以被增强, 而不是添加额外的文档。 最后,元数据,比如 环境和用户信息在上面的最后一个例子中,是经常的 更好的使用 标签 。
使用标签在机器人框架是一个简单的,但功能强大的机制 对测试用例进行分类。 标签是免费的文本,他们可以使用 至少以下用途:
在本节中只有解释了如何为测试设置标签 例,下面列出了不同的方式去做。 这些 方法自然可以一起使用。
测试套件初始化文件 , 所有测试用例子测试套件让这些标签。没有一个 覆盖默认的标签。标签是免费的文本,但他们归一化,这样转换 小写和所有的空间都被删除了。 如果一个测试用例得到相同的标签 几次,其他事件比第一个删除。 标签 可以创建使用变量,这些变量存在的假设。
*** Settings ***
Force Tags req-42
Default Tags owner-john smoke
*** Variables ***
${HOST} 10.0.1.42
*** Test Cases ***
No own tags
[Documentation] This test has tags owner-john, smoke and req-42.
No Operation
With own tags
[Documentation] This test has tags not_ready, owner-mrx and req-42.
[Tags] owner-mrx not_ready
No Operation
Own tags with variables
[Documentation] This test has tags host-10.0.1.42 and req-42.
[Tags] host-${HOST}
No Operation
Empty own tags
[Documentation] This test has only tag req-42.
[Tags]
No Operation
Set Tags and Remove Tags Keywords
[Documentation] This test has tags mytag and owner-john.
Set Tags mytag
Remove Tags smoke req-*
用户通常免费使用任何标记在他们的工作环境。 然而,某些标签对机器人有一个预定义的意义 框架本身,为其他目的使用它们可以有意外 结果。 所有特殊标签机器人框架,将会在未来 有一个 机器人- 前缀。 为了避免问题,因此不应该使用任何用户 标签与一个 机器人- 前缀,除非真正激活的特殊功能。
在撰写本文时,唯一特殊的标记 robot-exit 这是 当自动添加到测试 优雅地停止测试执行 。 更多的使用可能会被添加在未来,。
机器人框架也有类似的测试设置和清除功能很多 其他的测试自动化框架。 简而言之,一个测试设置 之前执行一个测试用例,测试执行拆卸 在一个测试用例。 在机器人框架设置和拆解 普通关键字参数。
Setup和teardown总是一个字。 如果他们需要照顾 多个单独的任务,就可以创建更高级的 用户 关键字 用于这一目的。 另一种解决方案是执行多个 关键字使用 内装式 关键字 运行关键字 。
测试拆卸是特别的在两个方面。 首先,它也执行 当一个测试用例失败,因此它可以用来清理活动,必须 不管测试用例的状态。 此外,所有的关键词 拆卸也执行即使其中一个失败。 这继续失败 功能还可以使用正常的关键字,但在拆解 在默认情况下。
最简单的方法来指定为测试用例设置或拆卸 使用测试用例文件 测试设置 和 测试 拆卸 设置表中设置。 单个测试用例可以 也有自己的安装或拆卸。 他们的定义 (设置) 或(拆卸) 设置测试用例 表,他们覆盖 测试设置 和 测试拆卸 设置。 没有关键字之后 (设置) 或 (拆卸) 设置意味着没有 安装或拆卸。 还可以使用价值 没有一个 表明 一个测试没有安装/拆卸。
*** Settings ***
Test Setup Open Application App A
Test Teardown Close Application
*** Test Cases ***
Default values
[Documentation] Setup and teardown from setting table
Do Something
Overridden setup
[Documentation] Own setup, teardown from setting table
[Setup] Open Application App B
Do Something
No teardown
[Documentation] Default setup, no teardown at all
Do Something
[Teardown]
No teardown 2
[Documentation] Setup and teardown can be disabled also with special value NONE
Do Something
[Teardown] NONE
Using variables
[Documentation] Setup and teardown specified using variables
[Setup] ${SETUP}
Do Something
[Teardown] ${TEARDOWN}
执行的名称关键字设置或拆解 变量。 这有助于在不同的安装或拆卸 不同的环境给关键字名称作为变量 命令行。
请注意
测试套件可以安装和拆卸的 自己的 。 一套设置或子测试之前执行任何测试用例 套件测试套件,同样一套拆卸 后执行。
测试模板转换正常 关键字驱动 测试用例在 数据驱动的 测试。 而一个关键字驱动测试用例的身体 是由关键词及其可能的参数,测试用例 模板只包含关键字的参数模板。 而不是多次重复相同的关键字/测试和/或所有 测试在一个文件中,可以使用它只每只测试或一次文件。
模板的关键字可以接受正常的位置参数和命名参数, 以及嵌入式关键字名称作为参数。 与其他设置, 不可能使用一个变量定义一个模板。
如何使用关键字接受正常的位置参数作为模板吗 如下面的例子测试用例。 这两个测试 功能完全相同。
*** Test Cases **
Normal test case
Example keyword first argument second argument
Templated test case
[Template] Example keyword
first argument second argument
为例说明,可以指定 一个单独的测试用例使用的模板 (模板) 设置。 另一种方法是使用 测试模板 设置表中设置,在这种情况下,应用模板 为所有的测试用例,测试用例文件。 的(模板) 设置覆盖可能的模板中设置设置表,和 一个空值 (模板) 意味着没有测试 模板,即使 测试模板 使用。 也有可能 使用价值 没有一个 表明一个测试没有模板。
如果一个模板化的测试用例有多个数据行身体,模板 适用于所有的行。 这 意味着同样的关键字执行多次,一次数据 在每一行。 模板化测试也特殊,这样所有的轮 即使其中的一个或多个执行失败。 可以使用这个 种 继续失败 模式与正常测试,但是 模板化测试自动模式。
*** Settings ***
Test Template Example keyword
*** Test Cases ***
Templated test case
first round 1 first round 2
second round 1 second round 2
third round 1 third round 2
用参数 默认值 或 可变参数 以及使用 命名参数 和 免费的关键字参数 ,使用模板 就像他们的工作。 使用 变量 在参数也 支持正常。
从机器人框架2.8.2、模板支持的一种变体 的 嵌入参数语法 。 与模板语法是这样 关键字,如果模板变量的名字,他们被认为是 参数和占位符替换为实际的参数 使用的模板。 然后使用所产生的关键字没有位置 参数。 这是最好的说明了一个例子:
*** Test Cases ***
Normal test case with embedded arguments
The result of 1 + 1 should be 2
The result of 1 + 2 should be 3
Template with embedded arguments
[Template] The result of ${calculation} should be ${expected}
1 + 1 2
1 + 2 3
*** Keywords ***
The result of ${calculation} should be ${expected}
${result} = Calculate ${calculation}
Should Be Equal ${result} ${expected}
使用模板嵌入参数时,参数的数量 模板关键字名称必须匹配的参数使用。 参数名称不需要原来的关键字匹配的参数, 不过,也可以使用完全不同的参数:
*** Test Cases ***
Different argument names
[Template] The result of ${foo} should be ${bar}
1 + 1 2
1 + 2 3
Only some arguments
[Template] The result of ${calculation} should be 3
1 + 2
4 - 1
New arguments
[Template] The ${meaning} of ${life} should be 42
result 21 * 2
的主要好处嵌入模板参数是使用 显式地指定参数名称。 当使用正常的参数, 同样的效果可以通过命名包含的列 参数。 这是说明的 数据驱动的风格 的例子 下一节。
如果使用模板 for循环 ,申请的模板 在循环的所有步骤。 失效模式的继续使用 也在这种情况下,这意味着执行的所有步骤 所有循环元素即使有故障。
*** Test Cases ***
Template and for
[Template] Example keyword
:FOR ${item} IN @{ITEMS}
\ ${item} 2nd arg
:FOR ${index} IN RANGE 42
\ 1st arg ${index}
有几种不同的方法测试用例可能会写。 测试 描述某种类型的情况下 工作流 可以写吗 关键字驱动或行为驱动方式。 数据驱动方式可用于测试 相同的工作流不同输入数据。
工作流程测试,等 有效的登录 测试描述 早些时候 ,是由几个关键词及其可能的 参数。 正常的系统结构是第一个 到初始状态( 打开登录页面 在 有效的 登录 例子),然后是对系统(输入 的名字 , 输入密码 , 提交的凭证 ), 最后验证,系统行为 ( 欢迎页面应该开放 )。
另一个风格是编写测试用例 数据驱动的 方法, 测试用例只使用一个更高级的关键词,通常创建一个 用户关键字 ,隐藏实际的测试工作流程。 这些测试是 非常有用当有需要测试相同的场景 不同的输入和/或输出数据。 有可能重复 和每个测试相同的关键字,但是 测试模板 功能 只允许指定关键字使用一次。
*** Settings ***
Test Template Login with invalid credentials should fail
*** Test Cases *** USERNAME PASSWORD
Invalid User Name invalid ${VALID PASSWORD}
Invalid Password ${VALID USER} invalid
Invalid User Name and Password invalid invalid
Empty User Name ${EMPTY} ${VALID PASSWORD}
Empty Password ${VALID USER} ${EMPTY}
Empty User Name and Password ${EMPTY} ${EMPTY}
提示
命名列在上面的示例中使测试更容易 理解。 这是有可能的,因为标题行 除了第一个细胞 被忽略 。
上面的例子中有六个独立的测试,一个用于每一个无效的 用户/密码组合,下面的例子说明了如何 只有一个测试的所有组合。 当使用 测试 模板 在测试执行,所有的轮即使有 失败,所以没有真正的功能这两个的区别 风格。 在上面的例子中单独命名所以组合 容易看到他们测试,但是有可能大量的 这些测试可能乱七八糟的统计数据。 使用哪个风格取决于 环境和个人喜好。
*** Test Cases ***
Invalid Password
[Template] Login with invalid credentials should fail
invalid ${VALID PASSWORD}
${VALID USER} invalid
invalid whatever
${EMPTY} ${VALID PASSWORD}
${VALID USER} ${EMPTY}
${EMPTY} ${EMPTY}
也可以写测试用例要求也非技术 项目干系人必须理解。 这些 可执行的要求 是一个 墙角石的过程通常被称为 验收测试驱动开发 (ATDD)或 规范的例子 。
写这些需求/测试的一种方法 Given-When-Then 风格 推广的 行为驱动开发 (BDD)。 在编写测试用例 这种风格,初始状态通常是表示关键字开始 词 鉴于 与描述的行为是关键字开始当 和关键字开始的期望 然后 。 关键字开始 和 或 但 可以使用如果一个步骤 比一个行动。
*** Test Cases ***
Valid Login
Given login page is open
When valid username and password are inserted
and credentials are submitted
Then welcome page should be open
前缀 鉴于 , 当 , 然后 , 和 和 但 到匹配的关键字搜索时,如果没有匹配的全名吗 是发现。 这是对图书馆用户关键词和关键词。 例如, 打开登录页面 在上面的例子中可以实现 用户关键词要么有或没有这个词 鉴于 。 忽略前缀 还允许使用相同的关键字与不同的前缀。 例如 欢迎页面应该开放 也可以用作 和欢迎页面 应该是开放的 。
请注意
忽略 但 前缀是新的2.8.7机器人框架。
当编写具体的例子是很有用的可以通过实际数据 关键字实现。 支持这种通过允许用户关键词 嵌入 参数为关键字的名字 。
原文:http://www.cnblogs.com/kuihua/p/5397306.html