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

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

每当我们学习一门新的语言,变量都是最先需要了解的,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 条回复 时间 点赞

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

matthewD 回复

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

在路上 回复

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

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

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.

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

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


这是我的。

在路上 回复

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

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

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$

应该是路径错了,

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

matthewD 回复

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

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

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

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

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