RobotFramework功能自动化测试框架基础篇_robotframework gui测试-程序员宅基地

技术标签: 自动化测试  运维  自动化  测试工具  

目录

概念

特性

RF环境安装

RF的使用

1、新建项目

2、创建测试套件

3、创建测试用例

4、创建资源文件

5、页面操作介绍

RF的常用类库

1、标准库:

2、扩展库:

准备UI自动化测试的环境

浏览器操作的关键字

元素定位

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

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

如何处理frame框架?

下拉框列表的定位方式:

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

处理警告框

项目的三层架构

Jenkins的基本操作


概念

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 安装时会弹出如下的对话框,是否创建桌面快捷方式?,点击“是”。

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打开,打开之后如下图所示。

安装过程中遇到的问题 遇到闪退或者启动报错如下所示:

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

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

RF的使用

1、新建项目

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

2、创建测试套件

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

3、创建测试用例

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

4、创建资源文件

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

5、页面操作介绍

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

1、Settings设置

2、Import:导入外部文件 Library:导入外部类库,如果是黑色表示成功,红色表示失败。 Resource:导入资源文件,比如可以导入业务关键字。 3、定义内部变量 添加变量、添加list集合,添加一个字典,这一块相对用的不多,较常用的还是导入外部文件的Library和Resource功能。 4、元数据 【2】测试用例页面

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+空格 当我们遇到不熟悉的关键字时,可以在如下所示的页面中查找其使用方法。

小试牛刀

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										

以上代码的运行结果:

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;

浏览器操作的关键字

  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定位的几种简单方式

除了以上的定位方式,还有两个比较强大的定位方式:xpath与css 我们现在要定位如下的文本框:

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

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

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

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

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标签。

如何处理frame框架?

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

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

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

下拉框列表的定位方式:

下面以Select From List By Value为例:

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

处理警告框

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

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

项目的三层架构

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

(1)页面元素层 (2)业务逻辑层 (3)测试用例层 业务逻辑层调用页面元素层,测试用例层调用业务逻辑层。

2、为什么要分层,意义在哪里? 实现页面元素,公共方法,公共数据,业务逻辑,测试用例集中式管理。 增加脚本的重复利用率。 增加脚本的可维护性。 RF非GUI方式(命令行)运行与Jenkins集成 命令:pybot -d 测试报告的路径 测试用例的路径

Jenkins的基本操作

1、安装Jenkins的环境

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

2、Jenkins的配置 (1)在插件管理中搜索Robot Framework,进行安装。

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

(3)设置定时执行任务

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

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

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

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_59868866/article/details/124861524

智能推荐

oracle 12c 集群安装后的检查_12c查看crs状态-程序员宅基地

文章浏览阅读1.6k次。安装配置gi、安装数据库软件、dbca建库见下:http://blog.csdn.net/kadwf123/article/details/784299611、检查集群节点及状态:[root@rac2 ~]# olsnodes -srac1 Activerac2 Activerac3 Activerac4 Active[root@rac2 ~]_12c查看crs状态

解决jupyter notebook无法找到虚拟环境的问题_jupyter没有pytorch环境-程序员宅基地

文章浏览阅读1.3w次,点赞45次,收藏99次。我个人用的是anaconda3的一个python集成环境,自带jupyter notebook,但在我打开jupyter notebook界面后,却找不到对应的虚拟环境,原来是jupyter notebook只是通用于下载anaconda时自带的环境,其他环境要想使用必须手动下载一些库:1.首先进入到自己创建的虚拟环境(pytorch是虚拟环境的名字)activate pytorch2.在该环境下下载这个库conda install ipykernelconda install nb__jupyter没有pytorch环境

国内安装scoop的保姆教程_scoop-cn-程序员宅基地

文章浏览阅读5.2k次,点赞19次,收藏28次。选择scoop纯属意外,也是无奈,因为电脑用户被锁了管理员权限,所有exe安装程序都无法安装,只可以用绿色软件,最后被我发现scoop,省去了到处下载XXX绿色版的烦恼,当然scoop里需要管理员权限的软件也跟我无缘了(譬如everything)。推荐添加dorado这个bucket镜像,里面很多中文软件,但是部分国外的软件下载地址在github,可能无法下载。以上两个是官方bucket的国内镜像,所有软件建议优先从这里下载。上面可以看到很多bucket以及软件数。如果官网登陆不了可以试一下以下方式。_scoop-cn

Element ui colorpicker在Vue中的使用_vue el-color-picker-程序员宅基地

文章浏览阅读4.5k次,点赞2次,收藏3次。首先要有一个color-picker组件 <el-color-picker v-model="headcolor"></el-color-picker>在data里面data() { return {headcolor: ’ #278add ’ //这里可以选择一个默认的颜色} }然后在你想要改变颜色的地方用v-bind绑定就好了,例如:这里的:sty..._vue el-color-picker

迅为iTOP-4412精英版之烧写内核移植后的镜像_exynos 4412 刷机-程序员宅基地

文章浏览阅读640次。基于芯片日益增长的问题,所以内核开发者们引入了新的方法,就是在内核中只保留函数,而数据则不包含,由用户(应用程序员)自己把数据按照规定的格式编写,并放在约定的地方,为了不占用过多的内存,还要求数据以根精简的方式编写。boot启动时,传参给内核,告诉内核设备树文件和kernel的位置,内核启动时根据地址去找到设备树文件,再利用专用的编译器去反编译dtb文件,将dtb还原成数据结构,以供驱动的函数去调用。firmware是三星的一个固件的设备信息,因为找不到固件,所以内核启动不成功。_exynos 4412 刷机

Linux系统配置jdk_linux配置jdk-程序员宅基地

文章浏览阅读2w次,点赞24次,收藏42次。Linux系统配置jdkLinux学习教程,Linux入门教程(超详细)_linux配置jdk

随便推点

matlab(4):特殊符号的输入_matlab微米怎么输入-程序员宅基地

文章浏览阅读3.3k次,点赞5次,收藏19次。xlabel('\delta');ylabel('AUC');具体符号的对照表参照下图:_matlab微米怎么输入

C语言程序设计-文件(打开与关闭、顺序、二进制读写)-程序员宅基地

文章浏览阅读119次。顺序读写指的是按照文件中数据的顺序进行读取或写入。对于文本文件,可以使用fgets、fputs、fscanf、fprintf等函数进行顺序读写。在C语言中,对文件的操作通常涉及文件的打开、读写以及关闭。文件的打开使用fopen函数,而关闭则使用fclose函数。在C语言中,可以使用fread和fwrite函数进行二进制读写。‍ Biaoge 于2024-03-09 23:51发布 阅读量:7 ️文章类型:【 C语言程序设计 】在C语言中,用于打开文件的函数是____,用于关闭文件的函数是____。

Touchdesigner自学笔记之三_touchdesigner怎么让一个模型跟着鼠标移动-程序员宅基地

文章浏览阅读3.4k次,点赞2次,收藏13次。跟随鼠标移动的粒子以grid(SOP)为partical(SOP)的资源模板,调整后连接【Geo组合+point spirit(MAT)】,在连接【feedback组合】适当调整。影响粒子动态的节点【metaball(SOP)+force(SOP)】添加mouse in(CHOP)鼠标位置到metaball的坐标,实现鼠标影响。..._touchdesigner怎么让一个模型跟着鼠标移动

【附源码】基于java的校园停车场管理系统的设计与实现61m0e9计算机毕设SSM_基于java技术的停车场管理系统实现与设计-程序员宅基地

文章浏览阅读178次。项目运行环境配置:Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。项目技术:Springboot + mybatis + Maven +mysql5.7或8.0+html+css+js等等组成,B/S模式 + Maven管理等等。环境需要1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。_基于java技术的停车场管理系统实现与设计

Android系统播放器MediaPlayer源码分析_android多媒体播放源码分析 时序图-程序员宅基地

文章浏览阅读3.5k次。前言对于MediaPlayer播放器的源码分析内容相对来说比较多,会从Java-&amp;amp;gt;Jni-&amp;amp;gt;C/C++慢慢分析,后面会慢慢更新。另外,博客只作为自己学习记录的一种方式,对于其他的不过多的评论。MediaPlayerDemopublic class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal..._android多媒体播放源码分析 时序图

java 数据结构与算法 ——快速排序法-程序员宅基地

文章浏览阅读2.4k次,点赞41次,收藏13次。java 数据结构与算法 ——快速排序法_快速排序法