一、痛点:一条测试数据对应一个测试方法

前面的章节中我们已经写代码实现了登录接口的处理调用,但是一个接口往往是需要多条测试用例才能完整的覆盖到每一种情况。

针对于单接口多条测试用例需要执行的情况,该如何处理呢?

可能很多人最先想到的就是:一条测试数据对应一个测试方法?

下面有一个注册接口,我们基于此思路来编码实现接口的完整测试。

1) 接口业务:会员注册

2) 接口地址:http://119.23.241.154:8080/futureloan/mvc/api/member/register

3) 接口参数:mobilephone+pwd

 

4) 接口响应:json格式的报文

关于这个接口的更多详细的细节我们可以从公司提供的接口文档中获取,在公司里面做接口项目的测试,不管是自动化测试还是非自动化,都会有这样的一个文档描述接口项目中的每一个接口的细节,包括业务,接口地址,参数,响应报文中的字段以及格式。

这是我们在测试前编写测试用例的重要参考文献,大部分接口文档的撰写都大同小异,关于接口的一些重要信息一般都会涵盖到,比如以下接口文档关于注册接口的描述:

现在我们整理得到一条正向用例和几条反向用例:

1.合格手机号,合格密码

2.重复以上的手机号,密码

3.传手机号,不传密码

4.不传手机号,传密码

5.不合格的手机号

6.合格的手机号,不合格密码

编写测试类,每条用例,准备一个测试方法:test1-test6对应上面每种测试情况:

test1方法(mobilephone:18999700122;pwd:123456):

test2方法(mobilephone:18999700122;pwd:123456)

 

test3方法(mobilephone:18999700122;pwd:空)

test4方法(mobilephone:空;password:123456)

test5方法(mobilephone:189;password:123456)

test6(mobilephone:18999700122;password:123456789)

执行完毕,我们可以看到六个测试方法都有响应数据返回。

说明这种设计是可以达到我们的目的,但是问题是什么?

我们看到每个方法的代码几乎是一模一样,除了测试数据。

目前我们只设计了六条用例,试想,如果有七组,八组,九组...更多组的测试数据,那么将会有更多的重复代码,这样的设计简直就是灾难性的。

二、痛点解决

 

上面已经将问题抛出,我们该如何去解决这个问题呢?

第一种办法是我们自己去编码实现一条解决方案,但是成本太高,而且可能写出来的框架有很多问题。

第二种办法就是去找一些第三方的框架来帮助我们来解决这个问题,而testng正式我们想要找的这样一个框架,testng的数据提供者技术就能帮我们优雅的解决这个痛点,我们准备一个测试方法就可以了。

测试方法代码:

代码改动:

1) 测试方法上多了两个参数

2) 代码中直接绑定参数

数据提供者代码:

① 数据提供者的作用就是提供几组测试数据给测试方法,方法的返回值必须是二维数组,并且此方法要用@DataProvider来标注:

② 测试方法如果要引用数据提供者则必须指定数据提供者的名字:

测试用例执行结果为:

总结:

对于同一接口的批量测试,变动的数据可能就只有测试数据,因此,我们我们可以考虑通过@Dataprovider来提供几组测试数据,测试方法引用了dataprovider后就能拿到数据,依次注入完成批量测试,从而简化代码,简化测试。

三、 思路延伸

数据提供者能依次提供测试数据的功能固然很好,但是我们需要的这些测试数据来自于哪里呢。

像上面那样直接定义在代码当中,其实属于硬编码的情况,耦合性很高,一旦我们要修改测试数据,那么我们就必须修改代码,而频繁的修改代码就可能导致各种不可预期的问题,要实现一个好的自动化测试框架应该尽可能保证代码的健壮性和兼容性。

那么问题来了,数据源的问题怎么解决?

转至: 柠檬班软件测试 微信公众号

【转】JAVA接口自动化测试之一个测试方法对应多条测试数据的实现方式的更多相关文章

  1. Java接口自动化测试之集成MyBatis和MySQL (五)

    pom.xml新增dependency <dependency> <groupId>org.mybatis</groupId> <artifactId> ...

  2. Java接口自动化测试之TestNG测试报告ExtentReports的应用(三)

    pom.xml导入包 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=" ...

  3. java 接口自动化测试之数据请求的简单封装

    我们自己用java写接口自动化测试框架或者做个接口自动化测试平台的话,是需要自己进行相关的请求的,因此我们需要简单的封装下httpclient,我新建了一个http工具类,将get方法和post方法进 ...

  4. Java接口自动化测试之TestNG学习(二)

    在maven项目的pom.xml文件中导入TestNG <?xml version="1.0" encoding="UTF-8"?> <pro ...

  5. Java接口自动化测试之HTTPClient学习(四)

    pom.xml  文件中dependency <dependencies> <dependency> <groupId>org.testng</groupId ...

  6. Java接口自动化测试之Maven项目的创建(一)

    这里使用Idea创建Maven项目, 过程非常简单, 装好JDK和Idea 1. 安装完后,打开Idea, 选择File→New→Project, 如图 2. 选择maven, 点击Next, 如图 ...

  7. java接口自动化(一) - 接口自动化测试整体认知 - 开山篇(超详解)

    简介 了解什么是接口和为什么要做接口测试.并且知道接口自动化测试应该学习哪些技术以及接口自动化测试的落地过程.其实这些基本上在python接口自动化的文章中已经详细的介绍过了,不清楚的可以过去看看.了 ...

  8. java接口自动化(三) - 手工接口测试到自动化框架设计之鸟枪换炮

    1.简介 上一篇宏哥介绍完了接口用例设计,那么这一章节,宏哥就趁热打铁介绍一下,接口测试工具.然后小伙伴们或者童鞋们就可以用接口测试工具按照设计好的测试用例开始执行用例进行接口手动测试了.关于手动测试 ...

  9. 想在java接口自动化里用上Python的requests?这样做就可以了

    相信现在很多的公司自动化测试重点都在接口层,因为接口测试更加接近代码底层,相对于UI自动化,接口自动化有着开发更快.覆盖更全.回报率高等优点. 接口自动化代码实现不难,本质上就是代码模拟发送请求,然后 ...

随机推荐

  1. C# POST方式提交数据,接收方式,使用Request.Form[""]或Request[""]来获取

    /// <summary> /// 调用接口 /// </summary> /// <param name="url"></param&g ...

  2. 通过URI协议实现浏览器调用手机app

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  3. promise、async和await

    async:async function 声明将定义一个返回 AsyncFunction 对象的异步函数.当调用一个 async 函数时,会返回一个 Promise 对象.当这个 async 函数返回 ...

  4. 「HAOI2015」树上操作(非树剖)

    题目链接(luogu) 看到标签::树链剖分,蒟蒻Sy开始发抖,不知所措,但其实,本题只需要一个恶心普通的操作就可以了!! 前提知识:欧拉序 首先我们知道dfs序,就是在dfs过程中,按访问顺序进行编 ...

  5. 032 搭建搜索微服务01----向ElasticSearch中导入数据--通过Feign实现微服务之间的相互调用

    1.创建搜索服务 创建module: Pom文件: <?xml version="1.0" encoding="UTF-8"?> <proje ...

  6. [转帖]如何获得一个RAC Oracle数据库(从Github - oracle/docker-images) - 本地版 ---暂时未做实验.

    如何获得一个RAC Oracle数据库(从Github - oracle/docker-images) - 本地版 2019-11-09 16:35:30 dingdingfish 阅读数 32更多 ...

  7. SpringBoot:3.SpringBoot使用Spring-data-jpa实现数据库访问

    做Web开发,首先要能将数据渲染到网页中展示,其次是要获取数据库数据展示到视图层,在前面的文章SpringBoot整合Thymeleaf模板引擎渲染web视图,我们实现了从后端数据展示到视图层,那么下 ...

  8. 基于netty手写RPC框架

    代码目录结构 rpc-common存放公共类 rpc-interface为rpc调用方需要调用的接口 rpc-register提供服务的注册与发现 rpc-client为rpc调用方底层实现 rpc- ...

  9. C#生成唯一不重复订单号帮助类

    1.使用场景 通常,在做一些表单的功能时,需要生成唯一不重复的订单单号,本文提供的帮助类可以适合大多数场景的单号生成使用,拿来即用,方便快捷无重复.而且,在高并发的情况下也是可以使用的. 之前看到有人 ...

  10. web技术栈开发原生应用-多端共用一套代码

    weex: vuejs开发原生应用 nativescript: vuejs开发原生应用 ReactNative = reactjs开发原生应用 ionic = angularjs 开发原生应用