robotframwork

本文详细介绍了RobotFramework的测试用例创建、配置、设置与模板的使用,以及如何导入库和使用变量,深入讲解了测试自动化过程中的关键概念和语法。

创建测试case

本章介绍创建测试case的语法。

  1. 测试用例语法

1.1. 基础语法

测试用例是由测试库或者用户自定义的资源文件中的关键字组成的。基本格式如下:

*** 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

说明:

*** Test Cases ***:表示测试用例

Valid Login:第1个测试用例的名称

Input Username demo:蓝色字体表示的是关键字,对应的就是RF中的一个函数,红色字体表示的函数的参数

Setting Variables:表示第2个测试用例的名称

代码示例1:

*** Test Cases ***
logging
[Template] log
张三
李四
王五
time
${t} Get Time
log ${t}

执行结果:在这里插入图片描述
1.2. 配置测试用例表

测试用例也有自己的配置项,可以修改名单,超时时间等等,支持的配置项如下:

[Documentation]:Used for specifying a test case documentation.

[Tags]:Used for tagging test cases.

[Setup], [Teardown]:Specify test setup and teardown.

[Template]:Specifies the template keyword to use. The test itself will contain only data to use as arguments to that keyword.

[Timeout]:Used for setting a test case timeout. Timeouts are discussed in their own section.

代码示例:

*** Test Cases ***
Test With Settings
[Documentation] Another dummy test
[Tags] dummy owner-johndoe
Log Hello, world!
执行结果:
在这里插入图片描述
3.setup和teardown

和其它自动化测试框架类似,Robot Framework也支持setup 和teardown的功能,用来执行一些初始化和清理的工作。setup 和teardown分为测试套件的setup 和teardown,还有测试用例的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}

说明:

  1. 在Setting中声明的是测试用例的setup 和teardown,以test开头,如果是测试套件级别的话是,以Site开头,如:

Suite Setup Open Browser To Login Page

Suite Teardown Close Browser

  1. 测试用例中默认会执行[Setup] or [Teardown](见Default Values)

  2. 测试用例中使用关键字[Setup] or [Teardown]是对Setting中声明的关键字重写(见Overridden setup)

  3. 如果使用了关键字[Setup] or [Teardown],但是后面紧跟的关键字是None的话,或者没有参数的话,那么相应的操作也不会执行(见No teardown和No teardown 2)

  4. 可以使用变量的方式(${var})执行[Setup] or [Teardown](见Using Variables)

  5. 测试模板

测试模板的作用是将关键字驱动的测试用例转换为数据驱动的测试用例。

4.1. 基本用法

可以使用[Template] 或者在Setting中用Test Template实现,模板如下:

方式一:[Template]

*** Test Cases **

Normal test case

Example keyword first argument second argument

Templated test case

[Template] Example keyword

first argument second argument

代码示例:

*** Test Cases ***
normal test case
log 光荣之路
log 测试开发培训

template test case
[Template] log
光荣之路
测试开发培训
执行结果:

方式二:

*** 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

代码示例:

*** Settings ***
Test Template log

*** Test Cases ***
template test case
[Template] log
光荣之路
测试开发培训
执行结果:

4.2. 内置参数的模板

这种类型的模板中参数类似于占位符,调用时就用指定位置的数据替换,所以传入的参数个数需要好定义的参数个数相等,但是参数名可以不一致。

代码示例1:

*** 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}

Calculate
[Arguments] ${calculation}
resevaluatestr(eval(str({res} evaluate str(eval(str(resevaluatestr(eval(str({calculation})))
[Return] ${res}
执行结果:
在这里插入图片描述

代码示例2:

*** 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

*** Keywords ***
The result of ${calculation} should be ${expected}
${result} = Calculate ${calculation}
Should Be Equal ${result} ${expected}

Calculate
[Arguments] ${calculation}
resevaluatestr(eval(str({res} evaluate str(eval(str(resevaluatestr(eval(str({calculation})))
[Return] ${res}

执行结果:
Starting test: Em Arg Template1.Different argument names
20190629 13:52:45.376 : INFO : ${res} = 2
20190629 13:52:45.378 : INFO : ${result} = 2
20190629 13:52:45.383 : INFO : ${res} = 3
20190629 13:52:45.385 : INFO : ${result} = 3
Ending test: Em Arg Template1.Different argument names

Starting test: Em Arg Template1.Only some arguments
20190629 13:52:45.394 : INFO : ${res} = 3
20190629 13:52:45.395 : INFO : ${result} = 3
20190629 13:52:45.401 : INFO : ${res} = 3
20190629 13:52:45.402 : INFO : ${result} = 3
Ending test: Em Arg Template1.Only some arguments

Starting test: Em Arg Template1.New arguments
20190629 13:52:45.411 : INFO : ${res} = 42
20190629 13:52:45.412 : INFO : ${result} = 42
Ending test: Em Arg Template1.New arguments
6. 使用库

这部分介绍如何使用测试库和库的中的关键字。

6.1. 导入库

关键字是Library,有2种方式导入指定的库:

l 使用Library关键字,通过库名导入

这种方式本质使用的就是python中导入模块的,根据搜索路径来查找文件

语法:Library [库名]

*** Settings ***

Library OperatingSystem

Library my.package.TestLibrary

Library MyLibrary arg1 arg2

Library ${LIBRARY}

注意:库名都是大小写敏感的,而且空格的个数也需要严格按照库名来写

l 使用Library关键字,通过文件路径导入

语法:Library [库文件路径]

*** Settings ***

Library PythonLibrary.py (要有后缀名)

Library /absolute/path/JavaLibrary.java

Library relative/path/PythonDirLib/ possible arguments

Library ${RESOURCES}/Example.class

6.2. 导入库时使用别名

如果导入的库名很长或者级别很多,或者是同样的库但是用不同的版本等情况下,就可以使用别名,将库重命名为简单的字符,方便后续操作,

关键字:WITH NAME,大小写敏感。

基本用法如下:

*** Settings ***

Library com.company.TestLib WITH NAME TestLib

Library ${LIBRARY} WITH NAME MyName

同一个库引用多次:

*** Settings ***

Library SomeLibrary localhost 1234 WITH NAME LocalLib

Library SomeLibrary server.domain 8080 WITH NAME RemoteLib

*** Test Cases ***

My Test

LocalLib.Some Keyword some arg second arg

RemoteLib.Some Keyword another arg whatever

LocalLib.Another Keyword

  1. 变量

Robot Framework中有很多地方使用到变量,比如关键字的参数,临时变量等等,用来暂时或者永久存储一些数据。Robot Framework支持的变量类型包括,标量,列表、字典和环境变量,引用的语法分别为:${SCALAR}, @{LIST} ,&{DICT},%{ENV_VAR}。标量,可理解为单值变量,与之对应的是List这种多值变量。单值不仅仅可以是字符串、数值这样的,还有可能是个对象或者字典。

Robot Framework变量, 与关键字类似不区分大小写, 同时其中的下划线和空格也会被忽略。推荐使用大写字母来表示全局变量(如 ${PATH} 或 ${TWO WORDS}), 小写字母来表示局部变量(如 ${my var} 或 ${myVar})。

7.1. 标量

在*** Variables 下,用${var}定义标量,在 Test Cases ***中用log输出

代码示例1:

*** Variables ***
${NAME} robot framework
${VERSION} 3.1
${CONN} ${NAME} + ${VERSION}

*** Test Cases ***
scalar
log ${NAME}
log ${VERSION}
log ${CONN}

执行结果:

Starting test: Rf Demo1.Variables.scalar
20190629 15:53:46.477 : INFO : robot framework
20190629 15:53:46.479 : INFO : 3.1
20190629 15:53:46.481 : INFO : robot framework + 3.1
Ending test: Rf Demo1.Variables.scalar
7.2. 列表

创建:列表创建时使用的标识符为@,

访问:@{NAME}[index]或者 NAME[index],其中index为下标。RobotFramework3.1版本中,除了列表的切片必须用{NAME}[index],其中index为下标。Robot Framework 3.1版本中,除了列表的切片必须用NAME[index],indexRobotFramework3.1符号外其它情况下@和都可以,建议使用都可以,建议使用使。列表的访问和python中类似,下标从0开始,负数的话表示从后向前取数据,如果下标超过列表长度的话会报索引错误,也可以使用切片

代码示例:

*** Variables ***
@{colors} red green white
@{nums} 1 2
${index} 2

*** Test Cases ***
list
log ${colors}[0]
log @{colors}[-1]#取最后一个元素
log KaTeX parse error: Expected 'EOF', got '#' at position 13: {colors}[1:]#̲切片,注意是开头
log @{colors}[KaTeX parse error: Expected 'EOF', got '#' at position 9: {index}]#̲列表和标量结合使用 log …{index}] #越界
执行结果:

7.3. 字典

创建:字典创建和访问时使用的标识符为&,

访问:通过 &{NAME}[key]或者NAME[key]这样的语法格式获取字典中某项的值,其中key是键的名称。RobotFramework3.1版本中,以上两种语法都支持,但是建议使用{NAME}[key] 这样的语法格式获取字典中某项的值, 其中 key 是键的名称。Robot Framework 3.1版本中,以上两种语法都支持,但是建议使用NAME[key],keyRobotFramework3.1使。字典的键名当作字符串处理, 非字符串的键可以用变量代替

代码示例1:创建字典并获取其中的项

*** Variables ***
&{user 1} name=kongsh password=1234 age=${42}
&{user 2} name=kongsh password=1234 password=8888#key重复
&{user 3} name=kongsh=tt #变量值中有=号时需要用反斜杠\转义
${key} name

*** Test Cases ***
dict
log many user1[{user 1}[user1[{key}] ${user 1}[age]
log ${user 2}[password]
log &{user 3}[name]
log ${user 3.name}#点的方式访问

执行结果:

说明:

  1. 字典的key不会有重复的值,多次写同一个key时只保留最后一次写的结果

  2. 变量值中有=号时需要反斜杠转义

  3. 如果键是字符串, 还可以使用另一种语法格式 ${NAME.key}(注意这里是 $ )。

代码示例2:字典中的项可以作为命名参数传给关键字

假设有个字典变量 &{USER} 中有值 {‘name’: ‘robot’, ‘password’: ‘secret’}, 则下面两个用例的效果是等价的。伪代码:

*** Test Cases ***

Constants

Login name=robot password=secret

Dict Variable

Login &{USER}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值