Rest-Assured 学习笔记
body { font-family: Arial, sans-serif }
.container { }
h1, h2, h3 { color: rgba(51, 51, 51, 1) }
pre { background-color: rgba(244, 244, 244, 1); border: 1px solid rgba(221, 221, 221, 1); padding: 10px; border-radius: 5px }

Rest-Assured 学习笔记

安装 Rest-Assured

<dependencies>
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<version>4.3.0</version>
<scope>test</scope>
</dependency>
</dependencies>

静态引入方式

import static io.restassured.RestAssured.*;
    

GET 请求示例

package com.test.rest_asslured;
import static io.restassured.RestAssured.*; public class ApiTest {
public static void main(String[] args) {
given().
when().get("https://httpbin.org/get?name=zhangsan").
then().log().all();
}
}

使用 queryParam 的 GET 请求

package com.test.rest_asslured;
import static io.restassured.RestAssured.*; public class ApiTest {
public static void main(String[] args) {
given().
queryParam("name", "zhangsan").
when().get("https://httpbin.org/get").
then().log().all();
}
}

引入 TestNG

<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.7.1</version>
<scope>test</scope>
</dependency>

Rest-Assured 语法

When-Then 是类似于驱动开发中定义的一种结构,Given 在某种场景下,When 发生什么事情,Then 产生什么结果。

  • given 设置测试预设(预设请求头,请求参数,请求体,cookies等等)
  • when 所要执行的操作(GET, POST 等)
  • then 解析结果,断言等。

POST 请求示例

@Test
public void ApiPostTest() {
given().
contentType("application/x-www-form-urlencoded;charset=UTF-8").
formParam("name", "张三").
when().
post("https://httpbin.org/post").
then().
log().body();
}

使用 Jackson Databind

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.17.2</version>
</dependency>

Java对象转Json

@Test
public void objectToJson() {
// 创建一个Java对象
Member member = new Member();
member.setName("张三");
member.setAge(30); // 使用RestAssured发送POST请求,并将Java对象转换为JSON
given().
contentType(ContentType.JSON).
body(member).
when().
post("https://httpbin.org/post").
then().
log().all();
}

HashMap转Json

@Test
public void hashMapToJson() {
// 创建一个HashMap
HashMap<String, String> hashMap = new HashMap<>();
hashMap.put("name", "张三");
hashMap.put("age", "30"); // 使用RestAssured发送POST请求,并将HashMap转换为JSON
given().
contentType(ContentType.JSON).
body(hashMap).
when().
post("https://httpbin.org/post").
then().
log().all();
}

断言机制

TestNG 提供了基本的断言机制,但通常使用 Hamcrest 断言框架,它在 Rest-Assured 中已经集成。

import static org.hamcrest.Matcher.*;
    

JSON 参数示例

{
"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]
}
]
}
}

XML 参数示例

<shopping>
<category type="groceries">
<item>Chocolate</item>
<item>Coffee</item>
</category>
<category type="supplies">
<item>Paper</item>
<item quantity="4">Pens</item>
</category>
<category type="present">
<item when="Aug 10">Kathryn's Birthday</item>
</category>
</shopping>

JSON 断言解析示例

@Test
public void assertJson() {
given().
when().
get("https://1857cad9-61db-44a6-b13f-6f518f76ba1d.mock.pstmn.io/json").
then().
// json断言
// 断言lotto对象的lottoId属性值为5
assertThat().body("lotto.lottoId", equalTo(5));
// 断言winners数组中包含winnerId为23和54的对象
assertThat().body("lotto.winners.winnerId", hasItems(23, 54));
// 通过索引访问winners数组中的第一个元素的winnerId属性
assertThat().body("lotto.winners.winnerId[0]", equalTo(23));
// 使用大于断言winners数组中第一个元素的winnerId属性值大于20
assertThat().body("lotto.winners.winnerId[0]", greaterThan(20));
// 使用findAll函数找出所有winnerId大于40的winners对象,并断言第一个元素的winnerId属性值为54
assertThat().body("lotto.winners.findAll{it.winnerId>40}.winnerId[0]", equalTo(54));
// 使用find函数找出第一个winnerId大于40的winners对象,并断言其winnerId属性值为54
assertThat().body("lotto.winners.find{it.winnerId>40}.winnerId", equalTo(54));
// 使用sum函数计算winning-numbers数组中所有数字的和,并断言其值为119
assertThat().body("lotto.winning-numbers.sum()", equalTo(119));
// 使用findAll函数找出所有winnerId大于40的winners对象,并使用sum函数计算这些对象的winnerId属性值的和,并断言其值为54
assertThat().body("lotto.winners.findAll{it.winnerId>40}.winnerId.sum()", equalTo(54));
// 使用max函数找出winning-numbers数组中的最大值,并断言其值为45
assertThat().body("lotto.winning-numbers.max()", equalTo(45));
// 使用min函数找出winning-numbers数组中的最小值,并断言其值为2
assertThat().body("lotto.winning-numbers.min()",

响应体断言 XML 示例

@Test
public void assertJsonXML() {
given().
when().
get("https://1857cad9-61db-44a6-b13f-6f518f76ba1d.mock.pstmn.io/xml").
then().
// 断言category节点第一个item的值为Paper
// 断言category节点中type为'groceries'的子节点的第一个item的值为'Paper'
assertThat().body("shopping.category[1].item[0]", equalTo("Paper"));
// 断言category节点中type为'groceries'的子节点包含item值为'Chocolate'和'Coffee'
assertThat().body("shopping.category.find{it.@type=='groceries'}.item", hasItems("Chocolate", "Coffee"));
// 使用查找所有category节点中type为'groceries'的子节点,并断言包含item值为'Chocolate'和'Coffee'
assertThat().body(".find { it.@type == 'groceries' } ", hasItems("Chocolate", "Coffee"));
}

Rest-Assured 学习笔记的更多相关文章

  1. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  2. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  3. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  4. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

  5. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  6. seaJs学习笔记2 – seaJs组建库的使用

    原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...

  7. CSS学习笔记

    CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...

  8. HTML学习笔记

    HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...

  9. DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记

    今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...

  10. ucos实时操作系统学习笔记——任务间通信(消息)

    ucos另一种任务间通信的机制是消息(mbox),个人感觉是它是queue中只有一个信息的特殊情况,从代码中可以很清楚的看到,因为之前有关于queue的学习笔记,所以一并讲一下mbox.为什么有了qu ...

随机推荐

  1. 讲师招募 | Apache DolphinScheduler Meetup诚邀您共建开源!

    随着Apache DolphinScheduler在全球范围内的快速发展,我们的用户群体和社区活动也在不断扩大. 为了进一步丰富我们的社区内容,分享更多有价值的知识和经验,我们诚挚地邀请您加入我们,成 ...

  2. 记一次解决OTA死机重启bug,如何分析与解决措施?!

    背景: 平台:stm32mp151平台 什么是OTA? 说起OTA我们应该都不陌生,它是一种可以为设备无损失升级系统的方式,能将新功能远程部署到产品上. 我们不仅可以通过网络下载OTA升级包,也可以通 ...

  3. ArgoWorkflow教程(二)---快速构建流水线:Workflow & Template 概念

    上一篇我们部署了 ArgoWorkflow,并创建了一个简单的流水线做了个 Demo.本篇主要分析 ArgoWorkflow 中流水线相关的概念,了解概念后才能更好使用 ArgoWorkflow. 本 ...

  4. CentOS ssh版本升级

    1.升级openssl yum install perl wget https://goodrain-delivery.oss-cn-hangzhou.aliyuncs.com/fuzhoushuch ...

  5. RabbitMQ相关总结

    //connection //channel //broke //exchange:fanout. dirct. topic(*:一个单词.#:多个单词). header //queue //bind ...

  6. 关于Protobuf在使用中的一些注意点

    Protobuf是谷歌旗下的一款二进制序列化协议 协议的编写 在项目中新建一个xxx.proto文件 文件的格式 第一行写protobuf的版本 syntax = "proto3" ...

  7. c++字符编码转换

    c++字符编码转换 简述 字符编码一直是软件开发中很麻烦的问题.当前项目开发普遍使用的字符集是utf-8,而windows系统则默认是gbk,linux默认编码则是utf-8,所以想要开发一个在win ...

  8. three.js的使用

    以创建一个立方体为例 安装 安装three:npm i three 使用 引用 引入three以及three中自带的相机控件OrbitControls用以操控相机: 初始化场景 scene:场景所有t ...

  9. 【YashanDB知识库】主备延迟故障分析方法

    [标题]主备延迟故障分析方法 [问题分类]故障分析 [关键字]Yashandb.主备延迟 [问题描述]当数据库备机出现回放延迟时,需要通过一些手段分析延迟的原因.通过数据库的系统视图或操作系统监控数据 ...

  10. 消息队列为什么选用redis?聊聊如何做技术方案选型?

    消息队列为什么选用redis?聊聊如何做技术方案选型? 老生常谈,消息队列主要有几大用途: 解耦:下单完成之后,需要订单服务去调用库存服务减库存,调用营销服务加营销数据. 引入消息队列,可以把订单完成 ...