robotframework框架(三)之常用关键字
一、简介
Robot Framework是一款基于Python的开源自动化测试框架,具有良好的可扩展性和关键字驱动的特点。它主要用于验收测试(Acceptance Testing)和验收测试驱动开发(ATDD),同时也支持行为驱动开发(BDD)和机器人流程自动化(RPA),主要有以下特点:
- 关键字驱动:Robot Framework采用关键字驱动的方法来编写测试用例,这使得测试用例易于理解和维护。
- 易于使用的表格语法:测试数据通常以表格的形式输入,这种表格式的语法简单易用,并且可以方便地编辑和管理测试用例。
- 高度可扩展性:可以通过XML-RPC服务或其他编程语言(如Java)扩展框架的功能,从而满足不同的测试需求。
- 多客户端和接口支持:能够同时测试多种类型的客户端(Web、PC、移动端)或接口,适用于分布式、异构环境中的自动化测试。
- 丰富的库支持:提供了标准库和远程库,用户可以根据需要创建新的测试库,例如Selenium库用于Web应用测试,Remote Swing库用于Java应用测试等。
- 生成详细的报告和日志:提供易于阅读的结果报告和HTML格式的日志,帮助用户快速定位问题并进行分析。
二、BuiltIn常用关键字
BuiltIn库是Robot Framework中默认可用的库,它提供了许多通用的关键字,用于控制测试的执行流程、管理变量、进行断言等。以下是一些常用的BuiltIn库关键字及其使用方法和代码示例:
-
Should Be Equal
- 检查两个项是否相等。
Should Be Equal ${expected} ${actual}
-
Should Be True
- 检查表达式是否为真。
Should Be True ${condition}
-
Should Be False
- 检查表达式是否为假。
Should Be False ${condition}
-
Should Contain
- 检查字符串是否包含子字符串。
Should Contain ${string} ${substring}
-
Should Not Contain
- 检查字符串是否不包含子字符串。
Should Not Contain ${string} ${substring}
-
Log
- 向日志中添加一条消息。
Log Hello, this is a log message!
-
Sleep
- 暂停执行指定的时间。
Sleep 1s
-
Set Test Variable
- 设置测试用例变量的值。
Set Test Variable ${my_var} Some value
-
Get Time
- 获取当前时间。
${current_time}= Get Time
-
Run Keyword If
- 根据条件运行关键字。
Run Keyword If ${condition} Some Keyword
-
Run Keyword Unless
- 如果条件不成立,则运行关键字。
Run Keyword Unless ${condition} Some Keyword
-
Run Keyword And Ignore Error
- 运行关键字并忽略错误。
Run Keyword And Ignore Error Some Keyword
-
Repeat Keyword
- 重复运行关键字多次。
Repeat Keyword 5 times Some Keyword
-
[Tags]
- 为测试用例或测试套件定义标签。
*** Test Cases *** Example Test [Tags] smoke regression
-
[Documentation]
- 为测试用例或测试套件提供文档说明。
*** Settings *** Documentation This is an example test suite.
-
[Setup] / [Teardown]
- 定义测试用例或测试套件的前置和后置执行关键字。
*** Test Cases *** Example Test [Setup] Open Browser http://example.com [Teardown] Close Browser
-
[Return]
- 从测试用例或关键字中返回。
[Return] ${result}
-
Should Be None
- 检查变量是否为None。
Should Be None ${variable}
-
Should Not Be None
- 检查变量是否不为None。
Should Not Be None ${variable}
-
Should Be Empty
- 检查字符串或列表是否为空。
Should Be Empty ${string}
-
Should Not Be Empty
- 检查字符串或列表是否不为空。
Should Not Be Empty ${list}
-
Length Should Be
- 检查字符串或列表的长度。
Length Should Be ${list} 3
-
Should Match Regexp
- 检查字符串是否匹配正则表达式。
Should Match Regexp ${string} ^abc.*
-
Should Be True
- 检查表达式是否为真。
Should Be True ${result} > 0
-
Evaluate
- 执行Python表达式并返回结果。
${result}= Evaluate 2 * ${var}
-
Get Length
- 获取字符串或列表的长度。
${length}= Get Length ${string}
-
Should Start With
- 检查字符串是否以指定的子字符串开始。
Should Start With ${string} ${prefix}
-
Should End With
- 检查字符串是否以指定的子字符串结束。
Should End With ${string} ${suffix}
-
Convert To String
- 将任意项转换为字符串。
${string}= Convert To String ${number}
-
Convert To Integer
- 将字符串转换为整数。
${integer}= Convert To Integer ${string}
-
Convert To Boolean
- 将字符串转换为布尔值。
${boolean}= Convert To Boolean ${string}
-
Set Suite Variable
- 设置测试套件变量的值。
Set Suite Variable ${SUITE_VAR} Some value
-
Set Global Variable
- 设置全局变量的值。
Set Global Variable ${GLOBAL_VAR} Some value
-
Get Variables
- 获取所有变量及其值。
${variables}= Get Variables
-
Get Variable Value
- 获取特定变量的值。
${value}= Get Variable Value ${variable_name}
-
Create List
- 创建一个列表。
${list}= Create List item1 item2 item3
-
Append To List
- 向列表追加项。
Append To List ${list} item4
-
Set Length
- 设置字符串或列表的长度。
Set Length ${string} 5
-
Remove Tags
- 从测试用例中移除标签。
Remove Tags ${test_case} tag1 tag2
-
Fatal Error
- 立即终止测试执行,并报告致命错误。
Fatal Error Test cannot continue due to an error.
-
Comment
- 添加注释,该注释不会出现在测试日志中。
Comment This is a comment.
-
[Timeout]
- 设置测试用例的超时时间。
*** Test Cases *** Example Test [Timeout] 10 seconds
-
Wait Until Keyword Succeeds
- 等待直到关键字成功执行。
Wait Until Keyword Succeeds 10 sec 1 sec Keyword Should Be True ${condition}
-
Wait Until Keyword Fails
- 等待直到关键字失败执行。
Wait Until Keyword Fails 10 sec 1 sec Keyword Should Be True ${condition}
-
Wait Until Page Contains
- 等待直到页面包含指定文本。
Wait Until Page Contains expected text
-
Wait Until Element Is Visible
- 等待直到元素可见。
Wait Until Element Is Visible ${locator}
-
Wait Until Element Is Not Visible
- 等待直到元素不可见。
Wait Until Element Is Not Visible ${locator}
-
Import Library
- 导入外部库。
Import Library SeleniumLibrary
-
Import Resource
- 导入外部资源文件。
Import Resource keywords.robot
-
[Arguments]
- 定义测试套件或测试用例的参数。
*** Settings *** [Arguments] arg1 arg2
请注意,BuiltIn库的关键字数量非常多,这里只列出了一部分常用的关键字。在实际的测试脚本中,你可以根据需要使用更多的关键字和自定义关键字。在RIDE中,你可以通过按下F5键或使用工具栏的“Search Keywords”功能来查找和使用这些关键字。
三、Collections常用关键字
Robot Framework 的 Collections 库提供了一组用于操作列表(Lists)和字典(Dictionaries)的关键字。以下是一些 Collections 库中常用的关键字及其使用方法和代码示例:
-
Create List
-
创建一个列表。
-
用法:
@{list}= Create List value1 value2 value3
-
例子:
*** Variables *** @{Fruits}= Create List Apple Banana Orange
-
-
Get From List
-
从列表中获取一个元素。
-
用法:
${value}= Get From List ${list} index
-
例子:
*** Test Cases *** Example ${first_fruit}= Get From List ${Fruits} 0 Log ${first_fruit}
-
-
List Should Contain
-
检查列表是否包含某个元素。
-
用法:
List Should Contain ${list} value
-
例子:
*** Test Cases *** Example List Should Contain ${Fruits} Banana
-
-
List Should Not Contain
-
检查列表是否不包含某个元素。
-
用法:
List Should Not Contain ${list} value
-
例子:
*** Test Cases *** Example List Should Not Contain ${Fruits} Mango
-
-
Append To List
-
向列表追加一个元素。
-
用法:
Append To List ${list} value
-
例子:
*** Test Cases *** Example Append To List ${Fruits} Mango
-
-
Remove From List
-
从列表中移除一个元素。
-
用法:
Remove From List ${list} value
-
例子:
*** Test Cases *** Example Remove From List ${Fruits} Orange
-
-
Insert Into List
-
在列表的指定位置插入一个元素。
-
用法:
Insert Into List ${list} index value
-
例子:
*** Test Cases *** Example Insert Into List ${Fruits} 1 Mango
-
-
Set List Value
-
设置列表中指定位置的元素。
-
用法:
Set List Value ${list} index value
-
例子:
*** Test Cases *** Example Set List Value ${Fruits} 1 Pineapple
-
-
Get Length
-
获取列表或字典的长度。
-
用法:
${length}= Get Length ${list_or_dict}
-
例子:
*** Test Cases *** Example ${length}= Get Length ${Fruits} Log There are ${length} fruits.
-
-
Create Dictionary
-
创建一个字典。
-
用法:
&{dict}= Create Dictionary key1=value1 key2=value2
-
例子:
*** Variables *** &{FruitDict}= Create Dictionary Apple=Red Banana=Yellow Orange=Orange
-
-
Get From Dictionary
-
从字典中获取一个值。
-
用法:
${value}= Get From Dictionary ${dict} key
-
例子:
*** Test Cases *** Example ${apple_color}= Get From Dictionary ${FruitDict} Apple Log Apple color is ${apple_color}
-
-
Remove From Dictionary
-
从字典中移除一个键值对。
-
用法:
Remove From Dictionary ${dict} key
-
例子:
*** Test Cases *** Example Remove From Dictionary ${FruitDict} Orange
-
-
Pop From Dictionary
-
从字典中移除一个键值对并返回其值。
-
用法:
${value}= Pop From Dictionary ${dict} key
-
例子:
*** Test Cases *** Example ${apple_color}= Pop From Dictionary ${FruitDict} Apple Log Apple color was ${apple_color}
-
-
Copy Dictionary
-
复制一个字典。
-
用法:
&{dict_copy}= Copy Dictionary ${dict}
-
例子:
*** Test Cases *** Example &{FruitDictCopy}= Copy Dictionary ${FruitDict}
-
-
Dictionary Should Contain Key
-
检查字典是否包含某个键。
-
用法:
Dictionary Should Contain Key ${dict} key
-
例子:
*** Test Cases *** Example Dictionary Should Contain Key ${FruitDict} Banana
-
-
Dictionary Should Contain Value
-
检查字典是否包含某个值。
-
用法:
Dictionary Should Contain Value ${dict} value
-
例子:
*** Test Cases *** Example Dictionary Should Contain Value ${FruitDict} Yellow
-
-
Set To Dictionary
-
在字典中设置一个键的值。
-
用法:
Set To Dictionary ${dict} key value
-
例子:
*** Test Cases *** Example Set To Dictionary ${FruitDict} Banana Green
-
-
Merge Dictionaries
-
合并两个字典。
-
用法:
&{merged_dict}= Merge Dictionaries ${dict1} ${dict2}
-
例子:
*** Variables *** &{FruitDict}= Create Dictionary Apple=Red Banana=Yellow &{VegetableDict}= Create Dictionary Carrot=Orange Spinach=Green *** Test Cases *** Example &{AllDict}= Merge Dictionaries ${FruitDict} ${VegetableDict}
-
在使用这些关键字之前,你需要在测试套件的设置中导入Collections库:
*** Settings ***
Library Collections
然后,你就可以在测试用例中使用上述关键字了。这些关键字可以帮助你在测试中处理复杂的列表和字典操作,例如列表的增删改查、字典的键值对操作等。
四、DateTime常用关键字
Robot Framework的DateTime库提供了一组用于处理日期和时间的关键字。以下是一些常用的DateTime库关键字及其使用方法和代码示例:
- Get Current Date
- 获取当前日期。
- 用法:
${date}= Get Current Date format=YYYY-MM-DD
- 例子:
${today}= Get Current Date
- Get Current Time
- 获取当前时间。
- 用法:
${time}= Get Current Time format=HH:MM:SS
- Convert Date
- 将日期转换为不同的格式。
- 用法:
${new_date}= Convert Date ${date} format=YYYY-MM-DD base=NOW
- 例子:
${tomorrow}= Convert Date ${today} base=NOW days=1
- Convert Time
- 将时间转换为不同的格式。
- 用法:
${new_time}= Convert Time ${time} format=HH:MM:SS
- Get Timezone Offset
- 获取当前时区与UTC的时间差。
- 用法:
${offset}= Get Timezone Offset
- Sleep Until Time
- 暂停执行直到指定的时间。
- 用法:
Sleep Until Time 23:59:59
- Set Timezone To UTC
- 将时区设置为UTC。
- 用法:
Set Timezone To UTC
- Set Timezone
- 设置时区。
- 用法:
Set Timezone America/New_York
- Validate Date
- 验证日期是否有效。
- 用法:
Validate Date YYYY-MM-DD
- Validate Time
- 验证时间是否有效。
- 用法:
Validate Time HH:MM:SS
请注意,DateTime库可能不在Robot Framework的标准库中,因此在使用之前可能需要先安装。安装后,你可以在测试套件的设置中导入DateTime库:
robot*** Settings ***
Library DateTime
然后,你就可以在测试用例中使用上述关键字了。这些关键字可以帮助你在测试中处理日期和时间相关的逻辑,例如等待特定时间、计算日期差等。
五、SeleniumLibrary常用关键字
Robot Framework 的 SeleniumLibrary(以前称为 Selenium2Library)是一个用于Web测试的库,它提供了许多关键字来模拟用户与Web浏览器的交互。以下是一些 SeleniumLibrary 中常用的关键字及其使用方法和代码示例:
-
Open Browser
-
打开一个新的浏览器窗口。
-
用法:
Open Browser http://example.com
-
例子:
*** Settings *** Library SeleniumLibrary *** Test Cases *** Open Browser Test Open Browser http://example.com
-
-
Close Browser
-
关闭当前浏览器窗口。
-
用法:
Close Browser
-
例子:
Close Browser
-
-
Get Title
-
获取当前页面的标题。
-
用法:
${title}= Get Title
-
例子:
*** Test Cases *** Get Title Test ${title}= Get Title Log Page title is ${title}
-
-
Go To
-
导航到指定的URL。
-
用法:
Go To http://example.com
-
例子:
Go To http://example.com
-
-
Click Button
-
点击一个按钮。
-
用法:
Click Button locator
-
例子:
Click Button Submit
-
-
Input Text
-
在文本框中输入文本。
-
用法:
Input Text locator text
-
例子:
Input Text name_field John Doe
-
-
Get Text
-
获取元素的文本。
-
用法:
${text}= Get Text locator
-
例子:
*** Test Cases *** Get Text Test ${link_text}= Get Text WelcomeLink Log The link text is ${link_text}
-
-
Wait Until Element Is Visible
-
等待直到元素可见。
-
用法:
Wait Until Element Is Visible locator timeout
-
例子:
Wait Until Element Is Visible login_button 10
-
-
Wait Until Page Contains
-
等待直到页面包含指定文本。
-
用法:
Wait Until Page Contains text timeout
-
例子:
Wait Until Page Contains Thank you for logging in 30
-
-
Select From List By Index
-
通过索引从列表中选择选项。
-
用法:
Select From List By Index locator index
-
例子:
Select From List By Index fruit_list 2
-
-
Select Checkbox
-
选择或取消选择复选框。
-
用法:
Select Checkbox locator
-
例子:
Select Checkbox agree_terms
-
-
Get Selected List Label
-
获取选中列表项的标签。
-
用法:
${label}= Get Selected List Label locator
-
例子:
*** Test Cases *** Get Selected List Label Test ${selected_label}= Get Selected List Label language_list Log The selected language is ${selected_label}
-
-
Switch Window
-
切换到另一个浏览器窗口。
-
用法:
Switch Window window_id_or_name
-
例子:
Switch Window NewWindow
-
-
Execute Javascript
-
执行JavaScript代码。
-
用法:
Execute Javascript javascript_code
-
例子:
Execute Javascript window.scrollTo(0, document.body.scrollHeight);
-
-
Capture Page Screenshot
-
捕获当前页面的屏幕截图。
-
用法:
Capture Page Screenshot filename
-
例子:
Capture Page Screenshot screenshot.png
-
在使用这些关键字之前,你需要在测试套件的设置中导入SeleniumLibrary:
*** Settings ***
Library SeleniumLibrary
然后,你就可以在测试用例中使用上述关键字了。这些关键字可以帮助你自动化Web浏览器上的各种操作,例如打开网页、填写表单、点击按钮、验证页面内容等。
六、DatabaseLibrary常用关键字
Robot Framework 的 DatabaseLibrary 提供了一组用于与数据库交互的关键字,允许你执行SQL语句、查询数据和管理数据库连接。以下是一些 DatabaseLibrary 中常用的关键字及其使用方法和代码示例:
-
Connect To Database
-
连接到数据库。
-
用法:
Connect To Database database_url
-
例子:
*** Settings *** Library DatabaseLibrary *** Test Cases *** Example Connect To Database sqlite:///example.db
-
-
Close Database
-
关闭数据库连接。
-
用法:
Close Database
-
例子:
Close Database
-
-
Execute SQL
-
执行SQL语句。
-
用法:
Execute SQL sql_query
-
例子:
*** Test Cases *** Create Table Execute SQL CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)
-
-
Query
-
执行SQL查询并返回结果。
-
用法:
@{result}= Query sql_query
-
例子:
*** Test Cases *** Get Users @{users}= Query SELECT * FROM users Log Many @{users}
-
-
Get Table Names
-
获取数据库中所有表的名称。
-
用法:
@{tables}= Get Table Names
-
例子:
*** Test Cases *** List Tables @{tables}= Get Table Names Log Many @{tables}
-
-
Get Column Names
-
获取表的列名。
-
用法:
@{columns}= Get Column Names table_name
-
例子:
*** Test Cases *** List Columns @{columns}= Get Column Names users Log Many @{columns}
-
-
Insert Into Table
-
向表中插入数据。
-
用法:
Insert Into Table table_name column1=value1 column2=value2
-
例子:
*** Test Cases *** Insert User Insert Into Table users name=John Doe
-
-
Update Table
-
更新表中的数据。
-
用法:
Update Table table_name column=value condition
-
例子:
*** Test Cases *** Update User Update Table users name=Jane Doe WHERE id=1
-
-
Delete From Table
-
从表中删除数据。
-
用法:
Delete From Table table_name condition
-
例子:
*** Test Cases *** Delete User Delete From Table users WHERE id=1
-
-
Row Count
-
获取表中的行数。
-
用法:
${count}= Row Count table_name
-
例子:
*** Test Cases *** Count Users ${count}= Row Count users Log Number of users: ${count}
-
-
Table Should Exist
-
检查表是否存在。
-
用法:
Table Should Exist table_name
-
例子:
*** Test Cases *** Check Table Existence Table Should Exist users
-
-
Column Should Exist
-
检查列是否存在于表中。
-
用法:
Column Should Exist table_name column_name
-
例子:
*** Test Cases *** Check Column Existence Column Should Exist users name
-
在使用这些关键字之前,你需要在测试套件的设置中导入DatabaseLibrary:
*** Settings ***
Library DatabaseLibrary
然后,你就可以在测试用例中使用上述关键字了。这些关键字可以帮助你进行数据库测试,例如测试数据库的增删改查操作、验证数据完整性、执行数据迁移等。请注意,你需要根据你的数据库类型(如 MySQL、PostgreSQL、SQLite 等)提供正确的连接字符串。
七、String常用关键字
Robot Framework 的 String 库提供了一组用于字符串操作的关键字,这些关键字可以帮助你执行各种字符串处理任务,如字符串搜索、替换、分割和连接等。以下是一些 String 库中常用的关键字及其使用方法和代码示例:
-
Get Length
-
获取字符串的长度。
-
用法:
${length}= Get Length ${string}
-
例子:
*** Test Cases *** Get String Length ${length}= Get Length Robot Framework Log The length of the string is ${length}
-
-
Should Be Equal (As Strings)
-
检查两个字符串是否相等。
-
用法:
Should Be Equal (As Strings) ${string1} ${string2}
-
例子:
*** Test Cases *** Strings Should Be Equal Should Be Equal (As Strings) Robot R00b0t
-
-
Should Not Be Equal (As Strings)
-
检查两个字符串是否不相等。
-
用法:
Should Not Be Equal (As Strings) ${string1} ${string2}
-
例子:
*** Test Cases *** Strings Should Not Be Equal Should Not Be Equal (As Strings) Robot Framework
-
-
Should Contain
-
检查字符串是否包含另一个子字符串。
-
用法:
Should Contain ${string} ${substring}
-
例子:
*** Test Cases *** String Should Contain Should Contain Robot Framework is great great
-
-
Should Not Contain
-
检查字符串是否不包含另一个子字符串。
-
用法:
Should Not Contain ${string} ${substring}
-
例子:
*** Test Cases *** String Should Not Contain Should Not Contain Robot Framework Java
-
-
Concatenate
-
连接两个或多个字符串。
-
用法:
${result}= Concatenate ${string1} ${string2} separator=${separator}
-
例子:
*** Test Cases *** Concatenate Strings ${concatenated}= Concatenate Robot Framework separator= _ Log The concatenated string is ${concatenated}
-
-
Fetch From Left
-
从字符串左侧获取指定数量的字符。
-
用法:
${result}= Fetch From Left ${string} ${length}
-
例子:
*** Test Cases *** Fetch From Left ${substring}= Fetch From Left Robot Framework 5 Log The substring is ${substring}
-
-
Fetch From Right
-
从字符串右侧获取指定数量的字符。
-
用法:
${result}= Fetch From Right ${string} ${length}
-
例子:
*** Test Cases *** Fetch From Right ${substring}= Fetch From Right Robot Framework 6 Log The substring is ${substring}
-
-
Split String
-
根据分隔符分割字符串。
-
用法:
@{list}= Split String ${string} separator=${separator}
-
例子:
*** Test Cases *** Split String @{words}= Split String Robot Framework separator=_ Log Many @{words}
-
-
Replace String
-
替换字符串中的子字符串。
-
用法:
${result}= Replace String ${string} old=${old} new=${new}
-
例子:
*** Test Cases *** Replace String ${new_string}= Replace String Robot Framework Robot R00b0t Log The new string is ${new_string}
-
-
Log Many
-
记录多个字符串,每个字符串为日志中的一个单独条目。
-
用法:
Log Many @{strings}
-
例子:
*** Test Cases *** Log Many Strings Log Many Robot Framework is great
-
-
Should Match Regexp
-
检查字符串是否匹配正则表达式。
-
用法:
Should Match Regexp ${string} pattern=${pattern}
-
例子:
*** Test Cases *** String Should Match Regexp Should Match Regexp Robot Framework Robot.*
-
在使用这些关键字之前,你需要在测试套件的设置中导入String库:
*** Settings ***
Library String
然后,你就可以在测试用例中使用上述关键字了。这些关键字可以帮助你在测试中执行字符串处理,例如验证返回的文本、构建动态字符串、分割和重组字符串等。
八、参考
- selenium官网:https://www.selenium.dev/
- driver下载地址:https://www.selenium.dev/zh-cn/documentation/selenium_manager/
- chromedriver下载镜像地址(版本不一定最新):https://registry.npmmirror.com/binary.html?path=chromedriver/
- chromedriver下载地址(最新):https://googlechromelabs.github.io/chrome-for-testing/
- firefoxdriver下载:https://github.com/mozilla/geckodriver
- robotframework手册:https://robotframework.org/robotframework/