#robot framework
##简介
Robot Framework是一种基于Python开发的可扩展的关键字驱动自动化测试框架,它具有易于使用的表格来组织测试过程和测试数据。
支持的库和关键字非常多
web 自动化测试:SeleniumLibrary,Selenium2Library,Selenium2Library for Java、watir-robot 等。
Windows GUI 测试:AutoItLibrary。
移动测试:Android library、iOS library、AppiumLibrary 等。
数据库测试:Database Library (Java)、Database Library (Python)、MongoDB library 等。
文件对比测试:Diff Library。
HTTP 测试:HTTP library (livetest)、HTTP library (Requests)等。
使用广泛,完成不同类型的测试。
##三种不同方式的自动化测试框架
####1.录制/回放
录制/回放就是通过一些工具直接录制生成脚本,使用时直接回放。例如QTP等测试工具。
优点:使用简单,方便。不需要技术背景,只需要简单的录制生成脚本。
缺点:只要产品变动,录制的硬代码就需要改动,代码只是录制的,更改起来也是非常的麻烦,维护成本非常高。而且我们的产品还不成熟,产品变动快。维护起来高的几乎不可承受
####2.数据驱动的自动化测试框架
写好脚本,通过传入不同的测试数据或变量,来完成不同不同业务流程的测试,数据与脚本分离,脚本相当与一个驱动,一个产品,通过输入不同的数据来完成不同的测试场景。例如我们使用的httprunner,就是通过debugtalk.py的文件,来控制测试脚本。
优点:数据代码分离,数据变动不会影响到测试脚本,维护相对比较简单,可根据不同测试场景来改变存放数据的文件即可。可以根据需求完成不同的测试场景。
缺点:脚本写起来比较麻烦,需要对工具比较了解。
####3.关键字驱动的自动化测试
类似于将一个接口或一个业务流编写成一个类或函数,再将这些类或函数变为关键字,通过传入不同的参数,将接口进行组合形成一套测试流程。不同的测试流程,用不同的关键字组合成不同的测试场景。
优点:操作比较灵活,测试场景可以自由的组合。接口发生变动或增加删除接口,对整个测试流程没有影响。可以提前给关键字写好,然后不会写脚本的人也可以进行操作组合不同的测试场景。
缺点:实现比较麻烦(还没开始写),需要专业的人去写不同的关键字。写的成本比较高。如果按照工具自带关键字,完成操作比较麻烦。
###robot framework的安装
依赖环境:
python2.7(3.x也可以需要升级robot)
wxpython
robotframework-ride
robotframework
##安装
####首先需要安装wxpython
brew install wxpython
####版本确认
ulbdeMacBook-Air:~ dtwave$ brew info wxpython
wxpython: stable 3.0.2.0 (bottled)
Python bindings for wxWidgets
https://www.wxwidgets.org/
/usr/local/Cellar/wxpython/3.0.2.0_1 (1,115 files, 39.9MB) *
Poured from bottle on 2018-08-23 at 14:55:54
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/wxpython.rb
==> Dependencies
Required: python@2 ✔, wxmac ✔
####创建软链接
hulbdeMacBook-Air:~ dtwave$ ln -s ../Cellar/wxpython/3.0.2.0_1/lib/python2.7/site-packages/wx-3.0-osx_cocoa/wx wx
####安装robotframework-ride
pip install robotframework-ride
####启动确认
ulbdeMacBook-Air:~ ride.py
Wrong wxPython version.
You need to install wxPython 2.8.12.1 with unicode support to run RIDE.
wxPython 2.8.12.1 can be downloaded from http://sourceforge.net/projects/wxpython/files/wxPython/2.8.12.1/
原因是ride只支持wxpython2.8.12.1版本,找到文件修改支持的wxpython版本
hulbdeMacBook-Air:~ dtwave$ sudo find . -name '*.py' |xargs grep 'You need to install wxPython'
./Desktop/RIDE-1.5.2.1/build/lib/robotide/__init__.py
修改文件内的配置
hulbdeMacBook-Air:vim ./Desktop/RIDE-1.5.2.1/build/lib/robotide/__init__.py
supported_versions = ["2.8"]
supported_versions.append("2.9")
wxversion.select(supported_versions)
将版本修改为3.0的版本
hulbdeMacBook-Air:vim ./Desktop/RIDE-1.5.2.1/build/lib/robotide/__init__.py
supported_versions = ["2.8"]
supported_versions.append("3.0.2.0")
supported_versions.append("2.9")
wxversion.select(supported_versions)
####安装robotframework
ulbdeMacBook-Air:~ liumiao$ pip install robotframework
####启动RIDE
在命令行输入ride.py并回车,便可启动RIDE
安装链接
https://blog.csdn.net/liumiaocn/article/details/80739206
##robotframework的使用
点击f5键,可以查看所支持的库和关键字的用法
####第三方库的下载和使用
robotframework有自己的默认库和关键字,有些第三方库需要下载和安装,例如request,Selenium等。可以直接使用pip进行安装
hulbdeMacBook-Air:pip install robotframework-selenium2library
hulbdeMacBook-Air:pip install robotframework-requests
安装后,调用,假如没有下载或不支持的库,输入就会变红
调用后,就可以在用例中去调用库中的关键字,每个库支持的关键字不同,跟python中不同的库有不同的用法一样,需要去查找库都支持哪些关键字和用法。
####robotframework变量的使用
Robot Framework 的变量分为 标量, 列表 和 字典, 分别使用语法格式 ${SCALAR}, @{LIST} 和 &{DICT} 来定义.
变量都可以在edit中信息定义,可作为全局变量进行使用。也可以定义不同的list和dict变量,例如heards或body中进行使用。
####支持python的语法
robotframework支持Python的if else和for等循环判断语句
使用关键字直接使用
####直接调取python中自带的函数和导入本地python库
使用Evaluate关键字直接调用python的方法
例如直接调取python的random方法,生成随机数
还可以导入python库,调用框架。
####调用python文件
跟python一样,可以直接调取一些文件,直接当做类进行处理,可以自己在python脚本中编写一些代码,作为工具的关键字进行使用。
可以先自己写一个python脚本,定义一个函数或类
# encoding: utf-8
import requests
import json
def login(name,password):
url = 'http://xxxxxxxxxxxxxxxxxx'
param = {'userName': name,'password': password, 'loginType': '1'}
headers = {
'Connection': 'keep-alive',
'Pragma': 'no-cache',
'Cache-Control': 'no-cache',
'Accept': 'application/json, text/json',
'X-Requested-With': 'XMLHttpRequest',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36',
'Content-Type': 'application/json;charset=utf-8',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
'Referer': 'xxxxxxxxxxxxxxxxxxxxx?redirect=/',
'Origin' : 'http://ide3-test.dtwave-inc.com:8081',
'Cookie': 'xxxxxxxxxxxx'
}
resons = requests.post(url,headers=headers,params=param)
resons_dict = json.loads(resons.text)
data = resons_dict.get("code")
return data
然后通过robotframework将脚本封装成一个关键字,传入参数,直接调用。
运行结果
直接相当于运行脚本的内容。
通过断言进行获取任务是否运行成功,还可以通过结果提取出字段,例如cookie,userid等,作为入参给后面的接口说调用。
###测试报告
robot的测试报告比较完整,分为三种了类型,有日志和每个关键字的结果。
统计比较细致。
会提供各项指标和日志。
日志分为三种
output.xml 记录的测试结果是 xml 文件,这个文件不够直观。根据特定的需要可以编写脚本读取 xml 文件并生成特定的测试报告。
相比较而言 log.html 和 report.html 报告要直观得多,使用的是html格式,简单易懂。
在 log.html 文件中可以查看用例执行的每一步,适合跟踪定义问题
##后续如何使用
后续计划将平台的每个接口都用不同的文件用python写成单独的请求接口,将其汇总,然后使用robotframework的调取文件的功能,将每一个接口都当成一个个不同关键字,这样,定义好入参和返回,这样每个人可以通过自己不同的需求,来组合不同的自动化测试用例。
后续不管产品变动,脚本维护特别简单,可以自由组合。
不管是私有化还是定制化有新的需求就编写对应的python脚本,再加入到用例中进行组合,根据不同场景需求,组合自动化测试脚本。
可以让完全不懂代码的人,只是会robot的关键字用法,再利用写好的脚本,自己组合成自己想要的自动化测试用例。