接口自动化测试 - 请求构造和响应断言 -Rest-assure

文章目录

  • 前提
  • [1. 请求体-上传文件-file](#1. 请求体-上传文件-file)
  • [2. 请求体-上传表单-form](#2. 请求体-上传表单-form)
  • [3. 请求体-发送xml文件](#3. 请求体-发送xml文件)
  • [4. 响应体 - 断言xml文件](#4. 响应体 - 断言xml文件)
  • [5. 设置请求头-header](#5. 设置请求头-header)
  • [6. 设置Cookie](#6. 设置Cookie)
  • [7. 多请求-超时处理](#7. 多请求-超时处理)
  • [8. 代理配置](#8. 代理配置)
  • 总结

✨✨✨学习的道路很枯燥,希望我们能并肩走下来!

编程真是一件很奇妙的东西。你只是浅尝辄止,那么只会觉得枯燥乏味,像对待任务似的应付它。但你如果深入探索,就会发现其中的奇妙,了解许多所不知道的原理。知识的力量让你沉醉,甘愿深陷其中并发现宝藏。



本文开始

前提

使用Charles代理,监听请求

Charles配置代理,配置HTTPS

REST-assure中配置

java 复制代码
//全局配置
// 配置本地代理,监听请求
RestAssured.proxy = host("localhost").withPort(8888);
// 忽略HTTPS校验
RestAssured.useRelaxedHTTPSValidation();

1. 请求体-上传文件-file

接口中看Content-Type类型

接口类型显示如下:

Content-Type:multipart/form-data,指定上传文件的类型

类型包含:文件,文本,字节流,json,数组等

Rest-assure中使用

  1. 创建本地文件:
    file.txt
  2. 使用方法:multiPart(String name, File file)
    【注】multiPart 可携带多种数据 (请求体带不同类型数据)
java 复制代码
/**
 * 上传文件对象
 */
@Test
void testUploadFile() {
    File myFile = new File("file.txt");
    //定义一个代理配置信息 -通过代理工具获取请求
    RestAssured.proxy = host("localhost").withPort(8888);
    // RestAssured.proxy = host("127.0.0.1").withPort(8888);
    // 忽略HTTPS校验
    RestAssured.useRelaxedHTTPSValidation();

    given()
    			//传递文件对象
        .multiPart("test", myFile) 
        //传递JSON对象
        .multiPart("testJson", "{\"test\": 666}",
                    "application/json")
        .log().headers() //打印请求信息头
        .log().body() //打印请求消息体
    .when()
        .post("https://IP/post")
    .then()
        .statusCode(200);
}

2. 请求体-上传表单-form

Content-Type类型

接口类型显示如下:

Content-Type:application/x-www-form-urlencoded

应用场景

1.数据量不大

2.数据层级不深的情况

3.通常以键值对传递

Rest-assure中使用

调用方法:

formParam() :传递单参数

formParams() :传递多个参数

java 复制代码
// 请求体-表单
@Test
public void testFormParam() {
    //发送POST请求
    given()
        //添加表单数据
        .formParam("username", "zhangsan")
        .log().headers()
        .log().body()
    .when()
        .post("https://httpbin.org/post")
    .then()
        .statusCode(200);
}
//请求体-表单多参数
@Test
public void testFormParam() {
    //发送POST请求
    given()
        //添加表单数据
         .formParams("username", "zs")
         .formParams("password", "123")
        .log().headers()
        .log().body()
    .when()
        .post("https://httpbin.org/post")
    .then()
        .statusCode(200);
}

3. 请求体-发送xml文件

Content-Type类型

接口类型显示如下:

Content-Type:text/xml

构建 XML 请求体

  1. 外部的 XML 文件
    本地创建resourse文件中创建 add.xml文件
  2. 字符串
java 复制代码
@Test
void testSoapAi() throws IOException {
    // 定义请求体数据:源自文件对象
    File file = new File("add.xml");
    FileInputStream fis = new FileInputStream(file);
    String reqBody = IOUtils.toString(fis, "UTF-8");
    given()
        //定制请求内容媒体类型
        .contentType("text/xml")
        .body(reqBody)
        .log().body()
        .log().headers()
    .when()
        .post("http://dneonline.com//calculator.asmx")
    .then()
        .statusCode(200);
}

4. 响应体 - 断言xml文件

使用xpath语法断言

xpath简介:

1.是 XML 路径语言

2.是 XML Path Language 的缩写

3.是用来确定 XML 文档中某部分位置

java 复制代码
@Test
void testXML() throws IOException {
    // 定义请求体数据:源自文件对象
    File file = new File("add.xml");
    FileInputStream fis = new FileInputStream(file);
    String reqBody = IOUtils.toString(fis, "UTF-8");
    given()
        //定制请求内容媒体类型
        .contentType("text/xml")
        .body(reqBody)
        .log().body()
        .log().headers()
    .when()
        .post("http://dneonline.com//calculator.asmx")
    .then()
        .log().body()
        //响应体-断言
        //获取  <AddResult>4</AddResult>中的值
        .body("//AddResult.text()", equalTo("2"))
        .statusCode(200);
}

响应:

xml 复制代码
<soap:Body>
   <AddResponse xmlns="http://tempuri.org/">
      <AddResult>4</AddResult>
    </AddResponse>
</soap:Body>

5. 设置请求头-header

设置 User-Agent 示例

使用方法:header()方法

java 复制代码
@Test
void testSetHeader() {
    given()
    			// 设置请求头
        .header("User-Agent", "test")  
        .relaxedHTTPSValidation()  // 忽略HTTPS校验
    .when()
         .get("https://httpbin.org/get")  // 发送请求
    .then()
        .log().all()  // 打印完整响应信息
        .statusCode(200);  // 响应断言
}

6. 设置Cookie

添加 Cookie 的两种方式

1.通过 header() 方法

2.通过 cookie() 方法

java 复制代码
// 通过header()方法设置Cookie
@Test
void testAddCookieByHeader() {
    given()
    	 // 设置Cookie
         .header("Cookie", "my_cookie1=test")  
         .relaxedHTTPSValidation()  // 忽略HTTPS校验
    .when()
         .get("https://httpbin.org/get")  // 发送请求
    .then()
         .log().all()  // 打印完整响应信息
         .statusCode(200);  // 响应断言
}
// 添加单个Cookie
@Test
void testAddCookie() {
    given()
	   	 // 设置Cookie
        .cookie("my_cookie", "tets")  
        .relaxedHTTPSValidation()  // 忽略HTTPS校验
    .when()
        .get("https://httpbin.org/get")  // 发送请求
    .then()
        .log().all()  // 打印完整响应信息
        .statusCode(200);  // 响应断言
}

7. 多请求-超时处理

超时处理的场景:多个请求,某个请求请求超时,会影响后续请求;

设置超时处理步骤:

1.创建 HttpClientConfig 实例

2.创建 RestAssuredConfig 实例

3.given 语句中调用 config() 方法

java 复制代码
@Test
void case2(){
    // 1.自定义HttpClientConfig对象
    // 设置响应超时时长为3秒,单位是毫秒
    HttpClientConfig clientConfig = HttpClientConfig
        .httpClientConfig()
        .setParam("http.socket.timeout", 3000);

    // 2.定义RestAssuredConfig对象
    // 传入自定义的HttpClientConfig对象
    RestAssuredConfig myTimeout = RestAssuredConfig
         .config()
         .httpClient(clientConfig);

    // 3.接口调用config()
    given()
    	.config(myTimeout)
   	.when()
   	.then()
   	    .statusCode(200); ;
}

8. 代理配置

代理简介:可以监听请求和响应信息

代理与接口测试

使用Charles-更直观的排查请求错误

1.获取正确的的接口请求与响应信息

2.开启代理工具监听请求

3.获取自动化测试的请求与响应信息

4.对比两次请求响应的区别

REST assured 使用代理

配置代理

1.局部:通过 proxy() 方法

2.全局:定义 proxy 对象

java 复制代码
//使用代理请求 HTTP
@Test
void testHTTPProxy() {
    // 定义一个代理的配置信息-全局代理
    RestAssured.proxy = host("localhost").withPort(8888);

    given()
  		 // 局部代理
         .proxy(8888)  
    .when()
          .get("http://httpbin.org/get")  // 发送 HTTP请求
    .then()
          .log().all()  // 打印完整响应信息
          .statusCode(200);  // 响应断言
}

使用代理请求 HTTPS

java 复制代码
@Test
void testHTTPProxy() {
	//全局代理
    // 定义一个代理的配置信息
    RestAssured.proxy = host("localhost").withPort(8888);

    given()
		  //局部配置-忽略HTTPS校验
          .relaxedHTTPSValidation() 
    .when()
          .get("https://httpbin.org/get")
    .then()
          .log().all()  // 打印完整响应信息
          .statusCode(200);  // 响应断言
}

总结

✨✨✨各位读友,本篇分享到内容是否更好的帮助你理解,如果对你有帮助给个👍赞鼓励一下吧!!
🎉🎉🎉世上没有绝望的处境,只有对处境绝望的人。
🎉🎉🎉一遇挫折就灰心丧气的人,永远是个失败者。而一向努力奋斗,坚韧不拔的人会走向成功。
感谢每一位一起走到这的伙伴,我们可以一起交流进步!!!一起加油吧!!!

相关推荐
czhc11400756632 小时前
协议 25
java·开发语言·算法
岱宗夫up2 小时前
机器学习:标准化流模型(NF)
人工智能·python·机器学习·生成对抗网络
狂奔蜗牛飙车2 小时前
Python学习之路-循环语句学习详解
python·学习·python学习·#python学习笔记·循环语句详解
ae_zr2 小时前
QT动态编译应用后,如何快速获取依赖
开发语言·qt
花月mmc2 小时前
CanMV K230 波形识别——整体部署(4)
人工智能·python·嵌入式硬件·深度学习·信号处理
gjxDaniel2 小时前
Kotlin编程语言入门与常见问题
android·开发语言·kotlin
lang201509282 小时前
Java WebSocket API:JSR-356详解
java·python·websocket
jiang_changsheng2 小时前
环境管理工具全景图与深度对比
java·c语言·开发语言·c++·python·r语言
linjoe992 小时前
【Medical AI\pathology】WSI 的 JPEG 压缩质量与存储效率权衡分析
python·图像压缩·计算病理学·wsi