自学内容网 自学内容网

robotframework语法易错点总结(更新中...)

1.列表使用@还是$

1、若想把列表用Set Global Variable设置全局变量时,必须用@,当使$设置全局变量时为字符串。

    Set Global Variable    ${name}    Jack
    Set Global Variable    @{animals}    cat    monkey    duck    dog
 

2、使用FOR循环遍历列表时,必须使用@ 

    @{animals}    Create List    cat    monkey    duck    dog

使用 Create List创建列表时,使用@还是$都可以。
    :FOR    ${a}    IN    @{animals}
    \    Log    ---${a}---

会打印

---cat---
---monkey---
---duck---
---dog---


    :FOR    ${a}    IN    ${animals}
    \    Log    ---${a}---

会打印

---[u'cat', u'monkey', u'duck', u'dog']---
 

很明显,FOR循环中使用@遍历animals时,会一一遍历animals中的每一项,但FOR循环中使用$遍历animals时,会把animals当做一个整体打印输出。

3、列表作为关键字入参时,一定要统一形参和实参的形式,要么形参使用@,实参传递@,要么形参使用$,实参传递$,建议统一使用$,因为传递@会涉及拆解包的问题。

*** Keywords ***

计算数字之和
    [Arguments]    @{numbers}
    ${sum}    Set Variable    0
    : FOR    ${i}    IN    @{numbers}
    \    ${sum}    Evaluate    ${sum}+${i}
    \    Log    ${sum}

*** Test Cases ***

case01

    ${nums}    Create List    1    2    3    4
    计算数字之和    @{nums}

*** Keywords ***

计算数字之和
    [Arguments]    ${numbers}
    ${sum}    Set Variable    0
    : FOR    ${i}    IN    @{numbers}
    \    ${sum}    Evaluate    ${sum}+${i}
    \    Log    ${sum}

*** Test Cases ***

case01

    ${nums}    Create List    1    2    3    4
    计算数字之和    ${nums}

2.Comment    PAUSE只能在robotframework的ide环境即RIDE中有效,如果用robot命令行的方式执行用例,Comment    PAUSE无效。

3. 变量    Run Keyword If    条件    关键字1    ELSE    关键字2

条件成立时,运行关键字1,并把关键字1的返回值赋予变量;条件不成立时,运行关键字2,并把关键字2点返回值赋予变量。

${month}    Set Variable    1

: FOR    ${i}    IN RANGE    16
\    ${month}    Run Keyword If    ${i}>11    Evaluate    ${month}%12
\    ...    ELSE    Set Variable    ${month}

特别注意,当没有ELSE分支的时候,当条件不满足时,${month}会为None,而不是为1。

4.变量    Set Variable If    条件    值1    值2

条件成立时,变量为值1;条件不成立时,变量为值2。

${year}    Set Variable    2021   

: FOR    ${i}    IN RANGE    16
\    ${year}    Set Variable If    ${i}>11    2022    ${year}

特别注意,当没有为条件不满足时的${year}设置默认值时(${year}),${year}为None,而不是为2021。

5.在对字符串用in或not in进行关系判断时,报错SyntaxError: EOL while scanning string literal (<string>, line 1)

case003
    ${out}    Evaluate    os.popen('ifconfig lo').read()    modules=os
    Log    ----${out}----
    Run Keyword If    '127.0.0.1' in '${out}'    Log    YES
    ...    ELSE    Log    NO

Evaluating expression ''127.0.0.1' in 'lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 16384
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 181175  bytes 264236464 (251.9 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 181175  bytes 264236464 (251.9 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

'' failed: SyntaxError: EOL while scanning string literal (<string>, line 1)

 这是换行符导致的,替换掉换行符,或者将多行字符串按行进行处理

case003
    ${out}    Evaluate    os.popen('ifconfig lo').read()    modules=os
    Log    ----${out}----
    ${out}    Replace String    ${out}    ${\n}    ${EMPTY}
    Log    ----${out}----
    Run Keyword If    '127.0.0.1' in '${out}'    Log    YES
    ...    ELSE    Log    NO

6.*** Variables ***中设置的变量的作用域问题

在*** Variables ***中设置的变量为全局变量,并且可以在Suite Setup和Test Setup直接引用,也就是说,*** Variables ***中设置的变量生效时间要先于测试套件和测试用例中的Setup。

========================以上,2024-07-22更新===============================


原文地址:https://blog.csdn.net/m0_46829545/article/details/140611854

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!