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

所属分类: 软件编程 / java 阅读数: 38
收藏 0 赞 0 分享

背景

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,标识登录操作成功,登录接口正常。

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

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

更多精彩内容其他人还在看

SpringBoot中使用Ehcache的详细教程

EhCache 是一个纯 Java 的进程内缓存框架,具有快速、精干等特点,是 Hibernate 中默认的 CacheProvider。这篇文章主要介绍了SpringBoot中使用Ehcache的相关知识,需要的朋友可以参考下
收藏 0 赞 0 分享

在idea 中添加和删除模块Module操作

这篇文章主要介绍了在idea 中添加和删除模块Module操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

java spring整合junit操作(有详细的分析过程)

这篇文章主要介绍了java spring整合junit操作(有详细的分析过程),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

详解JAVA 弱引用

这篇文章主要介绍了 JAVA 弱引用的相关资料,帮助大家更好的理解和学习java引用对象,感兴趣的朋友可以了解下
收藏 0 赞 0 分享

深入了解JAVA 虚引用

这篇文章主要介绍了JAVA 虚引用的相关资料,帮助大家更好的理解和学习JAVA,感兴趣的朋友可以了解下
收藏 0 赞 0 分享

详解JAVA 强引用

这篇文章主要介绍了JAVA 强引用的相关资料,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
收藏 0 赞 0 分享

java中的按位与(&)用法说明

这篇文章主要介绍了java中的按位与(&)用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

深入了解JAVA 软引用

这篇文章主要介绍了JAVA 软引用的相关资料,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
收藏 0 赞 0 分享

利用MyBatis实现条件查询的方法汇总

这篇文章主要给大家介绍了关于利用MyBatis实现条件查询的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者使用MyBatis具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
收藏 0 赞 0 分享

Intellij IDEA 与maven 版本不符 Unable to import maven project See logs for details: No implementation for org.apache.maven.model.path.PathTranslator was bound

这篇文章主要介绍了Intellij IDEA 与maven 版本不符 Unable to import maven project See logs for details: No implementation for org.apache.maven.model.path.Pa
收藏 0 赞 0 分享
查看更多