文章目录
- RobotFramework框架
- 前言
- 一、基础篇——RobotFramework的使用
- 1、RobotFramework环境部署
- 1.1 工具准备
- 1.2 安装
- 2、RIDE使用方法
- 2.1 最基本流程
- 2.1.1 创建项目
- 2.1.2 创建测试套件
- 2.1.3 创建测试用例
- 2.2 Ride各面板说明
- 2.2.1 项目Edit区
- 2.2.2 测试套件Edit区
- 2.2.3 测试用例Edit区
- 使用技巧
- 2.2.4 Text Edit区
- 2.2.5 Run区
- 2.3 案例层和流程层分离
- 2.3.1 创建资源
- 2.3.2 创建User Keyword
- 2.3.3 User Keyword参数设置
- 2.3.4 导入Resource
- 2.4 循环测试用例
- 3、命令行运行RF脚本
- 3.1 运行项目
- 3.2 运行套件
- 3.3 运行用例
- 3.3.1 指定某个suite下某个用例执行
- 3.3.2 指定某个suite下多个用例执行
- 3.3.3 指定多个不同suite下多个用例执行
- 3.3.4 运行指定/除指定Tag的用例
- 3.4 通过执行文件执行命令
- 3.5 结果报告
- 3.5.1 更改结果报告输出目录
- 3.5.2 指定文件输出名
- 4、pabot并行测试
- 4.1 安装
- 4.2 Robot VS Pabot
- 二、进阶篇——RobotFramework应用
- 1、主要应用场景
- 2、总结优劣势(与pytest框架相比)
RobotFramework框架
前言
Robot Framework是一款python编写的功能自动化测试框架。⽀持关键字驱动且可扩展性好,可以同时测试多种类型的客户端,可以进行分布式测试执行。主要用于轮次很多的验收测试和验收测试驱动开发(ATDD)。
Robot Framework 框架除了自身提供了非常多的基础库功能,也支持第三方扩展库,同时提供了非常多的内建工具、扩展接口,方便框架与其他系统进行对接。这些一起构建了一套全面且易扩展的Robot Framework框架生态系统。
一、基础篇——RobotFramework的使用
1、RobotFramework环境部署
1.1 工具准备
- python(3.9.7)
- RIDE必要库
robotframework
wxpython
robotframework-ride - 根据需求安装
robotframework-appiumlibrary
robotframework-Selenium2Library
…
1.2 安装
(1)pip install robotframework
(2)、pip install wxpython
Wxpython是python非常有名的一个GUI库,支持python图形化界面,因为RIDE 是基于这个库开发的,所以这个必须安装。
(3)、pip install robotframework-ride(报错)
RIDE是Robot Framework带图形界面测试编辑器
由于老版RIDE不支持python3,需要安装psutil和最新版的robotframework-ride
解决方法:
pip install psutil
pip install -U --pre robotframework-ride
注:-U升级安装,–pre查找预发行和正在开发的版本
安装完成后桌面会有个RIDE快捷方式:
如果桌面没有图标可从Python/Scripts中运行即可
(4)、pip install robotframework-appiumlibrary
AppiumLibrary是RobotFramework的appium测试库
(5)、pip install robotframework-selenium2Library
Selenium2Library是Robot Framework的Web测试库
2、RIDE使用方法
RIDE是一款专门用来编辑Robot Framework用例的软件。
2.1 最基本流程
2.1.1 创建项目
File->New Project
注:Type选择Directory原因是,在Directory的项目下可以创建测试套件,如果选Tpye为File,则只能创建测试用例,这不利于用例的管理。
2.1.2 创建测试套件
右键项目FirstTest,点击New Suite。
注:Type选择File原因是,测试用例只能在File类型下创建,如果Type为Directory,还得重新再继续建File的测试套件后才能创建测试用例。
2.1.3 创建测试用例
右键TestSuite,点击New Test Case
创建完成后项目布局如下:
优点:图形化界面,易操作
2.2 Ride各面板说明
2.2.1 项目Edit区
Edit->Settings部分:
Documentation:文档,每一项都有。可以给当前的对象写一些文档说明。
Suite Setup:指的是测试套件启动的时候就执行某个关键字。(例:我在Suite Setup设置了Sleep | 5sec,表示等待5秒,要注意关键字的参数要使用|分隔)
Suite Teardown:指的是测试套件结束的时候就执行某个关键字。
Test Setup:指的就是案例启动的时候执行某个关键字。
Test Teardown:指的就是案例结束的时候执行某个关键字。
Force Tags:强制标记,简单讲就是给当前项目及项目下的测试套件及套件下的每个测试案例都加上Tag,只能在设置的地方删除。
Edit其他部分:
(1)加载外部文件
Library:加载库,主要是[PYTHON目录]\Lib\site-packages里的测试库。
特别强调:在导包时一定要和文件夹的名字一致,包括大小写
Resource:加载资源,主要是你工程相关的资源文件。
Variables:加载变量文件,不怎么用,可暂时忽略。
(2)定义内部变量
Add Scalar:定义变量。
Add List:定义列表型变量。
Add Dict:定义词典。
(3)元数据定义
Add Metadata:定义元数据。
2.2.2 测试套件Edit区
Edit->Settings部分:
有时候Settings是隐藏的,点击settings按钮显示。
Documentation:文档,每一项都有。可以给当前的对象写一些文档说明。
Suite Setup:指的是测试套件启动的时候就执行某个关键字。(例:我在Suite Setup设置了Sleep | 5sec,表示等待5秒,要注意关键字的参数要使用|分隔)
Suite Teardown:指的是测试套件结束的时候就执行某个关键字。
Test Setup:指的就是案例启动的时候执行某个关键字。
Test Teardown:指的就是案例结束的时候执行某个关键字。
Test Template:测试模版,这是可以指定某个关键字为这个测试套件下所有TestCase的模版,这样所有的TestCase就只需要设置这个关键字的传入参数即可。
Test Timeout:设置每一个测试案例的超时时间,只要超过这个时间就会失败,并停止案例运行。这是防止某些情况导致案例一直卡住不动,也不停止也不失败。
Force Tags:强制标记,简单讲就是给当前测试套件及套件下的每个测试案例都加上Tag,在测试案例上不能删除,只能在设置的地方删除。
Default Tags:默认标记,给自身打上Tag,而不会给子集打上Tag(区分Force Tags)。
Edit其他部分:
同项目Edit。
2.2.3 测试用例Edit区
(1)Settings部分
Documentation:文档,每一项都有。可以给当前的对象写一些文档说明。
Setup:指的是案例启动的时候执行某个关键字。
Teardown:指的是案例结束的时候执行某个关键字。
Timeout:设置每一个测试案例的超时时间,超时则失败,并停止案例运行。
Template:测试模版,这是可以指定某个关键字为这个测试套件下所有TestCase的模版,这样所有的TestCase就只需要设置这个关键字的传入参数即可。
Tags:标记某个测试用例。在Run区中Only Run Tests with these Tags和Skip Tests with these Tags,会通过这个标志来识别是否运行或跳过用例。
(2)表格部分(最重要的部分,编写测试用例)
第一列一般写的是关键字,关键字的来源包括BuiltIn库,第三方导入库,自己编写的导入库。
使用技巧
- 如果忘了关键字,按F5调出Search Keywords查找
也可以输入关键字的一部分再同时按住ctrl+shift+space或者ctrl+alt+space键,则可以自动带出相关关键字,以及选中关键字的用法。
注:如果使用Ctrl+Shift+space快捷键无反应,有可能是因为和电脑键盘快捷键有冲突,找到键盘的设置,取消Ctrl+空格热键再去尝试。
+鼠标悬浮(即鼠标在某个关键字上),可以直接显示该关键字的相关用法。
也可以按住ctrl+alt+space键,查看该关键字的用法。
c.第二三四五列,一般是输入参数,红色的表示必填,浅灰表示选填,深灰则无需填写。
d.带*说明该项没保存,记得实时保存文件。
e.其它快捷键
代码注释: ctrl + #
取消注释: ctrl + $
删除整行代码: ctrl + d
撤销操作:ctrl + z
2.2.4 Text Edit区
该部分记录的是Settings和测试用例文本信息,RIDE自动生成,不用编写。
例如:
2.2.5 Run区
Execution Profile:选择运行方式,选项有pybot、jybot等,默认robot即可。
Report和Log:告和日志,要运行之后才能点击。他们的区别是报告更多是结果上的展示,日志更多是过程的记录。
Autosave:自动保存,如果不勾选,在修改了案例之后如果没有保存的话,运行案例时会提示是否保存。勾选则在运行时自动保存了。
Pause on failure:关键字执行失败后暂停。
Show message log:展示log信息。
Start:运行案例。若该测试套件下的测试用例前无勾选,则默认执行该测试套件下所有的用例。若测试用例勾选,则执行该测试陶见下勾选的用例。
Stop:停止案例。
Only Run Tests with these Tags:只运行这些标记的测试案例。在Test Case的settings里可以添加tag。
Skip Tests with these Tags:跳过这些标记的测试案例。
2.3 案例层和流程层分离
举一个例子:使用Selenium2Library库,调用Edge浏览器打开百度搜索页面搜索“RobotFramework使用方法”,等待5s后再搜索“RobotFramework-ride使用方法”后关闭页面。步骤如下:
为了减少冗余,可以把整个流程剥离出来成一个关键字,然后在不同的Test case中调用这个关键字,传递不同的参数,以进行不同数据在同一流程下测试。
优点:表格化⽤例,降低编写接⼝和⽤例的难度。关键字驱动,重⽤性好,利⽤现有关键字组装新关键字,简化⾃动化测试过程。
2.3.1 创建资源
如果存在可以不需要创建。右键项目FirstTest,点击New Resource
我这里新建的资源叫
2.3.2 创建User Keyword
先选中Testcase1中所有的脚本,右键选择Extract Keyword,取名为“百度搜索”。
此时左边区域会出现“百度搜索”的User Keyword,该User Keyword在测试套件下,一般测试套件不放置User Keyword,建议User Keyword放置在Resource下。
将“百度搜索”User Keyword移至下
导入Library“Selenium2Library”
2.3.3 User Keyword参数设置
由于搜索数据可变,将其作为参数输入,变量用${}表示,在Settings的Arguments设置,若是有多个参数,那么用”|”分隔,如${参数1}|${参数2}
2.3.4 导入Resource
在测试套件中导入Resource,才能使用该Resource下的User Keyword。
此时TestCase1需要你输入“百度搜索”的两个参数
优点:有⾼度可扩展性,由通⽤的测试库和⼯具组成,也可以⾃定义资源库,根据项目的需要自定义一些关键字。可以“汉化”,对非脚本开发者更友好,也方便没有代码基础的功能测试人员进行测试。
2.4 循环测试用例
关键字:Repeat Keyword
在只有自动化的时候,往往不是只执行一次就可以重现问题,可能我们需要重复执行一个用例好几遍。Repeat关键字可以重复执行一个关键字,通过设置执行的次数。如果我们需要重复执行某一个用例的时候就可以把这个用例的内容都封装成一个关键字再通过repeat执行就很好的解决了问题。
优点:适用于轮次很多的验收测试。
3、命令行运行RF脚本
本测试项目结构如下:
建议所有可执行的suite以.robot作为后缀结尾,所有配置、关键字资源等以.txt作为后缀结尾,便于区分和后续操作。
3.1 运行项目
语令:robot <项目路径>
会遍历项目下的所有suite
例:robot FirstTest
3.2 运行套件
语令:robot [<suite相对路径或绝对路径>]…
执行该suite中的所有test case
例1:robot FirstTest\
例2:robot FirstTest\ FirstTest\
如果觉得测试标题名称太啰嗦、不美观,可以通过-N或–name参数指定名称
例3:robot -N 测试 FirstTest\ FirstTest\
3.3 运行用例
3.3.1 指定某个suite下某个用例执行
语令:robot -t/–test 用例名 <suite相对路径或绝对路径>
执行suite中的某个用例
例:robot -t TestCase1 FirstTest\
3.3.2 指定某个suite下多个用例执行
语令:robot [-t/–test 用例名]… <suite相对路径或绝对路径>
执行suite中的多个用例
例1:robot -t TestCase1 -t TestCase2 FirstTest\
例2:robot -t TestCase* FirstTest\
命令还可以与通配符结合使用,此例运行了TestSuite中的TestCase1和TestCase2
语令:robot [-s/–suite <suite名>] [-t/–test 用例名]… 项目名
注:<suite名>不加.robot后缀名,最后要带上项目名,否则会报错
例3:robot -s TestSuite -t TestCase1 -t TestCase2 FirstTest
3.3.3 指定多个不同suite下多个用例执行
语令:robot [-s/–suite <suite名> [-t/–test 用例名]…]… 项目名
例1:robot -s TestSuite -t TestCase1 -t TestCase2 -s TestSuite2 -t TestCase21 FirstTest
例2:robot -t *1 FirstTest\*.robot
命令还可以与通配符结合使用,此例运行了TestSuite中的TestCase1和TestSuite2中的TestCase21
3.3.4 运行指定/除指定Tag的用例
用RIDE给测试用例指定Tag:
TestCase1:测试1 TestCase2:测试2 TestCase21:测试3 TestCase22:测试4
(1)运行指定Tag的用例:
语令:robot [-i/–include Tag名] <suite相对路径或绝对路径>/<项目名>
例:robot -i 测试1 FirstTest\
(2)运行除指定Tag的用例:
语令:robot [-e/–exclude Tag名] <suite相对路径或绝对路径>/<项目名>
例1:robot -e 测试1 FirstTest
指定多个不同suite下排除某些Tag用例
例2:robot -s TestSuite -e 测试1 -e 测试2 -s TestSuite2 -e 测试3 FirstTest
3.4 通过执行文件执行命令
如果命令太长,可以将命令放到一个txt文件中,通过命令robot -A 文件名执行。
注意:参数之间要换行!!!不可放在同一行
内容 :
–name 命令文件测试
-s TestSuite
-t TestCase1
-t TestCase2
-s TestSuite2
-t TestCase22
FirstTest
3.5 结果报告
结果报告包含、、,默认生成到当前目录。
记录的测试结果是XML文件,根据特定的需要可以编写脚本读取XML文件并生成特定的测试报告。如下图:
会记录RobotFramework运行的每一步操作,主要用于编写测试脚本的过程中查看。如下图:
为测试报告,整理性的展示测试用例的运行情况。如下图:
3.5.1 更改结果报告输出目录
语令:robot -d/–outputdir <指定目录>
例:robot -d FirstTest\Report -i 测试1 FirstTest\
3.5.2 指定文件输出名
(1)可以对其分别修改,参数如下:
-o/–output <指定名称>
-l/–log <指定名称>
-r/–report <指定名称>
例:robot -d FirstTest\Report -r -i 测试1 FirstTest\
(2)不想要某个报告可以设置None
例:robot -l NONE -i 测试1 FirstTest\
优点:自动生成html格式的测试报告和日志。
4、pabot并行测试
Pabot:Robot Framework 测试用例并行执行器
4.1 安装
语令:pip install -U robotframework-pabot
4.2 Robot VS Pabot
Robot:“串行”测试
过程:项目->suite1-> suite1.用例1-> suite1.用例2…->suite2-> suite2.用例1->…
Pabot:“并行”测试,默认suite级别
(1)参数:–processes [进程数]
要使用多少个并行执行程序(默认最大值为2和cpu数),suite级别并行
例1:pabot --processes 2 FirstTest
(2)参数:–testlevelsplit
测试用例级别并行
例2:pabot --testlevelsplit FirstTest
优点:支持并行测试,节省时间成本。
二、进阶篇——RobotFramework应用
1、主要应用场景
应用场景更适合:
(1) web自动化测试:SeleniumLibrary,Selenium2Library,Selenium2Library for java…
(2)接口自动化测试:RequestsLibrary…
(3)APP自动化测试:AppiumLibrary…
2、总结优劣势(与pytest框架相比)
写在最后:
码文不易,求个关注~