http://chuansong.me/n/1858477

1、RF框架
1.1 RF框架介绍
Robot Framework 框架是一个通用的测试框架,一直是由诺西网络(Nokia Siemens Networks Oyj)的人员在维护的。后来诺基亚卖掉了手机业务后,现在更名成诺基亚解决方案网络(Nokia Solutions and Networks)了。现在还是那帮子老外们在维护,已经到 2.9 了,不过 2.9 碰到很多问题,暂时还是用 2.8.7 比较好。

下面介绍一下 RF 的特性:
易于使用,采用表格式语法,统一测试用例格式;
可以使用关键字驱动(keyword-driven)、数据驱动(data-driven)和行为驱动开发 (BDD) 完成;
重用性好,可以利用现有关键字来组合新关键字;
结果报告和日志采用 HTML 格式,易于阅读;
平台和应用无关联性;

模块结构支持使用不同的接口来测试你的应用;
易于扩展,提供了简单 API,用户可以自定义的基于 Python 或者 Java 的测试库;
易于集成,提供了命令行接口和基于 XML 的输出文件;
功能全面,支持WEB测试(Selenium)、Java GUI 测试,启动线程、Telnet、SSH 等;
RemoteLibrary 接口可以支持分布测试和使用其他编程语言实现测试库;
提供tag标签来分类和选择你的案例执行;
内置支持变量variables,支持不同的环境进行测试;

根据我的理解,整理了一个比较形象的Robotframework框架图,如图:

Robotframework作为框架平台,上面可以加载各种Library,通过测试套件、资源文件集成起来,然后可以针对被测系统进行不同角度的测试,图中只列了三种Library,实际上还有很多种不同方向的Library,这里只是方便大家理解。

1.2 安装Robotframework
接下来我们说说怎么安装相关软件来用Robotframework

a. 首先要安装Python,如果是Mac电脑已经自带了Python了,如果是其他平台需要下载2.7.x系列的。目前RF整体还不支持Python3。windows平台在安装完Python后记得要把Python的两个路径加到环境变量Path里,一个是Python安装目录,一个是Python安装目录下的Scripts目录,然后重新打开命令行进行后面的安装操作。

b. 接着安装两个工具,setuptools和pip,打开浏览器访问pypi.python.org官方下载地址,搜索setuptools和pip找到最新的tar.gz文件下载,安装方法:先解压缩,然后在命令行窗口进入setup.py文件所在目录,输入python setup.py install进行安装。

c. 安装Robotframework框架。从这里开始包括后续的测试库安装一般有两种方式,一个是手工安装,前面安装setuptools和pip就是手工方式,另一种是pip安装。对于测试库安装来说,我推荐pip安装方式,不需要本地提前下载安装包,pip会自动从pypi.python.org上搜索安装包并下载安装。

这里我们用命令pip install robotframework就可以了,如果不想安装最新的版本,可以通过使用==, >=, <=, >, <来指定一个版本号。比如pip install ‘robotframework==2.8.7’来指定安装2.8.7的版本。

d. 安装wxPython。我基本上没有试过用pip安装这个,因为他自身有一个独立的安装包,版本目前只建议使用2.8.12.1。官网是http://sourceforge.net/projects/wxpython/files/wxPython/2.8.12.1/,要下载unicode版本的。

e. 安装RIDE,可以用pip install robotframework-ride安装。

Windows一般没啥问题,Mac上通常第一次安装后,在终端输入ride.py回车,会提示Python要运行在32位模式下: ”python should be executedin 32-bit mode to support wxPython on mac. Check BUILD.rest for details”。

因为Mac默认是64位运行,所以Python也默认运行64位,此时需要调整一下默认Python为32位,具体方式有两种:

(1).在终端里执行下面这句:
defaultswrite com.apple.versioner.python Prefer-32-Bit -bool yes

(2).或者在~/.bash_profile里增加下面这句:
exportVERSIONER_PYTHON_PREFER_32_BIT=yes
保存退出后运行source ~/.bash_profile后再输入ride.py回车就可以正常打开RIDE了。

f.安装测试库,可以用pip install LibraryName 进行相应测试库的在线安装,前面已经有相应例子了。
完整的pip命令请在命令行输入pip —help (注意是2个-)查看。

g. 本次接口测试要用到requests和robotframework-requests,前者是一个Python库,一般直接写Python脚本测试接口会importrequests来使用。后者是对requests做了一层封装,使其更好的应用在robotframework框架上。请根据这两个库的名字自己进行pip安装。

PS:如果熟悉pip安装的同学其实只要一个安装命令就可以了,因为后者依赖前者的存在才能安装,所以只需要pip安装后者,然后他会自动帮你把前者安装好的。

2、创建测试案例

2.1 第一个案例
为了让大家有个直观的认识,这里直接介绍一下怎么创建一个测试案例,暂时先不进行细致的介绍,RIDE和Robotframework的基础知识可以到http://blog.csdn.net/tulituqi看我的博客。

2.1.1打开RIDE
windows下直接双击界面的Robot机器人图标即可,或者进入到Python目录的scripts子目录下双击ride.py文件,也可以在命令行输入ride.py然后回车,就可以看到RIDE界面,如图。

mac下直接在终端命令行输入ride.py回车,就可以看到如图的界面。

由于Mac上和Windows上基本一致,所以这里主要以Windows的截图为主。这里因为大部分截图是之前做的,所以都是windows的,实际上我目前使用Mac环境更多一些。

2.1.2创建工程和测试套
选择File→New Project,如图

在Name的文本框里输入一个名字,例如testproject,右边选择Directory,如图

然后点击OK按钮,如图

右键点击testproject,在弹出菜单里点击“New Suite”,在Name的文本框里输入一个名字,例如testsuite1,如图

然后点击OK按钮,之后界面如图

2.1.3创建案例
右键点击testsuite1,在弹出菜单里点击“New Test Case”,在Name的文本框里输入一个名字,例如case1,如图

然后点击OK按钮,界面如图

2.1.4写一行脚本
我们第一个脚本就用log命令吧,这个命令是用来打印日志的,对比C语言,你可以理解为printf,我们来打印一个“hello world”吧
脚本写完如图

2.1.5运行案例
点击工具栏像播放按钮的图标 运行案例,运行结果如图

2.1.6查看运行结果
点击Report或Log图标查看报告,report和log分别是两种报告,展示的信息不一样,Report报告如图

Log报告如图

Report报告主要是概括性的报告,总体案例执行情况。Log报告则是更为详细的案例步骤的报告。

3、Requests接口自动化测试介绍
主要介绍几种常见的接口如何进行自动化测试,重点是get request和post request。
这部分测试案例可以在这里找到:https://github.com/qitaos/rf-demos/tree/master/RequestsDemo

3.1 接口测试
接口测试通常是系统之间交互的接口,或者某个系统对外提供的一些接口服务,我之前接触的大部分都是RESTful,还有一些webservice的接口。现在大家也越来越多的关注接口测试了,因为有时候可能界面上的功能还没有实现,我们可以先一步对接口进行验证,提早发现一些和预期不一致的错误。这方面的工具应该也有一些,基于RF的接口测试库我们首推requests和requestsLibrary。

3.2requestsLibrary、requests安装
前面介绍了pip安装,如果pip不好用或者网络不好的同学,可以本地安装,到下面官网下载进行手动安装。

requests的官方下载地址: https://pypi.python.org/pypi/requests
requestsLibrary的官方下载地址:
https://pypi.python.org/pypi/robotframework-requests/
如果是下载tar.gz包安装,先要安装requests,再安装requestsLibrary

3.3 requestsLibrary关键字
requestsLibrary的关键字不多,我常用的就几个。
Create Session: 创建一个session,连接某个服务器
Create Ntlm Session: 也是创建一个session,只不过加上了域、用户名、密码用于NTLM认证。
Get Request: 通过GET方式发起请求。
Post Request: 通过POST方式发起请求。
Head Request: 发送一个HEAD请求。
TO Json: 将文本转换成json对象。

3.4 测试案例
这里的demo我们是用到了flask的网站,做了几种例子,大家了解一下,如果需要更完整的了解,建议看一下RequestsLibrary在github上的测试案例。

3.4.0 使用demo前的准备
我用了flask来实现了一个demo网站,它可以快速建立起一个网站,只用一些简单的语句。
如果使用pip安装会比较方便,特别是在mac电脑上,为了保证例子能正常运行,大家需要安装四个东东,flask、flask-httpauth、flask_restful、python-simplexml。

只需要运行如下命令:

mac

sudo pip install flask
sudo pip install flask-httpauth
sudo pip install flask_restful
sudo pip installpython-simplexml

windows

pip install flask
pip install flask-httpauth
pip install flask_restful
pip install python-simplexml

安装完成之后就可以运行我们的demo-website了,我的书里全部的demo的地址是:
https://github.com/qitaos/rf-demos

具体说明可以看网站上的README,所有的demo都会放到这里,同时书籍出版后也会继续更新,所以你看到github上rf-demos的内容可能会比书上的多。
demo-website的地址是:https://github.com/qitaos/rf-demos/tree/master/demo-website
下载整个工程之后,进入demo-website目录,
运行命令
python flaskdemo.py
运行成功后会有提示信息

python flaskdemo.py

1、get request json
访问http://localhost:8000/users/1 的时候,它会返回一个json:
{“1”: “john”}

如果把1换成5,它会返回一个404的json:
{
“message”: “NotFound: http://localhost:8000/users/5“,
“status”: 404
}

所以这里第一个案例就是来测试这2个接口请求。

首先要先Create Session创建一个连接到服务器的host,然后通过Get Request发起请求,请求的返回是个Request对象${addr},所以在这里的变量是个对象,而对象的属性值的有${addr.status_code}和${addr.content},使用了To Json后,就把返回的content格式化成Json串,然后就可以用Dictionary的方法获取其中的值了。脚本见表格

2、getrequest xml

前面一个例子是接口返回json进行处理的,这个例子是接口返回xml格式内容。访问http://localhost:8000/hello/qitao,会返回一个xml格式的内容:

qitao

案例比较长,分两个部分说,第一个部分其实还是用json来处理,虽然返回的是xml,但是requestslibrary自动把它处理成json了。所以它的这部分处理其实和前面的案例一样。脚本见表格

那么想要返回xml怎么处理呢?这里就要在Request的essay-header里加上一个accept=application/xml,此时返回的就是一个xml格式的内容qitao

所以这里用到了XML库的关键字Get Element Text来获取xml节点的文本,使用Get Element获取到一个Element对象${hello},既然是对象,那么它也有属性值${hello.text}。再后面的几行就是用XML库的关键字新增Element,然后取值,这也算是提前准备好来XML的demo了。

这里为什么要做xml的例子呢,其实是因为有一种接口测试就是测试Web Service的,通常Web Service都是返回一个xml格式的内容。这里demo网站没有做Web Service的例子,所以就用这个xml的例子来代替Web Service了。脚本见表格

运行案例结果如图:

3、增加登录态
有些接口是需要用户密码登录后才能访问的,如果直接访问http://localhost:8000/401
会提示要输入用户名密码

输入正确的用户名密码ok/python,会得到一个返回的信息
{
“pass”:”Authorized access”
}

但是我们做自动化脚本的时候不能去手动输入的,所以我们可以在Create Session的时候加上用户名密码,就可以直接访问了。

用户名ok,密码python,我们用${auth}创建个List存起来,然后在Create Session时加上${auth}参数,后面的过程就是前面一样了,不需要自己再手动输入用户密码了。脚本见表格

运行结果如图


4、postrequest
前面几个都是get方式的,这个例子是post方式的。
这里主要是在essay-header加了一项Content-Type=application/x-www-form-urlencoded,这是最常见的post提交数据的方式,另外还有几种我不太常用的,大家可以根据自己的实际情况来使用。

然后我们向 http://localhost:8000/post,发起请求,并将${data}作为post的data传过去。demo网站对post请求做了个处理,将username的值获取到然后以json格式返回。脚本见表格

3.5 小结
接口测试其实比我们前面的UI自动化测试要有价值的多,而且投入也不是很高,维护成本也低很多,一般来说接口上不会特别频繁的变更。即使有变更,正好也可以用这些案例来回归其他接口是否受到了影响。所以推荐大家将接口自动化测试优先做起来,一定要在上线前跑接口自动化回归测试,某些时候能够避免一些接口变更导致的问题。

顺便打个小广告:我的新书《Robotframework自动化测试修炼宝典》即将在10月底11月初面市,欢迎感兴趣的朋友届时到各大网上书店购买。

答疑环节

1. RF对Java 和c#是一样适用吗?

这里不确定你说的是底层还是说Java和C#开发的程序。如果是底层,RF是支持java的,如果程序,java应该有swing库,C#貌似可以用autoitlibrary。

2.在Linux可以使用吗?

可以的。

3.autoit library 可以在mac下使用么?

不可以。因为autoit是针对win32程序的,只有windows上才能用。如果要对mac的ui进行自动化测试,可以研究一下其他的工具,我记得mac自带就有。

4.Linux 安装robot framework 直接参照Mac的吗?

我觉得参考mac的就可以,不过我确实没有尝试过。

5.基于RF的接口测试库我们首推requests和requestsLibrary———请问这是为什么,HttpLibrary.HTTP不好用吗,最近我们在两者之间就选择了后者?

这是我个人使用了requests后觉得比较方便。httplibrary的貌似也不错,我没有深入研究,抱歉。

6.可以用于云测试吗?若可如何使用?

具体要看你的应用场景。不过我对云测试了解不多。如果是类似于分布式测试的话,以前我是通过Jenkins来实现的。RF也有remote库可以把测试库放在一个统一的服务器上,然后在不同机器上去使用。

7.接口测试可以支持哪些接口?

今天介绍了几种接口,我理解大部分应该都可以支持了。

8.可不可支持APP或网站前端测试?

我们目前就是在自己的APP项目上用了这个接口测试,因为我们的接口是比较简单的RESTful接口,json串返回,我们解析json然后验证。

9.测试代码是否要求自己写?若要用啥语言?

测试案例是要自己写,不需要写太多代码,底层代码是Python的,如果你要写测试库可以写Python来实现。实际上写测试案例是直接使用各个测试库提供的关键字就可以了。

10.这是个什么接口,没看懂?404那个。

我这里演示的接口都是比较简单的请求返回的,自己做的demo的,就没弄那么复杂的。

11.使用or占整体业务的比例有多少?

我个人认为,接口测试如果可以的话做到100%自动化是最好的。因为他不像UI经常变化,接口大多都比较稳定的,自动化回归测试是非常有必要的。

12.request.txt这个文件怎么用RF打不开呢?

用RIDE打开就可以了,我这边演示的也是用RIDE打开的。

13.请问道长近期有没有计划做性能和app端测试的课程?

性能我不太熟悉,这个monkey来吧。app测试我的新书里写了使用Robotframework+appium的例子。以后有机会可以再进行相关介绍,不过我对appium还不太熟练,这方面monkey和恒温是专家

14.比如接口测试登录…要输入验证码,怎么实现?接口测试,如果要求传参要求加密怎么做?

验证码这个东西最好让开发给你加万能码或者关掉验证码,如果自动化实现了录入验证码,那就是bug,因为验证码没起到他的作用。至于传参要加密的,我们近期也碰到了,我们是用Python实现了加密方法,然后做成library使用。

15.post request之后 返回一个html页面 要如何进一步获取他的表单信息?用XML库吗?

XML应该可以处理。不过感觉比较麻烦。我做的貌似比较简单,所以没考虑到这个情况。我个人在想如果能结合Selenium2Library好像会比较方便,但是要尝试是否可行。

16.请问道长之前有没有出过书?书名是什么?

之前没出过。刚写了一本《Robotframework自动化测试修炼指南》,即将出版了。

17. 自定义库怎么写?

这里一两句话很难说清楚,在我的github上有个qtlibrary,可以参考一下。我在新书里也用这个来介绍写测试库。

18提问,怎样快速查找当前library里面的方法?rf我记得有些文字的显示可以纠错?这块可不可以简单说一下。

查看Library关键字请按F5,选择测试库后就可以看到了。纠错的你说的是那个内容助手吧,Content Assistance,他在RIDE的tools菜单下,有自己的快捷键,比如ctrl+空格。但是很容易和输入法的冲突,所以你要么选择另一个快捷键,要么自己改一下快捷键

19.脚本中的第一个和倒数第二345都没讲过,是干什么用的呢?

这个是说最后一个案例吧?第一行是创建一个字典变量,然后保存了一个值,是post的essay-header里的,倒数那几个都是用dictionary的方法来解析json,因为json基本上就是和dictionary一样的。

20.用rf做接口测试,需要哪些编程基础?没有编程基础的怎么学?有什么方法吗?

对于使用rf做测试,其实只需要比较简单的编程知识就够了。如果没有基础的可以学习一下算法,比如谭浩强的C语言的算法之类。其实用RF做测试,你要了解你想要怎么测试,然后找到方法去做就好了

21.作为一个高校老师,应该如何给学生开展测试的课程呢?普通高校,测试的课程几乎可以说没有,虽然一直很关注测试,但是,坦白说,一直也没有一个明晰的概念如何跟学生去进行这样一个课程的教学。可否请老师给指点下迷津,毕竟高校也是未来开发主力军的一个培养基地。

这个话题有点大。这方面应该请南京大学的陈振宇教授(俗称陈龙虾)来给讲解。我个人的意见是先介绍基础的测试知识,培养学生的测试思想和测试意识,测试工具可以晚一些再接触。

使用Robot Framework做接口测试的更多相关文章

  1. Robot Framework:接口测试

    ---恢复内容开始--- robotframework进行接口测试,需要安装Request和RequestLibrary包 pip install requests pip install -U ro ...

  2. Robot Framework自动化测试(五)--- 开发系统关键字

    最近一直在用robot framework 做自动化测试项目,老实说对于习惯直接使用python的情况下,被框在这个工具里各种不爽,当然,使用工具的好处也很多,降低了使用成本与难度:当然,在享受工具带 ...

  3. Robot Framework 使用【1】-- 基于Python3.7 + RIDE 最新版本搭建

    前言 Robot Framework作为公司能快速落地实现UI自动化测试的一款框架,同时也非常适合刚入门自动化测试的朋友们去快速学习自动化,笔者计划通过从搭建逐步到完成自动化测试的过程来整体描述它的使 ...

  4. 【Robot Framework 项目实战 01】使用 RequestsLibrary 进行接口测试

    写在前面 本文我们一起来学习如何使用Robot Framework 的RequestsLibrary库,涉及POST.GET接口测试,RF用例分层封装设计等内容. 接口 接口测试是我们最常见的测试类型 ...

  5. Robot Framework接口测试(1)

    RF是做接口测试的一个非常方便的工具,我们只需要写好发送报文的脚本,就可以灵活的对接口进行测试. 做接口测试我们需要做如下工作: 1.拼接发送的报文 2.发送请求的方法 3.对结果进行判断 我们先按步 ...

  6. robot framework 接口测试 http协议post请求json格式

    robot framework 接口测试 http协议post请求json格式 讲解一个基础版本.注意区分url地址和uri地址. rf和jmeter在添加服务器地址也就是ip地址的时候,只能url地 ...

  7. Robot Framework接口测试(2)--http请求之get

    本来打算把http发送请求的get和post方法都介绍一下的,结果发现篇幅有点长,文本编辑也变得混乱,所以这里先介绍一下get方法,下一次再post.其实这些方法大家可以看一下源码里面的介绍只需要在代 ...

  8. 基于RFS(robot framework selenium)框架模拟POST/GET请求执行自动化接口测试

    打开RIDE添加测试用例 如: Settings         Library Collections       Library RequestsLibrary       Test Cases ...

  9. 【Robot Framework】robot framework 学习以及selenium、appnium、requests实践(一)

    话说之前自己写了个selenium的自动化框架,然后又研究了下RF,觉得RF这种基于关键字驱动的框架更为容易上手,当然在做一些比较繁琐的验证时,似乎还不是太灵活,不如自己写几行python来的实惠(也 ...

随机推荐

  1. SQL Server DATEDIFF() 函数(SQL计算时间差)

    select  *   from   task_list  where 1=1 and    datediff(dd,carateTime,getdate()) =0      定义和用法 DATED ...

  2. 改变窗体大小视图区图形也会跟着变化 MFC

    怎样实现窗体缩放,视图区里的图形也会跟着变化 在CMFCView类中加入三个消息函数: 在类向导中选中CMFCView类,点击右键---->类向导------>消息--------> ...

  3. 解决Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COER

    今天在用java与mysql数据库时发现Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COER ...

  4. hdu1716排列2(stl:next_permutation+优先队列)

    排列2 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  5. 解决Python交叉编译后,键盘方向键乱码的问题

    参考 http://www.alliedjeep.com/38071.htm https://www.zhihu.com/question/21518507 http://professor.blog ...

  6. ASP.NET MVC下实现前端视图页的Session

    在ASP.NET MVC的控制器中可以实现Session处理.如果要在前端视图页实现Session该如何做呢?可以使用window.sessionStorage来做. AlexChittock用jQu ...

  7. IIS7.5标识介绍

    应用程序池的标识是运行应用程序池的工作进程所使用的服务帐户名称.默认情况下,应用程序池以 Network Service 用户帐户运行,该帐户拥有低级别的用户权限.您可以将应用程序池配置为以 Wind ...

  8. android中Bitmap的放大和缩小的方法

    android中Bitmap的放大和缩小的方法 时间 2013-06-20 19:02:34  CSDN博客原文  http://blog.csdn.net/ada168855/article/det ...

  9. WordPress主题开发:优化标题

    页面使用: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  10. Struts2学习笔记——Struts2与Spring整合

      Struts2与Spring整合后,可以使用Spring的配置文件applicationContext.xml来描述依赖关系,在Struts2的配置文件struts.xml来使用Spring创建的 ...