自动化工具 走进 RobotFramework 框架中的变量

matthewD · 2019年03月12日 · 最后由 matthewD 回复于 2019年03月13日 · 5237 次阅读

每当我们学习一门新的语言,变量都是最先需要了解的,Robot Framework 也是如此,下面就介绍一下 Robot Framework 中的变量。

变量有那些

官方文档中给出三种类型:标量,列表和字典。

  • 标量为最常用的类型,标量在大部分情况下是字符串形式,在使用时将变量名替换为其值。
  • 列表变量,列表中的元素可以为任何类型,列表的访问从 0 开始。
  • 字典,同列表一样,字典的值和键可以为任何元素,字典是无序的,通过键值进行访问。
  • 环境变量,robot framework 可以直接访问系统的环境变量。 *** Test Cases *** Environment variables Log Current user: %{USER} Run %{JAVA_HOME}${/}javac # 怎样定义变量
  • 在变量表格中定义 > 推荐将一些公用的变量用此方法定义。 *** Variables *** ${NAME} Robot Framework ${VERSION} 2.0 ${ROBOT} ${NAME} ${VERSION} @{NAMES} Matti Teppo &{USER 1} name=Matti address=xxx phone=123
  • 使用 Set 关键字定义 *** Test Cases *** using set keywords ${hi} = Set Variable Hello, world! ${Global_Var} = Set Glabal Variable Hello, world! ${Suite_Var} = Set Suite Variable Hello, world! ${Test_Var} = Set test Variable Hello, world!
  • 命令行方式 > 一些和测试环境有关或其它变量,可以通过命令行去定义,该变量为全局变量,全局有效。 robot . --variable HOST:localhost:7272 --variable USER:robot
  • 关键字返回 *** Test Cases *** Returning ${x} = Get X an argument @{list} = Create List first second third &{dict} = Create Dictionary first=1 second=${2} ${3}=third ${a} ${b} ${c} = Get Three # 变量如何使用
  • 关键字的参数 > 变量可以直接作为参数传递给关键字。 *** Test Cases *** Objects KW 1 ${STR}
  • 判定操作 > 根据变量的值判定测试结果 assert result Should Be True ${status}
  • 逻辑处理 > 根据变量的值,选择不同的操作关键字 assert result Run Keyword If '${text}'=='123' log 222
  • 内置变量 > Robot Framework 提供一些内置变量,包括操作系统,数字以及自动化等。
  • - 操作系统变量
变量 描述
${CURDIR} 当前测试文件的绝对路径,大小写敏感
${TEMPDIR} 临时文件的绝对路径,linux 系统上为/tmp,windows 上是c:\Documents and Settings<user>\Local Settings\Temp
${EXECDIR} 开始执行测试时所在文件夹的绝对路径
${/} 系统路径分隔符,linux 上为/,Windows 上为\
${:} 系统路径分隔符,Linux 上为:,Windows 上为;
${\n} 系统文件行分割符,Linux 上为\n,Windows 上为\r\n
*** Test Cases ***
Example
    Create Binary File    ${CURDIR}${/}input.data    Some text here${\n}on two lines
    Set Environment Variable    CLASSPATH    ${TEMPDIR}${:}${CURDIR}${/}foo.jar
  • - 数字变量
*** Test Cases ***
Example 1A
    Connect    example.com    80       # Connect gets two strings as arguments

Example 1B
    Connect    example.com    ${80}    # Connect gets a string and an integer

Example 2
    Do X    ${3.14}    ${-1e-4}        # Do X gets floating point numbers 3.14 and -0.0001
  • - 布尔和 None/Null 变量 > python 中的 None 和 JAVA 中的 Null 都可以作为 Robot Framwork 的内置变量。
*** Test Cases ***
Boolean
    Set Status    ${true}               # Set Status gets Boolean true as an argument
    Create Y    something   ${false}    # Create Y gets a string and Boolean false

None
    Do XYZ    ${None}                   # Do XYZ gets Python None as an argument

Null
    ${ret} =    Get Value    arg        # Checking that Get Value returns Java null
    Should Be Equal    ${ret}    ${null}
  • - 空格和空变量
*** Test Cases ***
One space
    Should Be Equal    ${SPACE}          \ \

Four spaces
    Should Be Equal    ${SPACE * 4}      \ \ \ \ \

Ten spaces
    Should Be Equal    ${SPACE * 10}     \ \ \ \ \ \ \ \ \ \ \

Quoted space
    Should Be Equal    "${SPACE}"        " "

Quoted spaces
    Should Be Equal    "${SPACE * 2}"    " \ "

Empty
    Should Be Equal    ${EMPTY}          \
  • - 自动化变量 > 自动化变量在测试执行过程中可能值会变化,也有一些变量是在特定时期可用。
变量 描述 使用范围
${TEST NAME} 当前测试用例的名称 测试用例内
@{TEST TAGS} 当前测试用的 Tags 测试用例内
${TEST DOCUMENTATION} 当前测试用例的文档 测试用例内
${TEST STATUS} 当前测试用例的测试结果,PASS 或 FAIL Test teardown
${TEST MESSAGE} 当前测试用的的测试结果信息 Test teatdown
${PREV TEST NAME} 上一条测试用例的名称,如果没有则值为空 任意
${PREV TEST STATUS} 上一条测试用例的结果,如果没有则值为空 任意
${PREV TEST MESSAGE} 上一条测试用例的结果信息,如果没有则值为空 任意
${SUITE NAME} 当前测试集的全称 任意
${SUITE SOURCE} 当前测试集的绝对路径 任意
${SUITE DOCUMENTATION} 当前测试集的描述,可以通过Set Suite Documentation 修改 任意
&{SUITE METADATA} 当前测试集的 METADATA,可以通过Set Suite Metadata修改 任意
${SUITE STATUS} 当前测试集的测试状态 Suite teardown
${SUITE MESSAGE} 当前测试集的测试状态信息 Suite teardown
${KEYWORD STATUS} 当前关键字的状态 Keyword teardown
${KEYWORD MESSAGE} 当前关键字的状态信息 Keyword teardown
${LOG LEVEL} 当前的日志级别 任意
${OUTPUT FILE} output 文件的绝对路径 任意
${LOG FILE} log 文件的绝对路径,如果没有则为 None 任意
${REPORT FILE} report 文件的绝对路径,如果没有则为 None 任意
${DEBUG FILE} debug 文件的绝对路径,如果没有则为 None 任意
${OUTPUT DIR} output 文件夹的绝对路径 任意

变量的优先级

内置变量-->>测试中定义-->>命令行中定义-->>变量表格-->>资源文件

  • 命令行中定义的变量在测试开始执行前被定义,定义的变量会覆盖测试文件变量表格和资源文件中定义的变量。
  • 测试文件变量表格中定义的变量,在当前测试文件中全局可用,可能会覆盖资源文件和变量文件中的变量。
  • 资源文件和变量文件中定义的变量在测试文件中优先级最低,如果他们之间存在重复,则最先引入的文件的变量优先级最高。
  • 测试执行中定义的变量拥有最高优先级,但它的作用域仅限于当前测试。
  • 内置变量不可被覆盖。 # 变量的作用域
  • 全局变量 > 命令行中或使用Set Global Variable定义的变量为全局变量,在任意地方都可以使用,另外内置变量也是一种全局变量
  • 测试集变量 > 在变量表格,引入的资源或变量文件以及使用Set suite Variable定义的变量为测试集变量,在测试集内可用。
  • 测试用例变量 > 由Set Test Variable定义的变量为测试用例变量,测试用例范围内,包括关键字都可以使用,初始状态下没有变量为此类变量。
  • 本地变量 > 测试用例或关键字中由关键字返回或关键字参数的变量,该变量只能在测试用例或关键字范围内可用。
共收到 15 条回复 时间 点赞

因为公司需要引入 robotframework(其实我内心还是不喜欢,不喜欢这种非代码的格式),习惯用 python3+pycharm , 想问下 , 可以用 python3+pycharm 做 robotframework 吗? 在对 pycharm 设置的时候,发现 python3 少一个 pybot 文件。 想问下楼主, 这块你是怎么做的。谢谢

现在用的是 robot 文件啦。你看看有没有

matthewD 回复

找到了,看了不少教程,都发现有问题。

这两个路径的设置, 究竟要怎么设置呢? 我的 pycharm 是单独一个路径,project 又是单独一个路径。还望楼主能告知下, 谢谢

error log 贴给我看看,另外 arguments 你填的是什么也发我看下

matthewD 回复

[ WARN ] Automatically parsing other than '.robot' files is deprecated. Convert 'D:\PythonProject\DemoCases\Testcases\demo.txt' to '.robot' format or use '--extension' to explicitly configure which files to parse.
[ ERROR ] Suite 'Testcases' contains no tests named ''.

Robot Run SingleTestCase/Robot Run TestSuite 都设置的同一路径
arguments: -d results -t "$SelectedText$" ./
Working directory: $FileDir$

应该是路径错了,

从你的错误信息看,是因为你没有选择 case 名称,你这个命令执行需要你在编辑器里先选择执行 case 名称的文本;就是你要先选择 “test case1” 再执行

在路上 回复

我用的 pycharm , 直接 run , 没有用执行命令。所以不太存在你说的没有执行 cases 名称的文本。


这是我的。

另外 在你用 external tools 执行的时候 console 第一行的命令行可以发我看看吗

arguments: -d results -t "$SelectedText$" ./
这是你的配置,SelectedText 就是要选择用例名称的呀

matthewD 回复

我设置成你这样以后就可以了,但是也有一点点问题。我是一直安装网上很多博客教程设置的,
报错:
[ WARN ] Automatically parsing other than '.robot' files is deprecated. Convert 'D:\PythonProject\DemoCases\Testcases\demo.txt' to '.robot' format or use '--extension' to explicitly configure which files to parse.

提示你了,建议你用 robot 扩展名,其他扩展名不要用

在路上 回复

谢谢提醒, 起初我一直没明白这句话的意思, 你这么一说就清楚了。 再次感谢。

matthewD 回复

已经弄好了, 是文件名出错了, 我用的.txt , 改成.robot。 就可以了。 非常感谢

嗯,.txt 在最新的已经被废弃了。不过还能支持,所以给的是个 warning

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册