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

在上一篇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一直在说能实现数据驱动测试,但一直没找到相关资料,大多都是实现到这一层基本就没了下文,看了很多文档,基本也差不多就到此为止了,看来也是时候需要去看看官方各种文档了~~~~

时间: 2024-10-12 16:17:30

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

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

在上一篇,简单的demo实现了讲xml的数据发送服务器端并取得recvi_buf,然后进行了简单的解析的操作.现在就要解决之前提过的2个问题: 1. 步骤这么多,难道每写一个脚本都要重复一次么? 2. 每个接口的sendbuf的xml的格式是不一样的,id不一样,里面的tag的nodename也是不一样的,这要怎么办?难道每个接口都给写一个createSendBuf么,肯定不是这样的,那要怎样去做? 针对第一个问题的解决,可以使用在RF内定义自己的Resource,然后写直接调用资源内定义的关键

Python Selenium 之数据驱动测试

数据驱动模式的测试好处相比普通模式的测试就显而易见了吧!使用数据驱动的模式,可以根据业务分解测试数据,只需定义变量,使用外部或者自定义的数据使其参数化,从而避免了使用之前测试脚本中固定的数据.可以将测试脚本与测试数据分离,使得测试脚本在不同数据集合下高度复用.不仅可以增加复杂条件场景的测试覆盖,还可以极大减少测试脚本的编写与维护工作. 下面将使用Python下的数据驱动模式(ddt)库,结合unittest库以数据驱动模式创建百度搜索的测试. ddt库包含一组类和方法用于实现数据驱动测试.可以将

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

 接口测试与数据驱动 1简介 数据驱动测试,即是分离测试逻辑与测试数据,通过如excel表格的形式来保存测试数据,用测试脚本读取并执行测试的过程. 2 数据驱动与jmeter接口测试 我们已经简单介绍了接口测试参数录入及测试执行的过程,因为大量的测试脚本与测试数据内聚在一起,使得我们的测试脚本的可移植性及可维护性变得很不好,所以我们接下来采取了csv格式表格保存测试数据来驱动测试的方式. 2.1 新建一个csv文件 新建一个txt文档文件,重命名文件,修改文件后缀名为csv,如test.csv,

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

转载:http://www.cnblogs.com/chengtch/p/6576117.html 1简介 数据驱动测试,即是分离测试逻辑与测试数据,通过如excel表格的形式来保存测试数据,用测试脚本读取并执行测试的过程. 2 数据驱动与jmeter接口测试 我们已经简单介绍了接口测试参数录入及测试执行的过程,因为大量的测试脚本与测试数据内聚在一起,使得我们的测试脚本的可移植性及可维护性变得很不好,所以我们接下来采取了csv格式表格保存测试数据来驱动测试的方式. 2.1 新建一个csv文件 新

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

一.写在前面 robotframework是很好用的关键字驱动测试框架,但是在实际工作中也有些地方使用不便,比如在我们设计参数校验测试case时,往往只是想修改校验参数类型而不得不做大量复制粘贴操作,最终导致了一个测试case中存在大量的冗余代码,而且如果在后续的使用中一旦出现变动,测试case将不便维护. 针对此情况,想到了尝试在robotframework功能基础上封装了一个轻型框架,用来实现部分接口测试场景的数据驱动方式的自动化测试. 二.所需组件说明 1.python2.7 2.robo

微信开放平台 公众号第三方平台开发 教程四 代公众号调用接口的SDK和demo

原文:微信开放平台 公众号第三方平台开发 教程四 代公众号调用接口的SDK和demo 教程导航: 微信开放平台 公众号第三方平台开发 教程一 平台介绍 微信开放平台 公众号第三方平台开发 教程二 创建公众号第三方平台 微信开放平台 公众号第三方平台开发 教程三 一键登录授权给第三方平台 微信开放平台 公众号第三方平台开发 教程四 代公众号调用接口的SDK和demo 前几章中我讲解了微信开发平台提供第三方平台的好处,和使用流程,如果你看了我的文章相信你对开放平台有了初步的了解,但是在实际的开发过程

移动支付平台间接口报文解析技术核心架构实现、及平台交易处理项目全程实录教程

<基于移动支付平台间接口报文解析技术核心架构实现.及平台交易处理项目全程实录>课程讲师:MoMo 课程分类:Java框架适合人群:中级课时数量:52课时用到技术:JavaBean .Spring3.X. SpringMVC. Hibernate3.X.Apache HttpClient 3.x.JUnit4.x.自定义Annotation + java反射技术涉及项目:移动支付平台间接口咨询QQ:1337192913 课程介绍:   本课程抛开理论.以项目为驱动,适用于初次接触报文收发.组装解

移动支付平台间接口报文解析核心架构及平台交易全程实录

移动支付平台间接口报文解析核心架构及平台交易全程实录 (HttpClient+SpringMVC+Spring3+Hibernate3+自定义Annotation) 课程分类:Java框架 适合人群:中级 课时数量:52课时 用到技术:JavaBean .Spring3.X. SpringMVC. Hibernate3.X.Apache HttpClient 3.x.JUnit4.x.自定义Annotation + java反射技术 涉及项目:移动支付平台间接口 咨询qq:1840215592

soapui + groovy 接口自动化测试 第三章

本篇闲扯淡 第一次做接口测试是无意的,当时正在做性能测试,然后要先验一下功能通过否,就用lr脚本跑了一遍功能,就这样第一次没了: 第二次做接口测试时,领导说要自动化,然后我研究了selenium及windows客户端,再然后得知先做接口的(万变不离其宗嘛): 思虑良久用啥去做呢,首选抛弃了lr这绝壁不合适,简单的还行复杂的就GG了.然后祭出了我的java,先学习了段时间httpclient,就进行简单的请求编写了: 在编写过程中发现我们内部请求是要传加密字段的,然后就去请教我们开发了: 首先我们