在上一篇RobotFrameWork接口报文测试-----(二)demo的升级版基础上,将接口的xml的格式保存在xml文件中,然后程序如果增加一个接口,在xml文件里添加即可,无需修改自动化测试里的其他模块,然后在工具加case就可以了,但是接口取值的数据全部都是直接在case里面录入的,也就是说,每增加一条测试用例,就需要在工具内添加一条case,测试数据始终都是在工具内控制,这让以前使用excel管理过测试数据的我感觉很不爽,总感觉得把数据放到excel内,然后实现数据驱动测试。

围绕着这个想法,先给出一个大致的业务流程图。

  

.xml : 每个接口的xml定义的标准规范文档。如下:

.xls : 每个接口的测试数据,保存在xls内。如下:

从xml文件中读取接口的字段,再从excel中读取相应的数据,然后组装成sendbuf,调用报文处理模块,将报文进行预处理后(在dll内实现,在会话层添加一些数据,然后再进行加密操作 )发往服务器端,服务器处理报文后,返回响应报文,报文处理模块将报文解析后,提取出状态码,将实际状态码与预期状态码进行对比,测试完成。在(二)的基础上,增加一个excel的处理模块,将excel内的数据全部读入到list中,简单的代码如下所示:

def readDataFromExcel():
data = xlrd.open_workbook('D:\logincase.xls')
table = data.sheets()[0] nrows = table.nrows
nclos = table.ncols listAll=[]
for row in range(3,nrows):
alist=[]
for col in range(1,nclos):
alist.append(table.cell(row,col).value)
listAll.append(alist)
return listAll

然后在RF工具内修改case,如下所示:

到此,已经把数据从case中剥离到了excel内,上图只读取了一条数据,如果要去读多条数据,直接在里面写个简单的for循环即可,于是我以为我完全实现了数据驱动测试,开心了好几天。。。。

一天无意间点到一位大师的博客,看了看,似乎觉得好像真有点道理,像我上面那样实现,就算实现了数据驱动测试了么?那什么又是数据驱动测试呢?

数据驱动测试是从数据文件(如Excel文件、文本文件、XML文件或数据库等)中读取测试数据,然后通过变量传入事先编写或录制好的测 试脚本中,这些变量既可传递测试输入数据也可传递测试输出的验证数据。测试数据只出现在数据文件中,测试脚本负责测试逻辑业务过 程、测试状态以及数据文件读取,因此,测试数据和测试脚本是分开存放的。数据文件中的每一行表示一组测试数据,通过循环遍历数据文件中的每一行,将数据逐一注入到相同的测试流程进行反复的测试验证。

对比下手工测试的场景:当一个手工测试人员A发现在测试数据存储目录下多了一套测试数据时,他就会意识到应该马上执行测试用例,并输入这套新的测试数据。其实是测试数据的变化触发了A的测试行为。再抽象一下,可以这样来看:当测试数据变化时,测试用例就会被执行,并且按照预先定义的规则去读取测试数据并执行测试用例。那么这种情况我们是不是可以理解为一种数据驱动呢?也就是说只要有了新的测试数据或者测试数据发生了变化,那么A就会去执行测试用例。这一过程的目的就是为了让所有的测试数据都得到输入并返回相应的输出结果。

很显然,这个概念强调了两点:第一:测试数据与测试脚本,模块的分离;第二:程序读取测试数据,自动完成一些列的测试流程并返回测试结果。很多时候,我们大部分人都是做了第一点,忽略了第二点;大多数都能实现测试数据的参数化处理,却无法完成自动运行相应的测试用例。了解数据驱动测试的相关概念后,自我审视觉得自己写的确实没法达到能完全自动运行的地步,至少存在以下几个问题:

第一:测试A接口,怎么确定使用哪个sheet的数据呢?

第二:测试A接口,有10条用例,放在一个RF的case内管理,那这10个用例内,冒烟测试只要运行3条,集成需要10条,这怎么设置?而且如果一个case里存在一个测试用例失败,则整个case是处于failed状态的,这该怎么办?

鉴于上面2个问题,实际上以前我都解决过;第一个问题好办,既然id能确定接口的xml的标准格式,那就可以以这个id作为测试数据的sheet的名称,就可以拿到具体接口的sheet数据。第二个办法运行几条case也好办,在每个xls最后一列加一列,是否执行列,读取为否,则不发送数据即可。但是第二个小问题,在RF内就无法解决了,应该是因为工具自身的局限性导致,一个RF的case不管里面实际跑了多少个测试用例,只要一个失败,就是全部失败状态。所以在RF内测试用例的管理有2种形式:

第一:一个suit 就是一个接口,一个case就是一条测试用例。

第二: 一个suit是一个模块,一个case是一个接口。

显然第一个可以更方便的控制执行粒度,但是每一个测试用例就得新建一个case,测试数据直接写在case内即可,是有点麻烦。如果碰到一个接口有四五十条测试用例,就只能呵呵了~~~第二个不太好控制执行粒度,但是在excel内管理数据,可以更好的管理测试数据。而且RF一直在说能实现数据驱动测试,但一直没找到相关资料,大多都是实现到这一层基本就没了下文,看了很多文档,基本也差不多就到此为止了,看来也是时候需要去看看官方各种文档了~~~~

RobotFrameWork接口报文测试-----(三)demo的加强版(数据驱动测试)的更多相关文章

  1. RobotFrameWork接口报文测试-----(二)demo的升级版

    在上一篇,简单的demo实现了讲xml的数据发送服务器端并取得recvi_buf,然后进行了简单的解析的操作.现在就要解决之前提过的2个问题: 1. 步骤这么多,难道每写一个脚本都要重复一次么? 2. ...

  2. RobotFrameWork接口报文测试-----(一)简单demo的实现

    最近几个月的工作任务都是通过使用RF工具来搭建服务器端接口的自动化测试,使用python作为2次开发的语言,也是第一次去做这种项目,经验善浅,还是很有可能会走很多的弯路,为此,我希望自己能把每个阶段的 ...

  3. selenium自动化测试之【数据驱动测试】

    数据驱动测试是自动化测试的主流设计模式之一,相同的测试脚本使用不同的测试数据来执行,测试数据和测试行为进行了完全的分离,这样的测试脚本设计模式称为数据驱动.实施数据驱动测试的步骤:1.编写测试脚本,脚 ...

  4. Python Selenium 之数据驱动测试

    数据驱动模式的测试好处相比普通模式的测试就显而易见了吧!使用数据驱动的模式,可以根据业务分解测试数据,只需定义变量,使用外部或者自定义的数据使其参数化,从而避免了使用之前测试脚本中固定的数据.可以将测 ...

  5. Sencha 基础Demo测试,三种showView的方法

    直接贴代码吧 Ext.define("build.controller.MainController",{ extend:"Ext.app.Controller" ...

  6. WEB接口测试之Jmeter接口测试自动化 (三)(数据驱动测试) 接口测试与数据驱动

    转载:http://www.cnblogs.com/chengtch/p/6576117.html 1简介 数据驱动测试,即是分离测试逻辑与测试数据,通过如excel表格的形式来保存测试数据,用测试脚 ...

  7. WEB接口测试之Jmeter接口测试自动化 (三)(数据驱动测试)

     接口测试与数据驱动 1简介 数据驱动测试,即是分离测试逻辑与测试数据,通过如excel表格的形式来保存测试数据,用测试脚本读取并执行测试的过程. 2 数据驱动与jmeter接口测试 我们已经简单介绍 ...

  8. RobotFrameWork接口项目分层及通用控制方式

    1. 前言 上一篇文章介绍了在设计接口用例之前应遵守的设计规范,详见<RobotFramework接口设计规范>,当然读者公司的内部规范也不一定非得完全遵循笔者所提到的,适合自己公司内部的 ...

  9. 如何在robotframework基础上使用数据驱动测试

    一.写在前面 robotframework是很好用的关键字驱动测试框架,但是在实际工作中也有些地方使用不便,比如在我们设计参数校验测试case时,往往只是想修改校验参数类型而不得不做大量复制粘贴操作, ...

随机推荐

  1. ArcGIS Engine开发之旅07---文件地理数据库、个人地理数据库和 ArcSDE 地理数据库中的栅格存储加以比较 、打开栅格数据

    原文:ArcGIS Engine开发之旅07---文件地理数据库.个人地理数据库和 ArcSDE 地理数据库中的栅格存储加以比较 .打开栅格数据 对文件地理数据库.个人地理数据库和 ArcSDE 地理 ...

  2. PMP--论文部分

    个人观点,是三个部分最简单,最容易复习的,当然,如果你没有做好一个项目的摘要和正文的背诵,连各个过程的工具输输入输出的都记不住几个,就不用往下看了,以上内容的观点,至少保证真题做三次以上,书籍教材看三 ...

  3. Selenium2学习-001-Selenium2 WebUI自动化Java开发 Windows 环境配置

    此文主要介绍 Selenium2 WebUI自动化Java开发 Windows 环境配置,供各位亲们参考,若有不足之处,敬请各位大神指正,非常感谢! 所需软件列表如下所示: 所属分类 具体名称 备注 ...

  4. JavaScript:JavaScript事件的处理

    JavaScript事件处理 —————事件的处理流程: —————动态事件绑定: —————常用的事件处理. 1.事件的概念 在页面之中,会针对用户的每一个操作进行记录.在页面中的事件可以简单的理解 ...

  5. centos linux安全和调优 第四十一节课

    centos  linux安全和调优    第四十一节课 上半节课 Linux安全 下半节课 Linux调优 2015-07-01linux安全和调优 [复制链接]--http://www.apele ...

  6. C3P0的详细配置说明

    C3P0是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate一起发布,包括了实现jdbc3和jdbc2扩展规范说明的Connection 和Statement 池的DataSourc ...

  7. C# --2007Access链接字符串

    public static string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDi ...

  8. 第二篇 Integration Services:SSIS数据泵

    本篇文章是Integration Services系列的第二篇,详细内容请参考原文. 简介SSIS用于移动数据.数据流任务提供此功能.因为这个原因,当介绍SSIS时我喜欢从数据流任务开始.数据流任务的 ...

  9. dojo使用疑难杂症集锦

    最近在用dojo做项目, 把使用过程中遇到的一些问题记录下来, 方便以后查阅, 因为问题不断, 所以持续更新中.......... 嵌套 TabContainer 时会出现样式问题: tab控制样式问 ...

  10. Hadoop学习笔记: sqoop配置与使用

    sqoop即SQL-to-Hadoop,是一个把数据从关系型数据库导入到Hadoop系统中的工具(HDFS,HIVE和HBase),也可以将数据从Hadoop导入到关系型数据库.本文以sqoop 1. ...