一、基础必备

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 Browser Window
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='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 测试结果

    ​ 输入测试结果的路径

    ​ 相应测试报告的名称