#yyds干货盘点# RobotFramework从基础到项目实战

卧疾丰暇豫,翰墨时间作。这篇文章主要讲述#yyds干货盘点# RobotFramework从基础到项目实战相关的知识,希望能为你提供帮助。
一、基础必备 1、简介与特点RF是一个基于python语言开发的,可扩展的,以关键字驱动模式,结合Selenium实现的一个开源的自动化测试框架。
RF在2019年的7月之前,支持2.7;RF在2019年7月之后,支持3.7。
目前主流的自动化测试框架,RF、AirTest
数据驱动和关键字驱动

  • 数据驱动:把测试用例的数据单独的提取出来,放到excel里面或者yaml文件里面,通过改变excel或者yaml文件汇总的数据来驱动用例执行。
  • 关键字驱动:把项目中的逻辑封装成一个关键字,调用不同的关键字来实现不同的逻辑,从而驱动用例执行。
特点:
1、编写用例简单,可以以robot.txt,csv,html的格式来保存用例
2、自动生成html格式的自动化测试报告日志。
3、除了自带的类库之后,还有很多扩展库。
4、根据项目的需要,自定义关键字。(自定义关键字其实就是业务逻辑)
5、使用命令行的方式,和jenkins集成。
2、RF环境安装以管理员的身份打开dos窗口
  1. 安装python3.7.3,配置环境变量,下载谷歌的浏览器驱动,放到python目录下
  2. 在dos命令下输入:pip install robotframework==3.1(安装此版本,比较稳定)
  3. 在dos命令下输入:pip install robotframework-ride(相当于开发工具,pycharm)
  4. 在dos命令下输入:pip list
  5. 在dos命令下输入:ride.py或者点击桌面的ride快捷方式
【注意】如果pip命令使用不可,说明python路径下scrip目录没有配置到path下:D:\\Program Files\\Python37\\Scripts
3、RIDE界面的介绍Edit四大块:(setting设置、导入外部文件、定义内部变量、定义元数据)
  • setting:测试套件的准备工作、测试套件的扫尾工作、测试用例的准备工作、测试用例的扫尾工作、强制标记
4、RF类库的介绍1、标准库:BuiltIn(测试库)、Collections(集合库)、DateTime(时间库)、Screenshot(截屏库)
2、扩展库
Web自动化测试:SeleniumLibrary , Selenium2Library ,Selenium2Library for java
App自动化测试:AppiumLibrary
API接口自动化测试:RequestsLibrary
安装:pip install robotframework-seleniumlibrary
标准库的位置:C:\\python373\\Lib\\site-packages\\robot\\libraries
扩展库的位置:C\\python373\\Liblsite-packages
5、基础应用
  1. 新建项目 dictionary
  2. 新建文件 txt
  3. 新建用例
快捷键:
F5——搜索关键字,弹出窗口,搜索关键字,下面会有说明,来源于哪些库,example表示关键字使用的实例
ctrl+shift+空格 ——自动补全关键字,如果是蓝色表示关键字是OK的,关键字后面红色的单元格表示需要输入关键字参数,根据example实例填写
6、关键字的使用
备注 关键字 输入内容
Comment 注释内容
定义变量 ${a} 变量名
Log ${a}
Comment 获取系统时间
${times} get time
Log ${times}
Comment 强制等待
sleep 3
Comment 字符串拼接
${total_str} Catenate SEPARATOR=|| 张三 李四
Log ${total_str}
Comment 创建列表
${list2} create list oracle mysql sqlsever
Log ${list2}
@{list1} create list oracle mysql sqlsever
Log Many @{list1}
Comment 创建字典
${dic} Create Dictionary name 张三 age 18
Log ${dic}
获取字典的键 ${dic_keys} Get Dictionary Keys ${dic}
Log ${dic_keys}
获取字典的值 ${dic_values} Get Dictionary Values ${dic}
Log ${dic_values}
获取字典 ${key_value} Get From Dictionary ${dic}
Log ${key_value}
Comment 调用外部文件
导入外部文件的方式以及使用方法 ${rand_num} Evaluate random.randint(1,10) modules=random
Log ${rand_num}
Comment 流程控制IF语句
${num} Set Variable 100
Run Keyword If 80< =${num}< =100 log 优秀
... Else IF 60< =${num}< 80 log 一般
打印输出单个内容 ... Else log 较差
多个打印输出,需要先自定义关键字,然后Else后输出 ... Else 自定义关键字(可以为中文)
commnet 流程控制FOR语句1
For ${a} IN apple balala lemon
Log ${a}
END
Comment 流程控制FOR语句2
FOR ${a} IN RANGE 1 11
当变量a的值为5时,就退出循环不打印 Run Keyword If ${a}==5 Exit For Loop
log ${a}
END
Comment 流程控制FOR语句3
@{list} create list apple balala orange
FOR ${a} IN @{list}
log ${a}
END
二、项目实战 1、seleniumLibrary安装pip install robotframework-seleniumlibrary
2、浏览器关键字应用
Comment 打开浏览器
Open Browser http://www.baidu.com/
Comment 设置浏览器隐式等待
Set Browser Implicit Wait 5
comment 设置浏览器的强制等待
sleep 3
Comment 设置浏览器最大化
Maximize BrowserWindow
Set Window Size 800 800
Comment 获取浏览器的尺寸 Get Window Size
${Width} ${height}
comment 后退一步
Go back
comment 前进一步
Go To http://www.baidu.com/
comment 刷新
Reload Page
comment 获取网页标题
${title} Get title
comment 获取网页的URL
${location} Get Location
3、元素定位详解8种元素定位方式:id,name,link.partail_link.xpath.css.tag_name.class_name
3.1 xpath定位
  1. 通过绝对路径来定位——基本不用,路径容易改变
  2. 通过相对路径来定位:
    • //from/span/input
    • //from/span[2]/input
  3. 通过属性定位:找到唯一的属性,将双引号改成单引号
    • //input[@autocomplete=off]
  4. 通过部分属性定位
    • //input[start=with(@autocomplete,of" )]
  5. 通过文本定位
    • //a[@text()=新闻]
3.2 CSS定位
  1. 通过ID(#)和class()来定位:
    • css=input#kw
    • css=input.s_ipt
  2. 通过属性定位:input[autocomplete=off]
  3. 通过部分的属性定位:input[autocomplete^=of)]
  4. 通过子元素定位:通过子元素:div#s-top-left
3.3案例详解
备注 关键字 内容
open Browser http://www.baidu.com/
Set Browser Implicit Wait 5
comment 通过ID定位
Input Text id=kw 知乎
Input Text name=wd 知乎
Input Text identifier=kw 知乎
Comment 定位讲解
点击元素,用这种比较靠谱 Click Element link=新闻
部分链接定位 Click Element partial link=新
相对路径定位方式 Input Text Xpath=//from/span/input 知乎
通过属性定位 Input Text Xpath=//input[@autocomplete=off" ]
通过部分属性定位 Click Element Xpath=//input[start=with(@autocomplete,of" )]
通过文本定位 Click Element Xpath=//a[@text()=新闻]
通过CSS定位 Input Text css=input#kw
4、元素操作API
备注 关键字 内容
open Browser http://www.baidu.com/ chrome
Set Browser Implicit Wait 5
在输入框输入需要查找的内容 Input Text id=kw 知乎
提交表达 submit Form id=form
清空输入框 Clear Element id=kw
get text获得元素的文本 ${text} Get Text xpath=//a[http]
输入查找的内容 Input Text id=kw 知乎
get element attribute获得元素属性的值 ${value} Get Element attribute id=kw value
5、frame处理在谷歌console下可看框架
frame:框架
iframe:子框架
备注 关键字 内容
进入框架 Select framename name=框架名
跳出框架; Unselect frame name=框架名
6、下拉框处理
备注 关键字 内容
选择下拉框:先定位再选择,通过下标选中,此处通过值来选中框架 Select From List By Value name=框架名 value的值
通过下标去选中 Select From List By Index name=框架名 index的值,从0开始
通过文本选中 Select From List By Label name=框架名 文本
7、属性JS弹窗处理常见弹窗类型:
alert():只有一个确定的按钮
confirm():有【确定】、【取消】按钮
prompt():多了一个输入框,有【确定】、【取消】按钮
8、定位为一组元素当定位时发现元素额HTML脚本完全一样时,那么就要定位一组元素,例如,每一行都有删除图标
关键字 内容
Comment 新内容
${eleList} Get WebElements xpath=//img[src=https://www.songbingjia.com/android/images/icon trash.gif]
Sleep 1
不输入任何表示默认点击确定按钮 Handle Alert
点击取消按钮 Handle Alert action=DISMISS
Handle Alert DISMISS 1 min
取弹窗的内容 ${message} Handle Alert action=LEAVE(或者此格为空)
${message} action=accept
让弹窗停留指定时间 Handle Alert timeout=10s
comment 定位删除数据,执行批量删除
${checkboxList} Get WebElements name=checkboxes[]
Click Element ${checkboxList[0]}
Click Element ${checkboxList[1]}
comment 循环语句批量删除
${checkboxList} Get WebElements name=checkboxes[]
FOR ${a} IN RANGE 0 2
Click Element ${checkboxList[${a}]}
END
不懂 Sclect From List By Value id=selAction trash
Handle Alert
9、断言TBD
三、持续集成 1、项目分层设计 1.1为什么要分层
  • 实现对页面元素,公共方法,公共数据,测试用例集中管理。
  • 增加脚本的可重复利用
  • 增加脚本的可重复利用
1.2 三层架构
  • 页面元素层
  • 业务逻辑层
  • 测试用例层
业务逻辑层调用页面元素层,测试用例层调用业务逻辑层
1.3 案例
  • 工程文件名robot
    • 公共部分文件夹名称robot
    • 公共元素.txt——存放执行测试的公共操作
      • 打开浏览器(新建关键字)
      • 关闭浏览器
      • 隐式等待
      • 线程等待
      • 进入框架
      • 退出框架
    • 公共数据.txt
      • ${username}
      • ${password}
      • ${url}
    • 页面元素文件夹名称robot
    • 登录页(新建关键字)
      • 输入用户名(新建关键字)
      • 输入密码(新建关键字)
      • 点击登录按钮(新建关键字)
    • 商品管理robot
      • 商品列表robot
      • 商品列表页.txt
    • 登录文件夹名称robot(即模块名称的文件夹)
    • 登录用例(File,TXT)
      • 01登录成功
      【导入公共元素.txt(操作)、公共数据.txt(数据)、登录业务(决定操作先后的逻辑).txt】
      • 02用户名为空——用户名为空,用\\表示
      • 03用户名有误
    • 登录业务.txt——此处存放登录的业务逻辑,导入公共元素的资源文件
      • 登录(新建关键字)
      【在登录下面,直接通过中文写用例】
    • 商品管理文件夹名称robot(即模块名称的文件夹,与系统架构一致)
    • 商品列表
      • 商品列表用例
      • 商品列表业务.txt
    • 添加新商品
2、非GUI方式运行非GUI——非页面方式来运行,这种方式可以与Jenkins来集成
pybot -d 【测试报告导出路径】 【项目路径】
运行结果:用例执行成功后,测试报告导出路径下生成相应的测试报告、日志等
3、插件下载和jenkins持续集成
  • 前置准备工作:安装jenkins
  • 在jenkins中安装RF的插件,在jenkins中的可选插件中搜索
  • 新建item
  • 勾选触发器,选择Build periodically
    ? 日程表:40 21***
  • 执行命令:pybot -d 【测试报告导出路径】 【项目路径】
  • 增加构建后的操作:RF 测试结果
    ? 输入测试结果的路径
    【#yyds干货盘点# RobotFramework从基础到项目实战】? 相应测试报告的名称

    推荐阅读