RobotFrameWork接口报文测试-----(一)简单demo的实现
最近几个月的工作任务都是通过使用RF工具来搭建服务器端接口的自动化测试,使用python作为2次开发的语言,也是第一次去做这种项目,经验善浅,还是很有可能会走很多的弯路,为此,我希望自己能把每个阶段的进展还有点滴的收获,在此记录,然后能有个总结。
在15年的时候,我做过java web的接口自动化测试的开发工作,使用的技术比较简单:webService的XFIRE框架+testNG+Dom+POI,属于纯java代码构成,结合ant可以单独部署使用,是基于soap协议的(基于http协议),只需要组织好输入的参数,然后将参数传递给本地的接口,本地接口再调用远程服务的接口,就能得到实际返回值,实现比较简单。而这次主要工作如下:组装成一定格式的xml,然后发送给服务器端,然后从reciv_buf内提取需要进行check的字段的数据(实际结果),再将实际测试结果和预期测试结果进行比较。
由于RF是基于关键字进行组织测试用例的,所以在做最初级的demo时,只做了简单的处理,自定义一个lib,提供createSendBuf这个关键字(输入参数:报文id),能返回符合发送给服务器端格式的报文。然后lib内能调用dll文件,与服务器取得联系后,直接把报文发送给服务器,并取得返回结果(dll由开发提供,只需要在py脚本内对dll的导出函数进行调用即可封装成想要的关键字),然后再提供关键字paraseRecivBuf(输入参数:报文内的字段),这个关键字,可以从RecivBuf中拿到特定字段的取值,最后把这个值跟预期的进行对比即可。
第一次做出来的demo,可以用简单粗暴形容。xml数据组装如下:用一个list保存tag的name,然后用一个dict来保存tag的name(key)和tag对应var属性的值(value)。然后组装成xml格式的内容。部分代码如下:
#创建文档对象,文档对象用于创建各种节点。
dom1=xml.dom.getDOMImplementation()
doc=dom1.createDocument(None,"cmd",None)
# 得到根节点
root = doc.documentElement
root.setAttribute('id',iid)
elements={'ClientType':'','TerminalType':'','UserType':'','AppType':'','UserLoginType':'','UserName':'tes','ProductName':'FMS101','UserPassword':'','LoginServerAddr':'192.168.5.195:1089'}
key=['ClientType','TerminalType','UserType','AppType','UserLoginType','UserName','ProductName','UserPassword','LoginServerAddr']
for i in range(len(key)):
#elementNode=create_element(doc,element,'var',elements[element])
elementNode=doc.createElement(key[i])
elementNode.setAttribute('val',elements[key[i]])
root.appendChild(elementNode)
return root.toxml()
后面返回的xml格式如下:
{send_buf}=<cmd id=""><UserName var="loleina"/><UserType var=""/><UserLoginType var=""/><AppType var=""/><ClientType var=""/><LoginServerAddr var="www.fsmeeting.com:1089"/><UserPassword var=""/><TerminalType var=""/><ProductName var="
FMS101"/></cmd>
就把{send_buf}给底层py发送给服务器就完成了,在rf内的测试用例如下:

简单粗暴的demo就这样完成了,跟领导演示了下,就大致敲定了使用这个框架来完成服务器接口测试了,接下来我就可以展开更细致的工作了。后面问题就来了:
1. 步骤这么多,难道每写一个脚本都要重复一次么?
2. 每个接口的sendbuf的xml的格式是不一样的,id不一样,里面的tag的nodename也是不一样的,这要怎么办?难道每个接口都给写一个createSendBuf么,肯定不是这样的,那要怎样去做?
其实还有很多的问题,比如连接数据库的考虑,执行前连接服务器,数据与测试用例分离考虑,底层py调用导出函数的封装,接口之间的逻辑关系处理等等一系列问题,但是现在急需解决的问题是上面的2个问题,脚本怎么简化,每个接口xml该怎么组织起来(服务器知道xml格式,能将用户输入的参数放到xml里去)。然后看了下网上的各种教程,接下来确定需要做的就是对RF框架的熟悉和python语言本身的学习。
RobotFrameWork接口报文测试-----(一)简单demo的实现的更多相关文章
- RobotFrameWork接口报文测试-----(三)demo的加强版(数据驱动测试)
在上一篇RobotFrameWork接口报文测试-----(二)demo的升级版基础上,将接口的xml的格式保存在xml文件中,然后程序如果增加一个接口,在xml文件里添加即可,无需修改自动化测试里的 ...
- RobotFrameWork接口报文测试-----(二)demo的升级版
在上一篇,简单的demo实现了讲xml的数据发送服务器端并取得recvi_buf,然后进行了简单的解析的操作.现在就要解决之前提过的2个问题: 1. 步骤这么多,难道每写一个脚本都要重复一次么? 2. ...
- Axis2创建WebService服务端接口+SoupUI以及Client端demo测试调用
第一步:引入axis2相关jar包,如果是pom项目,直接在pom文件中引入依赖就好 <dependency> <groupId>org.apache.axis2</gr ...
- SoapUI 利用SoapUI进行简单的接口并发测试
利用SoapUI进行简单的接口并发测试 by:授客 QQ:1033553122 测试环境: SoapUI Pro 5.1.2 步骤如下 1. 把请求添加到测试套件 1.1. 途径1 1.新 ...
- RocketMQ初探(二)之RocketMQ3.26版本搭建(含简单Demo测试案例)
作为一名程序猿,要敢于直面各种现实,脾气要好,心态要棒,纵使Bug虐我千百遍,我待它如初恋,方法也有千万种,一条路不行,换条路走走,方向对了,只要前行,总会上了罗马的道. Apache4.x最新版本既 ...
- Spring的简单demo
---------------------------------------- 开发一个Spring的简单Demo,具体的步骤如下: 1.构造一个maven项目 2.在maven项目的pom.xml ...
- 利用unittest+ddt进行接口测试(一):简单demo
一般进行接口测试时,每个接口的传参都不止一种情况,一般会考虑正向.逆向等多种组合.所以在测试一个接口时通常会编写多条case,而这些case除了传参不同外,其实并没什么区别. 这个时候就可以利用ddt ...
- robotframwork接口测试(五)—接口分层测试粗解
个人小结,仅供参考. 接口测试很简单,但是很重要. 可以写代码,也可以用工具进行测试.工具说说就很多了,简单介绍一下我目前用过的几个能够测试接口的工具, Burpsuite:这类偏请求攻击类软件 Fi ...
- Spring环境搭建及简单demo
1. Spring框架简介(以下这段话可用于面试求职) Spring为JavaEE开发提供了一个轻量级的解决方案,主要表现为, IOC(或者叫做DI)的核心机制,提供了bean工厂(Spring容器) ...
随机推荐
- Magento Error – The directory is not writable by server.
When trying to use the insert image functionality in Magento if you receive an error saying: “The di ...
- Linux 性能检测 - CentOS 安装 paramon
简介 paramon是一款性能检测工具. 数据发送:cnt 数据接收:svr Continue...
- [LeetCode]题解(python):036-Valid Sudoku
题目来源 https://leetcode.com/problems/valid-sudoku/ etermine if a Sudoku is valid, according to: Sudoku ...
- SET Statements (Transact-SQL)
The Transact-SQL programming language provides several SET statements that change the current sessio ...
- 12岁的少年教你用Python做小游戏
首页 资讯 文章 频道 资源 小组 相亲 登录 注册 首页 最新文章 经典回顾 开发 设计 IT技术 职场 业界 极客 创业 访谈 在国外 - 导航条 - 首页 最新文章 经典回顾 开发 ...
- you need to upgrade the working copy first
is too old (format 29) to work with client version '1.9.4 (r1740329)' (expects format 31) 2016年09月18 ...
- [BS-05] init、initWithFrame和initWithCoder的区别
init.initWithFrame和initWithCoder的区别 1.Xib方式自定义UIView(指任意的UI控件) 使用Xib文件,就是我们所常用的“拖控件”的方式.如果我们使用了该方法创建 ...
- javascript:void(0)和javascript:;的用法
一.JavaScript:void(0) 我们经常会使用到 javascript:void(0) 这样的代码,那么在 JavaScript 中 javascript:void(0) 代表的是什么意思呢 ...
- Vue.2.0.5-插件
开发插件 插件通常会为Vue添加全局功能.插件的范围没有限制--一般有下面几种: 添加全局方法或者属性,如: vue-element 添加全局资源:指令/过滤器/过渡等,如 vue-touch 通过全 ...
- 轻量级的jquery
话不多说,直接上源代码 一.tool.js 封装一些共用方法,以及相关的浏览器兼容细节,供Base.js调用 //浏览器检测,一旦加载即执行 (function() { window.sys = {} ...