Robot Framework
🍰 基于Python的关键字驱动测试框架,用于验收测试驱动开发(ATDD)、行为驱动开发(BDD)、机器人流程自动化(RPA)。
1 库安装
- 库安装
- 基于Python安装robotframework:
pip install robotframework
。 - 安装robotframework-ride:
pip install robotframework-ride
。 - 安装seleniumlibrary库:
pip install robotframework-seleniumlibrary
。 - Python3.8版本以上可使用最新版的RobotFramework,否则需下载对应版本。
- 基于Python安装robotframework:
1 |
|
1-1 报错分析
- 报错分析
- 库安装完成时,桌面可能没有ride.py可执行文件,也搜索不到ride.py文件。
- 命令
pip show robotframework-ride
查找安装路径,打开文件夹定位到该路径下。 - 一般位于
C:\Users\Admin\AppData\Roaming\Python\Python39\Scripts
文件夹中。 - 在该文件夹中鼠标右键
Git Bash here
打开命令窗口,输入python ride.py
执行。 - 问题定位
ImportError: DLL load failed while importing _sqlite3
:无法找到sqlite3库的动态链接库。- 这里使用的Python环境是Anaconda3(指定了安装路径),与库的安装路径
C:\...\Python39
不一致。 - 执行ride.py时,位于C盘的robotframework库文件识别不到Anaconda下的sqlite3库(Python自带库)。
1 |
|
1-2 解决方法
- 解决方法
- 到系统环境变量PATH中添加
...\Anaconda3\Library\bin
变量。 - 排序一定要在第三方库环境
C:\...\Python39\Scripts
变量上面。
- 到系统环境变量PATH中添加
1-3 Console报错
- Console报错
- 执行测试用例时,在Run运行区会以红色字体显示报错信息,报错信息如下。
- 官方给出的回答是:RIDE还未完全支持最近发布的Robot Framework版本7。
- 解决方法
- 卸载:
pip uninstall robotframework
。 - 重装:
pip install robotframework==6.1.1
。
- 卸载:
1 |
|
2 界面介绍
- 界面介绍
- 执行ride.py文件,或命令窗口定位到该文件目录,执行
python ride.py
,即可打开RIDE主界面。 - 工具栏:点击可查找关键字,或快捷键F5查找,点击可查找测试用例,或快捷键F3查找。
- Editor是编辑区,Text Edit是代码格式区,Run是运行区。
- Text Edit区记录的是Settings设置和测试用例文本信息,由RIDE自动生成,不需要用户进行编写。
- Run运行区
- Execution Profile:选择运行的方式,选项有custom script、pybot、jybot等,默认robot即可。
- Report和Log:报告和日志,运行后才能点击,区别在于报告是结果展示,日志是过程的记录。
- Autosave:若不勾选,修改用例后没保存,执行用例时将提示保存,勾选则在运行时自动保存。
- Pause on failure:关键字执行失败立马暂停。
- Start:运行用例。
- 若该测试套件下的测试用例没有勾选,则默认执行该测试套件下所有的用例。
- 若该测试套件下的测试用例勾选了,那么执行该测试套件下勾选的所有用例。
- Stop:停止用例。
- Only Run Tests with these Tags:只运行带有标记的测试用例。
- Skip Tests with these Tags:指跳过带有标记的所有测试用例。
- 执行ride.py文件,或命令窗口定位到该文件目录,执行
2-1 Settings部分
- Settings部分
- 项目
- Documentation:给当前对象写一些文档说明。
- Suite Setup:测试套件启动时,先执行指定的关键字,例如设置等待5秒,即
Sleep | 5sec
。 - Suite Teardown:测试套件结束时,先执行指定的关键字。
- Test Setup:测试用例启动时,先执行指定的关键字。
- Test Teardown:测试用例结束时,先执行指定的关键字。
- Force Tags:给当前项目及项目下的套件及套件下的每个用例都加上Tag,只能在设置处删除。
- 套件
- Documentation、Suite Setup、Suite Teardown、Test Setup、Test Teardown、Force Tags同。
- Test Template:测试模板。
- 可以指定关键字为该测试套件下所有测试用例的模版。
- 这样所有的用例只需设置指定关键字的传入参数即可。
- Test Timeout:超时时间。
- 设置每一个测试用例的超时时间,超时即失败并停止用例的运行。
- 这是为了防止某些情况导致用例一直卡住不动,不停止也不失败。
- Test Tags:给当前测试套件及套件下的每个测试用例都加上Tag,只能在设置处删除。
- Default Tags:默认标记,给自身打上Tag,而不会给子集打上Tag(区分Force Tags)。
- 用例
- Setup:测试用例启动时,先执行指定的关键字。
- Teardown:测试用例结束时,先执行指定的关键字。
- Timeout:设置当前用例的超时时间,超时则失败并停止运行。
- Template:测试模版,可以指定关键字为当前测试用例的模版。
- Tags:标记当前测试用例,在Run的Tests filters中,将通过Tags来识别是否运行或跳过用例。
- 项目
2-2 加载外部文件
- 加载外部文件
- Library:加载库,主要是Python目录\Lib\site-packages中的测试库,库字体标红则说明导入失败。
- Resource:加载资源,主要是项目相关的资源文件。
- Variables:加载变量文件,不怎么使用,可以忽略。
2-3 定义内部变量
- 定义内部变量
- Add Scalar:定义变量。
- Add List:定义列表类型变量。
- Add Dict:定义字典类型变量。
- 内部变量是Robot Framework自身使用的变量,是在测试执行过程动态生成的,且无法直接修改。
- Add Metadata:定义元数据,即关于测试套件的附加信息,如作者、版本、描述等(非内部变量)。
2-4 测试用例表格
- 测试用例表格
- 表格的第一列一般填写的是关键字,关键字来源包括Builtln库、第三方库、自定义库。
- 表格的二三四等列一般输入参数,红色代表必填,浅灰代表选填,深灰代表无需填写。
- 左侧的Test Suites区域,如果测试套件或测试用例名称左上角带*号,说明文件没保存。
3 常用类库
- 常用类库
- 标准库
- 安装位置:Python路径\Lib\site-packages\robot\libraries。
- Builtln(测试库)、Collections(集合库)、Datatime(时间库)。
- 使用集合库的关键字没有成功引入时,需在测试套件中添加。
- 在测试套件的Editor中,点击Library,直接输入名称,点OK。
- 扩展库(通过PIP安装)
- 安装位置:Python路径\Lib\site-packages。
- 接口自动化:
pip install robotframework-requests
。 - APP自动化:
pip install robotframework-appiumlibrary
。 - WEB自动化:
pip install robotframework-seleniumlibrary
。
- 标准库
3-1 F5查看
- F5查看
- Name(关键字名称)、Source(关键字的位置)。
- Arguments(传入参数)、Examples(使用示例)。
3-2 关键字
- 关键字
- 代码注释
Ctrl + #
、取消注释Ctrl + $
、撤销操作Ctrl + z
、删除整行Ctrl + d
。 - 关键字补全
Ctrl + Shift + 空格
,将鼠标放在关键字上按住Ctrl
可查看关键字详情。 - 常用关键字
- 打印
Log Hello world~
、获取系统时间${time} Get Time
。 - 强制等待3秒
sleep 3
、设置变量${num} Set Variable 66
。 - 字符串拼接:
${str1} Set Variable 今天
、${str2} Set Variable 周末
。- 用变量替换:
${str3} Set Variable ${str1}${str2}
,打印Log ${str3}
。 - Catenate关键字:
${str4} Catenate ${str1}${str2}
,打印Log ${str4}
。
- 用变量替换:
- 打印
- 集合关键字:在测试套件中点Library导入Collections集合库(标准库)。
- 列表
- 关键字格式1:
${list1} Create List apple lemon mango
。 - 打印关键字1:
Log ${list1}
。 - 关键字格式2:
@{list2} Create List apple peach mango
。 - 打印关键字2:
Log Many @{list2}
。
- 关键字格式1:
- 字典
- 格式
${dict} Create Dictionary 苹果=apple 柠檬=lemon
、打印Log ${dict}
。 - 获取字典中所有key值
${keys} Get Dictionary Keys ${dict}
、打印Log ${keys}
。 - 获取所有value值
${values} Get Dictionary Values ${dict}
、打印Log ${values}
。 - 通过key获取value值
${key_value} Get From Dictionary ${dict} 苹果
、打印Log ${key_value}
。
- 格式
- 列表
- 代码注释
3-3 格式区
1 |
|
4 调用方法
- 调用方法
- 调用方法,需要使用到Evaluate关键字,可以直接调用Python方法关键字。
- 也可以调用外部Python文件关键字,通过
Import Library
导入外部文件。
4-1 外部文件
1 |
|
4-2 测试用例
4-3 格式代码
1 |
|
5 流程控制
- 流程控制
- 嵌套if需要创建一个
.txt
类型的资源文件,然后自定义关键字IF。 - 格式:
Run Keyword If ${arg}==100 Log 自定义关键字IF嵌套
。 - 自定义关键字IF完成后,在测试套件中点击Resource导入资源文件。
- 最后,在测试用例中调用自定义关键字嵌套IF。
- 嵌套if需要创建一个
5-1 自定义关键字
5-2 Resource导入
5-3 调用关键字嵌套
5-4 Text代码格式区
1 |
|
6 WebUI应用
- WebUI应用
- WebUI应用以登录JForum论坛为例,论坛搭建过程可以参看“页面对象模型”。
- Robot Framework使用的浏览器驱动和Selenium是一样的,驱动安装参考“Selenium概念”。
- 新建项目:File—>New Project—>Name为“Robot Framework”,选择保存路径,类型必须选目录—>OK。
- Type选择Directory(目录),则可以创建测试套件。
- Type选择File(文件),只能创建用例,不利于管理。
- 项目下创建测试套件:选中项目,鼠标右键—>New Suite,Name为“JForum登录”,类型必选文件—>OK。
- Type选择Directory(目录),得再继续创建一个File类型的套件才能创建用例。
- Type选择File(文件),测试用例只允许在Type为File类型的测试套件下创建。
- 测试套件的Editor编辑区,点击Library输入SeleniumLibrary,导入第三方库。
- 套件下创建测试用例:选中套件(File类型),鼠标右键—>New Test Case,Name设为“登录论坛”—>OK。
6-1 登录论坛
6-2 代码格式
1 |
|
6-3 其他元素
- 其他元素
- 进入嵌套框架
Select Frame
、跳出框架Unselect Frame
、RadioBox单选框Click
。 - Option下拉框
- 值定位:
Select From List By Value
。 - 下标定位:
Select From List By Index
。 - 文本定位:
Select From List By Label
。
- 值定位:
- CheckBox复选框:判断框体是否存在于页面
Page Should Contain Element
(断言操作)。${checked} Get Element Attribute xpath=//input[@type='checkbox']@checked
Run Keyword If '${checked}' == 'true' Log 复选框被选中
Run Keyword If '${checked}' == 'false' or '${checked}' == '' Log 复选框未选中或不存在
- 窗口切换:获取所有句柄
${handles} Get Window Handles
、切换窗口Switch Window ${handles[n]}
。 - 执行Js脚本
Execute Javascript
、模拟按键Press Keys
、文件上传Input text
(不用AutoItLibrary库)。
- 进入嵌套框架
7 项目模块分层
- 项目的模块进行分层
- 底层(公共类):针对元素的通用操作来进行实现,SeleniumLibrary库和其他通用库。
- 模块层
- 元素层:针对页面单个元素操作,统一定义为页面元素关键字,给业务层调用。
- 业务逻辑层
- 针对页面具体要实现的行为方法,调用元素层的单一操作进行组合。
- 定义为单个业务关键字,业务即测试人员最终想要实现的测试用例。
- 为了方便后续维护,也为了减少用例编写的步骤冗余,尽量把每个页面单独定义为关键字。
- 例如:登录,需要打开首页,再点击登录,就可以把首页的操作,单独定义在首页模块里。
- 其他地方需用到首页操作时,直接调用资源文件即可,不用每次都单独写一遍,减少冗余。
- 测试用例层:调用业务逻辑层的方法,组合实现想要的用例。
- 设置公共资源变量
- 一些常量可以使用公共变量进行管理
New Scalar
,例如用户名、密码等。 - 使用时,在相应的测试套件中导入资源文件,相应的测试用例中进行调用。
- 一些常量可以使用公共变量进行管理
Robot Framework
https://stitch-top.github.io/2024/07/16/ce-shi-kuang-jia/tf06-robot-framework/tf01-robot-framework/