Java基于rest assured实现接口测试过程解析

背景

java程序员一般写的是后端服务是JavaWeb类型的项目,主要包括Http接口和dubbo接口,Http接口一般采用的rest风格,那么如何快速的对rest接口在第三方的测试框架上进行测试呢?

rest-assured框架是一个不错的工具。

使用之前,需要熟悉一下最基础的使用方法,在写完几个接口的测试用例之后,好比你可以使用你的三棱军刺熟练的进行基础的攻击了。

快速的来一个hello world吧!

假设你写了一个接口:lotto,访问路径是: http://localhost:8080/lotto

接口返回值是:

{
"lotto":{
 "lottoId":5,
 "winning-numbers":[2,45,34,23,7,5,3],
 "winners":[{
  "winnerId":23,
  "numbers":[2,45,34,23,3,5]
 },{
  "winnerId":54,
  "numbers":[52,3,12,11,18,22]
 }]
}
}

如何快速的验证接口是否返回正常值呢?

get("/lotto").then().body("lotto.winners.winnerId", hasItems(23, 54));

使用简单吧!

引入

不多说,直接maven的方式引入:注意,我直接按照默认的scope引入的,不是test;

主要引入以下2个依赖,原因如下:

rest-assured: 主要测试基本的http的rest风格接口,这个是最基础的依赖;

json-path: 主流的接口主要返回json,对接口进行测试用例测试,主要也是判断json返回某路径下的数据;

<dependency>
   <groupId>io.rest-assured</groupId>
   <artifactId>rest-assured</artifactId>
   <version>4.2.0</version>
</dependency>
<dependency>
   <groupId>io.rest-assured</groupId>
   <artifactId>json-path</artifactId>
   <version>4.2.0</version>
</dependency>

然后你就可以愉快的编写测试用例,然后使用rest-assured进行接口测试了。

使用要点

先上简单代码吧!

先准备测试数据:

 final TestCaseDataModel<LoginRestReq> testCaseDataModel = new TestCaseDataModel<>();

    final LoginRestReq loginRestReq = LoginRestReq.builder()
        .appId("2a6bf452219cfe44c7f78231e3c80a13072b6727")
        .nonce("123456")
        .timestamp(System.currentTimeMillis())
        .userId("lxlifuchun")
        .userName("李福春")
        .build();
    String appSecret = "91e47f584dae551170ade272b2c7a69f";
    loginRestReq.setChecksum(SignUtils.generateCheckSum(loginRestReq.getAppId(), appSecret, loginRestReq.getTimestamp(), loginRestReq.getNonce()));

    testCaseDataModel.setInputParam(loginRestReq);

    ExpectModel expectModel = new ExpectModel();
    expectModel.setPath("data.id");
    expectModel.setMatcher(Matchers.lessThan(0));

    testCaseDataModel.setExpectResult(Arrays.asList(expectModel));
RestAssured.baseURI = "https://rest-beta.xxx.com";
  final ValidatableResponse validatableResponse = given().contentType(ContentType.JSON)
        .header("requestId", UUID.randomUUID().toString())
        .body(testCaseData.getInputParam()).
            post("/user_service/user/login")
        .then().contentType(ContentType.JSON);

  for (Object obj : testCaseData.getExpectResult()) {
      ExpectModel item = (ExpectModel) obj;
      validatableResponse.body(item.getPath(), item.getMatcher());
    }

做的事情很简单,就是拿一个登录接口来实际的试一下:

login接口接受一个json的参数,LoginRestReq对下转换之后得到;
然后返回数据,数据中有一个用户id,路径是 data.id,如果id大于0,标识登录操作成功,登录接口正常。

很好的完成了接口的测试,如果失败,会抛出错误,捕获错误,然后输出信息,标识测试用例不通过,提示到界面或者发送邮件给到开发人员,即完成了接口的自动化测试。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Java接口自动化测试框架设计之Get请求方法和测试详解

    我来介绍通过代码逐步实现接口自动化测试框架的设计过程.先不要着急,框架设计我们只是介绍基本的组件,而且框架设计没有想象那么难,一步一步跟着做就会了.这篇我们来演示,如果通过Java代码来实现一个用纯代码实现Http中的Get请求过程. 1.Get请求API举例 浏览器打开网址https://reqres.in,然后下拉一屏,我们就可以看到这个网站的API举例,我们来看看显示用户的get接口. 通过这个图,我们能够获取这些信息 1)网站host地址:https://reqres.in/ 2)用户展

  • java实现随机森林RandomForest的示例代码

    随机森林是由多棵树组成的分类或回归方法.主要思想来源于Bagging算法,Bagging技术思想主要是给定一弱分类器及训练集,让该学习算法训练多轮,每轮的训练集由原始训练集中有放回的随机抽取,大小一般跟原始训练集相当,这样依次训练多个弱分类器,最终的分类由这些弱分类器组合,对于分类问题一般采用多数投票法,对于回归问题一般采用简单平均法.随机森林在bagging的基础上,每个弱分类器都是决策树,决策树的生成过程中中,在属性的选择上增加了依一定概率选择属性,在这些属性中选择最佳属性及分割点,传统做法

  • 浅谈java调用Restful API接口的方式

    摘要:最近有一个需求,为客户提供一些RestfulAPI接口,QA使用postman进行测试,但是postman的测试接口与java调用的相似但并不相同,于是想自己写一个程序去测试RestfulAPI接口,由于使用的是HTTPS,所以还要考虑到对于HTTPS的处理.由于我也是首次使用Java调用restful接口,所以还要研究一番,自然也是查阅了一些资料. 分析:这个问题与模块之间的调用不同,比如我有两个模块frontend和backend,frontend提供前台展示,backend提供数据支

  • Java 调用Restful API接口的几种方式(HTTPS)

    摘要:最近有一个需求,为客户提供一些Restful API 接口,QA使用postman进行测试,但是postman的测试接口与java调用的相似但并不相同,于是想自己写一个程序去测试Restful API接口,由于使用的是HTTPS,所以还要考虑到对于HTTPS的处理.由于我也是首次使用Java调用restful接口,所以还要研究一番,自然也是查阅了一些资料. 分析:这个问题与模块之间的调用不同,比如我有两个模块front end 和back end,front end提供前台展示,back

  • java接口自动化测试框架及断言详解

    我们介绍了Get方法的设计过程和测试结果,现在我们需要对前面代码进行重构和修改,本篇需要完成以下目标. 1)重构Get方法 2)如何进行JSON解析 3)使用TestNG方法进行测试断言 1.重构Get方法 在前面文章,说过,之前写的Get方法比较繁琐,不光写了如何进行Get请求,还写了获取http响应状态码和JSON转换.现在我们需要抽取出来,设计Get请求方法,就只干一件事情,那就是如何发送get请求,其他的不要管. 我们知道,请求之后会返回一个HTTP的响应对象,所以,我们把get方法的返

  • Java如何在沙箱环境中测试支付宝支付接口

    java沙箱环境测试支付宝支付接口? 准备工作,登陆支付宝开放平台,进入沙箱环境 开放平台链接:https://developers.alipay.com/platform/developerIndex.htm 沙箱环境中给测试提供了一些必要和非必要的参数,需要自己动手修改的只有RSA密钥,需要通过支付宝提供的开发工具生成RSA密钥,下载链接:https://docs.open.alipay.com/291/105971#LDsXr 下载完成安装之后,可以生成RSA密钥.生成的密钥分为应用公钥,

  • 最好的8个Java RESTful框架

    过去的每一year,涌现出越来越多的Java框架.就像JavaScript,每个人都认为他们知道一个好的框架的功能应该是怎么样的.连我的老祖母现在也使用 一个我从来没有听说过而且可能永远不会使用的框架.玩笑归玩笑,可以做几乎任何事的臃肿的框架市场已经饱和,,但是如何评判呢?这篇文章旨在提供目前最好的 Java RESTfulful 框架.我只介绍轻量级的产品, 略过了那些臃肿的过度设计的框架.同时,我只想要他们稳定和成熟,提供简单,轻量级的特点.我只在介绍Play frameworks时打破这条

  • java使用Feign实现声明式Restful风格调用

    一.Feign简介 Feign是netflix开发的声明式.模板化的http客户端,在使用时就像调用本地(服务消费者自己)的方法一般,帮助我们更加优雅的调用服务提供者的API.Feign自身支持springMVC,还整合了Eureka.Ribbon,极大的简化了Feign的使用.就整合Euraka而言,只需和普通的服务配置Eureka server的信息即可.整合Ribbon,就意味着不再需要通过标注@LoadBalanced的实例化后的RestTemplate去调用服务提供者方法了.Feign

  • Java基于rest assured实现接口测试过程解析

    背景 java程序员一般写的是后端服务是JavaWeb类型的项目,主要包括Http接口和dubbo接口,Http接口一般采用的rest风格,那么如何快速的对rest接口在第三方的测试框架上进行测试呢? rest-assured框架是一个不错的工具. 使用之前,需要熟悉一下最基础的使用方法,在写完几个接口的测试用例之后,好比你可以使用你的三棱军刺熟练的进行基础的攻击了. 快速的来一个hello world吧! 假设你写了一个接口:lotto,访问路径是: http://localhost:8080

  • 基于postman实现http接口测试过程解析

    无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家.教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家.点这里可以跳转到教程. HTTP的接口测试工具有很多,可以进行http请求的方式也有很多,但是可以直接拿来就用,而且功能还支持的不错的,我使用过的来讲,还是postman比较上手. 优点: 1.支持用例管理 2.支持get.post.文件上传.响应验证.变量管理.环境参数管理等功能 3.支持批量运行 4.支持用例导出.导入 5.支持云端保存用例[付费用

  • Java基于正则表达式实现xml文件的解析功能详解

    本文实例讲述了Java基于正则表达式实现xml文件的解析功能.分享给大家供大家参考,具体如下: 这是我通过正则表达式实现的xml文件解析工具,有些XHTML文件中包含特殊符号,暂时还无法正常使用. 设计思路:常见的xml文件都是单根树结构,工具的目的是通过递归的方式将整个文档树装载进一个Node对象.xml文档树上的每一个节点都能看做一个Node对象,它拥有title.attribute和text三个自身变量以及一个childrenNode集合用来存放子节点,使用正则表达式完整装载. 一.编写N

  • java基于spring boot本地上传图片示例解析

    前几天项目中刚好需要上传图片的需求,当时想的是用七牛云,因为我用七牛云也用了好几次,就是把图片上传到七牛云空间里面,数据库里面保存的是这张上传图片的url地址 那么页面访问也就很方便,考虑到项目部署的环境我就用了本地上传,不牵涉数据库的操作.我就花了半个小时写了个本地上传图片的小demo.非常的简单. 下面是需要的依赖 pom.xml文件: <?xml version="1.0" encoding="UTF-8"?> <project xmlns=

  • java基于dom4j包实现对XML解析的方法

    本文实例讲述了java基于dom4j包实现对XML解析的方法.分享给大家供大家参考,具体如下: 本例中的xml文件内容如下: <?xml version = "1.0" encoding="UTF-8"?> <!-- Copyright 难免有错 这是注释--> <自定义的> <!-- iloveyou --> <你喜欢的名字就好> <who a = "i"></who

  • Java基于注解实现的锁实例解析

    背景 某些场景下,有可能一个方法不能被并发执行,有可能一个方法的特定参数不能被并发执行.比如不能将一个消息发送多次,创建缓存最好只创建一次等等.为了实现上面的目标我们就需要采用同步机制来完成,但同步的逻辑如何实现呢,是否会影响到原有逻辑呢? 嵌入式 这里讲的嵌入式是说获取锁以及释放锁的逻辑与业务代码耦合在一起,又分分布式与单机两种不同场景的不同实现. 单机版本 下面方法,每个productId不允许并发访问,所以这里可以直接用synchronized来锁定不同的参数. @Service publ

  • Python MOCK SERVER moco模拟接口测试过程解析

    MOCK的意义 1.接口测试等待开发完成接口开发之后再进行,不符合测试的尽早测试的基本原则,我们可以利用MOCK工具来模拟接口,减少对开发的依赖,从而可使测试与开发同步进行 2.接口存在很多依赖关系,现实中,由于一些客观的原因,我们在测试环境所要的测试条件可能无法满足,此时就需要我们用MOCK工具来进行模拟,如网上商城有个支付业务,与工商银行做对接,工商银行只提供正式环境的对接,没有测试环境支持,那我们在测试环境测试就需要利用MOCK工具进行模拟,完成支付业务流 mock工具-moco 官网地址

  • Java跨session实现token接口测试过程图解

    这套框架的报告是自己封装的 一般token会在登录接口返回结果中呈现,从代码层面获取token的方式有很多种,我是使用jsonpath这个json路径语言去匹配token所在路径的key值 没有使用testng.xml的情况下调试testCase,需要设置一下dependsOnMethods,否则token将无法传递给其他test步骤 附上TestUtil.getToken()方法: //获取返回的token ,使用JsonPath获取json路径 public static HashMap<S

  • JAVA基于SnakeYAML实现解析与序列化YAML

    这篇文章主要介绍了JAVA基于SnakeYAML实现解析与序列化YAML,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.概述 本文,我们将学习如何使用SnakeYAML库将 YAML文档转换为Java对象,以及JAVA对象如何序列化为YAML文档. 2.项目设置 要在项目中使用SnakeYAML,需要添加Maven依赖项(可在此处找到最新版本): <dependency> <groupId>org.yaml</group

  • Java基于final修饰数据过程解析

    这篇文章主要介绍了Java基于final修饰数据过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 final是Java中的一个重要关键字,它可以修饰数据.方法和类,本篇将从final修饰的数据角度对final做出总结. final修饰的数据代表着:永远不变.意思是,一旦你用final修饰一块数据,你之后就只能看看它,你想修改它,没门. 我们不希望改变的数据有下面两种情况: 永不改变的编译时常量. //编译时知道其值 private fin

随机推荐