目录

概念

特性

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的基础功能就先介绍到这里,后续再为大家补充。

RobotFramework功能自动化测试框架基础篇相关推荐

  1. pytest自动化测试框架基础篇

    一.单元测试框架 1.什么是单元测试框架 单元测试框架是在自动化测试或者白盒测试中对软件的最小单元(函数,方法)进行测试的框架. 2.单元测试框架分类 python:unittest.pytest 3 ...

  2. java自动化测试框架基础eclipse+maven配置

    java自动化测试框架基础eclipse+maven配置 文章目录 java自动化测试框架基础eclipse+maven配置 一.maven安装配置 二.eclipse中使用maven 一.maven ...

  3. 使用TestStack.White进行Windows UI的自动化测试 (1) 基础篇

    参考  https://www.dazhuanlan.com/2019/09/04/8c18f8874287/ 本文章将简单介绍TestStack.White这个Windows UI自动化测试的套件, ...

  4. Selenium自动化测试框架基础学习(元素表单操作)(Selenium操作)

    目录 一.Selenium自动化测试框架 1.1什么是框架? 1.2为什么使用框架? 1.3Selenium-webdriver工作原理 1.4selenium环境搭建(详情查阅讲义) 1.5什么是S ...

  5. python自动化从零开始_从零开始的自动化测试框架——Python篇

    随着软件测试领域对于技术要求越来越清晰,到现在测试人员在市场上的岗位需求也变得越来越复杂.极大部分的企业都开始对自动化测试岗位有了更多的需要.自然而然,自动化测试技术开始成为了下一个被玩烂的技术点.网 ...

  6. python自动化框架2019_《一头扎进》系列之Python+Selenium自动化测试框架实战篇6 - 价值好几K的框架,呦!这个框架还真牛叉哦!!!...

    1. 简介 本文开始介绍如何通过unittest来管理和执行测试用例,这一篇主要是介绍unittest下addTest()方法来加载测试用例到测试套件中去.用addTest()方法来加载我们测试用例到 ...

  7. 基于Python接口自动化测试框架(初级篇)附源码

    目录 1.引言 1.框架设计思路 2.框架设计思路 3.运行程序 4.源码获取 引言 很多人都知道,目前市场上很多自动化测试工具,比如:Jmeter,Postman,TestLink等,还有一些自动化 ...

  8. Bootstrap框架(基础篇)之列表,表格,表单

    继续上篇的基础部分延伸,主要说一下列表,表格,表单相关Bootstrap框架变化以及基础知识. 1.列表篇 除了HTML提供的三种基本列表样式: 无序列表 <ul><li>-& ...

  9. 【python+pytest】接口自动化测试—接口基础篇

    目录 前言 接口定义 接口分类 常见接口 测试分层 测试左移和右移 写在最后,给与的建议: 前言 就当前软件测试招聘的市场需求以及趋势而言,接口测试是测试人员必须掌握的技能,而接口自动化测试则是加薪利 ...

最新文章

  1. 09JavaScript中的作用域
  2. 「功能笔记」Spacemacs+Evil备忘录
  3. 位图排序(计数排序)
  4. Go语言实现FastDFS分布式存储系统WebAPI网关
  5. 大恶人吉日嘎拉之走火入魔闭门造车之.NET疯狂架构经验分享系列之(十二)多语言支持...
  6. WindowsAPI-------获取系统的相关信息
  7. 如何选择适合的数据分析软件
  8. 如何快速提取pdf中矢量图
  9. 体重 年龄 性别 身高 预测鞋码_根据一个人的身高和体重能知道他的鞋码吗?
  10. Android面试英文介绍
  11. Tomcat+Nginx动静分离
  12. 原生javascript实现拖拽改变table表格行高(html)
  13. day4 css复合选择器元素背景
  14. 欧文分校的计算机科学博士,2020年加州大学欧文分校博士含金量
  15. 生鲜配送企业要如何突破局限性?存在哪些弊端?
  16. 2011年中国城市高校数量排行榜(前十名)
  17. oracle home 命令,oracle基本命令集锦
  18. u-view2.x picker多列联动遇到的bug
  19. python人脸识别解锁电脑_OpenCV+face++实现实时人脸识别解锁功能
  20. 实时频谱-2.1实时频谱分析仪的工作方式

热门文章

  1. 程序设计-模拟图书馆管理系统
  2. AMEsim 3D动画制作流程
  3. 【学习方法】如何快速地进行阅读?如何在阅读的时候快速理解其中的内容?
  4. mysql临时表 is full_mysql出现“the table xxx is full”的问题
  5. 电脑数据丢失如何恢复
  6. 前端第八次培训(JS表单)
  7. Android DanmakuFlameMaster的踩坑方式
  8. PyCharm里面的c、m、F、f、v、p分别代表什么含义?
  9. 大白话5分钟带你走进人工智能-第十八节逻辑回归之交叉熵损失函数梯度求解过程(3)
  10. TP、TN、FP、FN超级详细解析