RobotFramework功能自动化测试框架基础篇

概念

RobotFramework是什么?

Robot Framework是一款python编写的功能自动化测试框架。具备良好的可扩展性,支持关键字驱动,可以同时测试多种类型的客户端或者接口,可以进行分布式测试执行。主要用于轮次很多的验收测试和验收测试驱动开发(ATDD)。

特性

1.测试用例使用文本文件(TXT或者TSV文件)保存,使用制表符分隔数据。可以方便的使用任何文本编辑器,或者EXCEL编辑测试用例。也可以使用HTML格式创建用例。

2.测试用例中支持变量使用,可以使用IF语句和FOR循环语句。

3.可以利用“标签”功能对测试用例进行分类和有选择执行。

4.支持关键字驱动、数据驱动和行为驱动。

5.利用已有的关键字,测试人员可以创建自己需要的关键字,形成更高级别的行为。

6.测试执行报告和日志是HTML格式,容易阅读。

7.Robot Framework并不是一款像QTP一样的自动化测试工具。它是一个自动化测试框架,或者说是一个自动化测试平台。

8.提供了测试执行事件的监听接口,并且可以自定义接口中的脚本。例如,某个用例执行前,“start_test”接口中的脚本就会被执行;用例执行结束后,“end_test”接口中的脚本就会被执行。而测试人员可以自定义“start_test”、“end_test”这两个接口的脚本。

9.提供了命令行接口和XML格式的输出。可以与版本管理工具结合,进行持续集成。

10.Robot Framework是通过测试库识别被测对象、操纵被测对象,有很多自带的或者第三方的开源测试库。例如,使用“selenium2Library”库测试web客户端。此外还可以测试java客户端、Win32客户端、SSH协议的字符终端等。

11.测试人员可以使用Python和java创建自己需要的测试库。

12.提供了远程测试执行接口,可以进行分布式测试执行。

以上内容来源百度百科

RF环境安装

环境的安装需要版本匹配,我现在电脑上配置的版本亲测有效。

1、安装python3.7.6环境并配置环境变量;

2、使用管理员身份打开dos窗口:

安装robotframework:pip install robotframework==4.1

卸载为pip uninstall robotframework

3、在dos窗口中安装RIDE工具,RIDE是robotframework的开发工具:

安装RIDE:pip install robotframework-ride==1.7.4.1

卸载:pip uninstall robotframework-ride

安装时会弹出如下的对话框,是否创建桌面快捷方式?,点击“是”。

image.png

4、安装wxPython

Wxpython 是python 非常有名的一个GUI库,因为RIDE 是基于这个库开发的,所以这个必须安装。

pip install wxPython==4.0.4

5、Selenium2Library安装

RF-seleniumlibrary 可以看做RF版的selenium 库,selenium (webdriver)可以认为是一套基于web的规范(API),所以,RF 、appium 等测试工具都可以基于这套API进行页面的定位与操作。

pip install robotframework-selenium2library

6、双击图标打开,或者在dos窗口输入ride.py打开,打开之后如下图所示。

image.png

安装过程中遇到的问题

遇到闪退或者启动报错如下所示:

image.png

将..python37\Lib\site-packages\robotide\application的目录下application.py文件中的self._initial_locale = wx.Locale(wx.LANGUAGE_ARABIC)改成self._initial_locale = wx.Locale(wx.LANGUAGE_ENGLISH)

image.png

如遇其他问题,请求助热心网友们,大部分问题都可以解决。

RF的使用

1、新建项目

点击【File】→【New Project】,在弹出框中填写项目名称、路径、类型(文件或者文件夹),这里新建一个文件夹。

image.png

image.png

2、创建测试套件

在文件夹上点击右键,选择【New Suite】,在弹出框中填写测试套件的名称,类型选择File。

image.png

image.png

3、创建测试用例

在测试套件上点击右键,选择【New Test Case】,在弹出框中填写测试用例的名称。

image.png

image.png

4、创建资源文件

在文件夹上点击右键,选择【New Resource】,在弹出框中填写名称,并选择格式为TXT。一般为保存业务关键字资源,是自定义关键字的载体,在资源文件下可以创建用户自定义关键字。

image.png

image.png

image.png

5、页面操作介绍

【1】 测试套件的Edit页签页面,如下图所示

image.png

1、Settings设置

image.png

2、Import:导入外部文件

Library:导入外部类库,如果是黑色表示成功,红色表示失败。

Resource:导入资源文件,比如可以导入业务关键字。

3、定义内部变量

添加变量、添加list集合,添加一个字典,这一块相对用的不多,较常用的还是导入外部文件的Library和Resource功能。

4、元数据

【2】测试用例页面

image.png

image.png

RF的常用类库

1、标准库:不需要安装,直接用,RF自带。

Buitini(测试库)

Collections(集合库)

DateTime(时间库)

ScreenShot(截屏库)

标准库的位置:D:\software\python37\Lib\site-packages\robot\libraries

2、扩展库:需要通过pip安装库

Web自动化测试:SeleniumLibrary,Selenium2Library,Selenium2Library for java等。

API接口自动化:RequestsLibrary

APP自动化测试:AppiumLibrary

安装方式:

pip install robotframework-seleniumlibrary

pip install robotframework-requests

pip install robotframework-appiumlibrary

扩展库的位置:D:\software\python37\Lib\site-packages\

注意:在导包时一定要和文件夹的名字一致,包括大小写。

RF的常用关键字的使用

快捷键:

1、搜索关键字:F5

2、自动补全关键字:ctrl+shift+空格

当我们遇到不熟悉的关键字时,可以在如下所示的页面中查找其使用方法。

image.png

小试牛刀

image.png

image.png

Comment	1.打印									
Log	这是一条打印语句									
Comment	2.设置变量									
${a}	Set Variable	100								
Log	${a}									
Comment	3.获取系统时间									
${times}	Get Time									
Log	${times}									
Comment	4.睡眠时间,强制等待									
sleep	3									
Comment	5.字符串的拼接									
${str}	Catenate	oracle	mysql	sqlserver						
Log	${str}									
Comment	6.创建列表									
${list1}	Create List	功能测试	自动化测试	性能测试						
Log	${list1}									
@{list2}	Create List	功能测试	自动化测试	性能测试						
Log Many	@{list2}									
Comment	7.创建字典									
${dic}	Create Dictionary	name=张三	age=18							
Log	${dic}									
Comment	7.1 获得字典的键									
${keys}	Get Dictionary Keys	${dic}								
Log	${keys}									
Comment	7.2 获得字典的值									
${values}	Get Dictionary Values	${dic}								
Log	${values}									
Comment	7.3 通过键取值									
${key_value}	Get From Dictionary	${dic}	name							
Log	${key_value}									
Comment	8.执行python里面的方法									
${random_number}	Evaluate	random.randint(1,101)	modules=random							
Log	${random_number}									
${times}	Evaluate	time.time()	modules=time							
Log	${times}									
Comment	9.执行python自定义的方法									
Import Library	E:/pythonProject/test.py									
${a}	Evaluate	int(10)								
${b}	Evaluate	int(20)								
${return_result}	sum	${a}	${b}							
Log	${return_result}									
Comment	10. 流程控制IF									
${age}	Set Variable	22								
Run Keyword If	${age}>30	Log	年龄太大,不合适	ELSE IF	18<=${age}<=30	Log	年龄正合适	ELSE	Log	未成年
Comment	11. 流程控制FOR									
FOR	${a}	IN	oracle	mysql	sqlserver					Log	${a}								
END										
Comment	流程控制FOR的另一种形态									
@{list3}	Create List	oracle	mysql	sqlserver						
FOR	${a}	IN	@{list3}							Log	${a}								
END										
Comment	流程控制FOR循环范围内的数据									
FOR	${a}	IN RANGE	1	11						Run Keyword If	${a}==5	Exit For Loop							Log	${a}								
END										

以上代码的运行结果:

image.png

Starting test: TestDemo.RF测试1.TestSuit1.TestCase1
20210831 08:28:34.827 :  INFO : 这是一条打印语句
20210831 08:28:34.828 :  INFO : ${a} = 100
20210831 08:28:34.828 :  INFO : 100
20210831 08:28:34.829 :  INFO : ${times} = 2021-08-31 08:28:34
20210831 08:28:34.830 :  INFO : 2021-08-31 08:28:34
20210831 08:28:37.837 :  INFO : Slept 3 seconds
20210831 08:28:37.839 :  INFO : ${str} = oracle mysql sqlserver
20210831 08:28:37.839 :  INFO : oracle mysql sqlserver
20210831 08:28:37.840 :  INFO : ${list1} = ['功能测试', '自动化测试', '性能测试']
20210831 08:28:37.840 :  INFO : ['功能测试', '自动化测试', '性能测试']
20210831 08:28:37.841 :  INFO : @{list2} = [ 功能测试 | 自动化测试 | 性能测试 ]
20210831 08:28:37.841 :  INFO : 功能测试
20210831 08:28:37.841 :  INFO : 自动化测试
20210831 08:28:37.841 :  INFO : 性能测试
20210831 08:28:37.842 :  INFO : ${dic} = {'name': '张三', 'age': '18'}
20210831 08:28:37.843 :  INFO : {'name': '张三', 'age': '18'}
20210831 08:28:37.844 :  INFO : ${keys} = ['age', 'name']
20210831 08:28:37.844 :  INFO : ['age', 'name']
20210831 08:28:37.845 :  INFO : ${values} = ['18', '张三']
20210831 08:28:37.846 :  INFO : ['18', '张三']
20210831 08:28:37.847 :  INFO : ${key_value} = 张三
20210831 08:28:37.847 :  INFO : 张三
20210831 08:28:37.848 :  INFO : ${random_number} = 101
20210831 08:28:37.848 :  INFO : 101
20210831 08:28:37.849 :  INFO : ${times} = 1630369717.848543
20210831 08:28:37.849 :  INFO : 1630369717.848543
20210831 08:28:37.859 :  INFO : ${a} = 10
20210831 08:28:37.860 :  INFO : ${b} = 20
20210831 08:28:37.860 :  INFO : ${return_result} = 30
20210831 08:28:37.861 :  INFO : 30
20210831 08:28:37.861 :  INFO : ${age} = 22
20210831 08:28:37.862 :  INFO : 年龄正合适
20210831 08:28:37.863 :  INFO : oracle
20210831 08:28:37.864 :  INFO : mysql
20210831 08:28:37.865 :  INFO : sqlserver
20210831 08:28:37.866 :  INFO : @{list3} = [ oracle | mysql | sqlserver ]
20210831 08:28:37.867 :  INFO : oracle
20210831 08:28:37.868 :  INFO : mysql
20210831 08:28:37.869 :  INFO : sqlserver
20210831 08:28:37.871 :  INFO : 1
20210831 08:28:37.872 :  INFO : 2
20210831 08:28:37.873 :  INFO : 3
20210831 08:28:37.875 :  INFO : 4
20210831 08:28:37.876 :  INFO : Exiting for loop altogether.
Ending test:   TestDemo.RF测试1.TestSuit1.TestCase1

准备UI自动化测试的环境

1、通过 pip安装扩展库:pip install robotframework-seleniumlibrary;

2、下载谷歌浏览器;

3、下载谷歌浏览器的驱动(注意:谷歌浏览器的驱动必须和谷歌浏览器兼容),然后将chromedriver.exe放到python目录下;

4、在RF的测试套件里面导入SeleniumLibrary;

浏览器操作的关键字

image.png

image.png

Comment	打开浏览器		
Open Browser	https://www.baidu.com	chrome	
Comment	隐式等待		
Set Browser Implicit Wait	5		
sleep	2		
Comment	浏览器放大		
Maximize Browser Window			
sleep	2		
Comment	设置浏览器的尺寸		
Set Window Size	1024	768	
sleep	2		
${width}	${height}	Get Window Size	
sleep	2		
Comment	返回上一步		
Go Back			
sleep	2		
Comment	直接跳转页面		
Go To	https://www.baidu.com		
Comment	刷新页面		
Reload Page			
sleep	2		
Comment	获取title		
${title}	Get Title		
Log	${title}		
sleep	2		
Comment	获取路径		
${loc}	Get Location		
Log	${loc}		
sleep	2		
Comment	关闭浏览器		
Close Browser			

元素定位

元素定位的八种方式:id,name,link_text,partial_link_text,xpath,css,class_name,tag_name

前提:元素必须唯一

以下是通过id、name、link定位的几种简单方式

image.png

除了以上的定位方式,还有两个比较强大的定位方式:xpath与css

我们现在要定位如下的文本框:

image.png

xpath:(以下定位的元素都为百度首页的部分元素)

1.通过绝对路径定位,这种方式几乎不用。

2.通过相对路径定位://form/span/input

image.png

3.通过元素属性定位://input[@autocomplete="off"]或者//input[@autocomplete="off" and @class="s_ipt"]

image.png

4.通过部分属性定位://input[starts-with(@autocomplete,"of")]或者//input[contains(@autocomplete,"of")]

5.通过文本定位//a[text()="新闻"]

css:(以下定位的元素都为百度首页的部分元素)

1.通过绝对路径定位,这种方式几乎不用。

2.通过ID或者Class定位:#ID或者.class

3.通过元素属性定位:

一个属性定位 :input[autocomplete="off"]

两个属性同时定位:input[autocomplete="off"][class="s_ipt"]

4.通过部分属性定位:

以什么开头:input[autocomplete^="of")]

以什么结尾:input[autocomplete$="ff")]

包含:input[autocomplete*="of")]

5.通过子元素定位div#s-top-left a:nth-child(3),id为s-top-left下的第三个a标签。

image.png

如何处理frame框架?

我们在实际项目中,会发现很多情况下都存在frame框架,而处在frame框架中的元素,不能直接定位,需要先跳进当前的frame中,再进行定位。

image.png

跳进上图中的frame框架中:Select Frame menu-frame

image.png

如果要定位不是该frame中的元素,则需要先跳出当前frame,再进行操作:Unselect Frame,如下图所示:

image.png

下拉框列表的定位方式:

image.png

下面以Select From List By Value为例:

image.png

定位一组相同元素中的其中一个:

image.png

image.png

处理警告框

弹框一般有三种:alert,confirm,prompt

image.png

处理上图中的alert弹框,关键词为Handle Alert,如果点击确定操作,不用传任何参数,如果点击取消按钮,则传值为:DISMISS.

项目的三层架构

1、三层架构指的是什么?

(1)页面元素层

(2)业务逻辑层

(3)测试用例层

业务逻辑层调用页面元素层,测试用例层调用业务逻辑层。

2、为什么要分层,意义在哪里?

实现页面元素,公共方法,公共数据,业务逻辑,测试用例集中式管理。

增加脚本的重复利用率。

增加脚本的可维护性。

RF非GUI方式(命令行)运行与Jenkins集成

命令:pybot -d 测试报告的路径 测试用例的路径

Jenkins的基本操作

1、安装Jenkins的环境

(1)安装jdk环境;

(2)进入Jenkins官网,下载安装文件,双击进行安装,按照步骤进行即可;

image.png

2、Jenkins的配置

(1)在插件管理中搜索Robot Framework,进行安装。

image.png

(2)创建一个自由风格的项目

image.png

(3)设置定时执行任务

image.png

(4)创建一个Windows批处理命令

image.png

(5)添加Execute Groovy script System.setProperty("hudson.model.DirectoryBrowserSupport.CSP","")

image.png

(6)增加构建后操作步骤

image.png

image.png

后记

关于RobotFramework的基础功能就先介绍到这里,后续再为大家补充。

 行动吧,在路上总比一直观望的要好,未来的你肯定会感 谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入扣群: 320231853,里面有各种软件测试+开发资料和技术可以一起交流学习哦。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/815422.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网页的基本结构

VScode中HTML的自动补全&#xff1a; 自动补全&#xff1a;例如标签 <h1></h1> 1.输入<h1>后其会自动给其补全 2. 进输入h1 tab键 网页的基本结构&#xff1a; 网页的基本结构只需要在VScode当中输入&#xff1a;&#xff01; tab键即可 <!DOCTYPE html…

ARM v8 Cortex R52内核 08 内存保护单元 Memory Protection Unit

ARM v8 Cortex R52内核 08 内存保护单元 Memory Protection Unit 8.1 About the MPU Cortex R52 处理器具有两个可编程的MPU&#xff0c;由EL1和EL2控制。每个MPU允许将4GB内存地址划分为多个区域。 每个内存区域由基地址、限制地址、访问权限和内存属性定义。 对于数据访问…

阿里对象储存OSS的SDK使用

对象存储OSS 该功能的实现使用了阿里的&#xff1a;对象存储OSS技术。 在阿里对象存储空间的文件可以 以链接 的形式进行访问: 文件访问路径规则 &#xff1a;https://BucketName.Endpoint/ObjectName 该技术的使用方式有很多&#xff0c;针对于SDK的简单实现官网上也有教程…

【网络编程】高性能并发服务器源码剖析

hello &#xff01;大家好呀&#xff01; 欢迎大家来到我的网络编程系列之洪水网络攻击&#xff0c;在这篇文章中&#xff0c;你将会学习到在网络编程中如何搭建一个高性能的并发服务器&#xff0c;并且我会给出源码进行剖析&#xff0c;以及手绘UML图来帮助大家来理解&#xf…

教你将配置好的conda环境迁移到其它设备

文章目录 问题分析存在的方法环境要求方法步骤1. 下载conda pack2. 打包原环境3. 新设备还原环境4. 查看环境 问题分析 好不容易配置好的conda环境&#xff0c;要在另一个设备上运行&#xff0c;还要重新配置&#xff0c;好麻烦。 存在的方法 pip install -r requirement.txt …

Node.js留言板(超详细注释)

目录结构如下 app.js // 一.引入模块 var http require(http);// 用于创建 HTTP 服务器和处理 HTTP 请求 var fs require(fs);// 用于读取和写入文件 var url require(url);// 用于解析URL// 创建留言数据对象 var msgs [{ name: 牛二, content: "我是妞儿", cr…

场景:数据库死锁

来自hollis八股文 流程图 前置知识 数据库上锁锁住的不是行&#xff0c;而是索引的主键 比如我对id 1的主键进行上锁&#xff0c;实际上是对查询使用的主键的key 1 进行上锁 对非聚簇索引操作时&#xff0c;首先会对非聚簇索引上锁&#xff0c;然后在请求主键的锁 比如我…

为什么开关电源变压器的耦合不可能为100%?什么是漏感?

一、为什么开关电源变压器的耦合不可能为100%&#xff1f; 变压器耦合度是指变压器初级绕组和次级绕组之间能量传递的效率&#xff0c;它反映了变压器在电磁感应过程中&#xff0c;初级侧磁通量能够有多少比例被次级侧有效利用。理论上&#xff0c;理想的变压器耦合度应该是10…

08 Php学习:if语句、Switch语句

PHP 条件语句 当您编写代码时&#xff0c;您常常需要为不同的判断执行不同的动作。您可以在代码中使用条件语句来完成此任务。 在 PHP 中&#xff0c;提供了下列条件语句&#xff1a; if 语句 - 在条件成立时执行代码 if…else 语句 - 在条件成立时执行一块代码&#xff0c;…

Java实现短信发送并校验,华为云短信配合Redis实现发送与校验

Java实现短信发送并校验&#xff0c;华为云短信配合Redis实现发送与校验 安装sms4j和redis <dependency><groupId>org.dromara.sms4j</groupId><artifactId>sms4j-spring-boot-starter</artifactId><version>3.2.1</version> <…

WPS基础使用

个人笔记&#xff08;整理不易&#xff0c;有帮助&#xff0c;收藏点赞评论&#xff0c;爱你们&#xff01;&#xff01;&#xff01;你的支持是我写作的动力&#xff09; 笔记目录&#xff1a;学习笔记目录_pytest和unittest、airtest_weixin_42717928的博客-CSDN博客 个人随笔…

单路高清HDMI编码器JR-3211HD

产品简介&#xff1a; JR-3211HD单路高清HDMI编码器是专业的高清音视频编码产品&#xff0c;该产品具有支持1路高清HDMI音视频采集功能&#xff0c; 1路3.5MM独立外接音频输入&#xff0c;编码输出双码流H.264格式&#xff0c;音频MP3/AAC格式。编码码率可调&#xff0c;画面质…

SHARE 203S PRO:倾斜摄影相机在地灾救援中的应用

在地质灾害的紧急关头&#xff0c;救援队伍面临的首要任务是迅速而准确地掌握灾区的地理信息。这时&#xff0c;倾斜摄影相机成为了救援测绘的利器。SHARE 203S PRO&#xff0c;这款由深圳赛尔智控科技有限公司研发的五镜头倾斜摄影相机&#xff0c;以其卓越的性能和功能&#…

QtCreater 使用

QtCreater 创建项目 1.刚进入 QtCreater 的界面是这样的一个界面 ① 创建一个新的文件&#xff0c;那么我们就选择左上角的 “文件” ② 点击新建文件&#xff0c;或者也可以直接使用快捷键 CtrlN 此时就会弹出对话框&#xff0c;让我们选择想要创建的文件&#xff1a; Appli…

python爬虫-----爬虫解析—xpath(第十八天)

&#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; &#x1f388;&#x1f388;所属专栏&#xff1a;python爬虫学习&#x1f388;&#x1f388; ✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天…

Nginx日志格式化和追踪

背景 Nginx是一款功能强大的Web服务器&#xff0c;对于网络环境中的日志记录和配置至关重要。定制化Nginx日志格式可以帮助管理员更好地监控服务器性能、分析用户行为并做出相应优化。在本文中&#xff0c;我们将深入探讨Nginx日志格式的高级定制化策略&#xff0c;包括理解基…

API接口京东开放平台item_get-获得京东商品详情API接口根据商品ID查询商品标题价格描述等详情数据

京东商品详情API接口可以提供以下方面的信息&#xff1a; 商品基础信息&#xff1a;包括商品的标题、价格、描述、图片等基本信息&#xff0c;这是构建电商平台的基础数据。商品分类信息&#xff1a;帮助用户更好地了解商品所属的类别&#xff0c;便于商品筛选和查找。商品销售…

sheng的学习笔记-AI-决策树(Decision Tree)

AI目录&#xff1a;sheng的学习笔记-AI目录-CSDN博客 目录 什么是决策树 划分选择 信息增益 增益率 基尼指数 剪枝处理 预剪枝 后剪枝 连续值处理 另一个例子 基本步骤 排序 计算候选划分点集合 评估分割点 每个分割点都进行评估&#xff0c;找到最大信息增益的…

DB schema表中使用全局变量及在DB组件中查询

DB schema表中使用全局变量及在DB组件中查询 规则如下&#xff1a; 使用如下&#xff1a; 如果在unicloud-db组件上不加判断条件&#xff0c;就会报错&#xff0c;并进入到登录页。 那么就会进入到登录页&#xff0c;加上了判断条件&#xff0c;有数据了就不会了。 因为在sc…

电脑录屏软件哪个好用又免费?市面20款录屏软件测评结果

随着在线教学、远程办公和自媒体创作的兴起&#xff0c;电脑录屏软件逐渐成为了许多用户的必备工具。市面上的录屏软件琳琅满目&#xff0c;但真正既好用又免费的却并不多见。为了帮助大家找到心仪的录屏软件&#xff0c;我们对市面上20款热门免费录屏软件进行了详细的测评。 电…