RestAssured接口自动化从入门到框架搭建-15-RequestSpecBuilder和ResponseSpecBuilder和日志打印使用

本文主要是介绍RestAssured接口自动化从入门到框架搭建-15-RequestSpecBuilder和ResponseSpecBuilder和日志打印使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本篇来学习一下RequestSpecBuilder和ResponseSpecBuilder,这个在这个系列第二篇文章,阅读RestAssured.java源码的时候可能提到过这个类或者相关接口。

 

1.RequestSpecBuilder举例

场景:浏览器打开 http://jsonplaceholder.typicode.com/posts?userId=2

下面是请求头截图

下面用代码来写这个过程,主要是请求发送之前,利用RequestSpecification对象来封装一些请求数据,例如参数,例如Header。

package demo;import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;import io.restassured.specification.RequestSpecification;
import io.restassured.builder.RequestSpecBuilder;
import static io.restassured.RestAssured.*;public class RequestSpecBuilderTest {RequestSpecification requestSpc;@BeforeClasspublic void setup() {RequestSpecBuilder builder = new RequestSpecBuilder();builder.addParam("userId", "2");builder.addHeader("Accept-Encoding", "gzip, deflate");requestSpc = builder.build();}@Testpublic void test1() {given().spec(requestSpc).log().all().when().get("http://jsonplaceholder.typicode.com/posts").then().statusCode(200).log().all();}}

如果这样运行,这个请求地址端口默认是8080,好奇怪。

[RemoteTestNG] detected TestNG version 6.14.3
Request method:	GET
Request URI:	http://jsonplaceholder.typicode.com:8080/posts?userId=2
Proxy:			<none>
Request params:	userId=2
Query params:	<none>
Form params:	<none>
Path params:	<none>
Headers:		Accept-Encoding=gzip, deflateAccept=*/*

所以,需要在上面代码get中,改成http://jsonplaceholder.typicode.com:80/posts

才能运行通过。

 

2.RespondeSpecBuilder举例

上面这种请求封装过程,在响应这块,同样也有类似的类去支持这么做。

场景:我们把一些确定每次请求回来响应数据中那些不变的内容,可以一次性封装到响应期待对象中。例如每次状态码是200,某一些Header字段等。直接来看代码

package demo;import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import static io.restassured.RestAssured.*;
import io.restassured.builder.ResponseSpecBuilder;
import io.restassured.specification.ResponseSpecification;
import static org.hamcrest.Matchers.*;public class ResponseSpecBuilderTest {ResponseSpecification responseSpc;@BeforeClasspublic void setup() {ResponseSpecBuilder builder = new ResponseSpecBuilder();builder.expectStatusCode(200);builder.expectHeader("Content-Type", "application/json; charset=utf-8");builder.expectHeader("Cache-Control", "public, max-age=14400");responseSpc = builder.build();}@Testpublic void test1( ) {when().get("http://jsonplaceholder.typicode.com/posts?userId=2").then().spec(responseSpc).time(lessThan(3000L));}}

这种响应期待一起封装的作用还是使用比较多。上面我写只写了一个测试用例,使用这种模式,写多个测试用例就可以看出好处多多。

 

3.日志打印

我们前面多次使用了在请求或者响应之后使用log().all(), 这个是打印全部信息,现在我们来细分学习下log()这个方法用法。

第一种,只打印header 或者只打印cookes 或者只打印body

        /*** 日志打印1*/@Testpublic void testLogOnly() {given().get("http://jsonplaceholder.typicode.com/photos/").then().//log().headers();//log().body();log().cookies();}

分别放开上面注释,一个一个分别测试下,打印日志和浏览器手动访问对比看看是不是一致。

第二种情况,只有发生错误情况下打印日志

        /*** 只有发生错误 情况下才打印日志*/@Testpublic void testLogOnlyError() {given().get("http://jsonplaceholder.typicode.com/phot/").then().log().ifError();}

我想这个方法好,特别是自动化测试报告中,并不想每个执行过程都打印日志,出错才打印日志。

第三张情况,只有满足一些特定条件才打印日志,下面模拟响应状态码等于200才打印日志。

        /*** 在特定条件下才打印日志*/@Testpublic void testLogUnderConditional() {given().get("http://jsonplaceholder.typicode.com/photos/").then().log().ifStatusCodeIsEqualTo(200);}

关于日志打印,这里我们来一个总结,如果是在写代码过程,我们建议使用log().all(), 全部打印出来,方便我们debug。如果是写好了接口用例,我们建议写只打印需要和必要的日志就行。例如遇到错误才打印等。

 

 

这篇关于RestAssured接口自动化从入门到框架搭建-15-RequestSpecBuilder和ResponseSpecBuilder和日志打印使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1050933

相关文章

使用Python构建一个Hexo博客发布工具

《使用Python构建一个Hexo博客发布工具》虽然Hexo的命令行工具非常强大,但对于日常的博客撰写和发布过程,我总觉得缺少一个直观的图形界面来简化操作,下面我们就来看看如何使用Python构建一个... 目录引言Hexo博客系统简介设计需求技术选择代码实现主框架界面设计核心功能实现1. 发布文章2. 加

python logging模块详解及其日志定时清理方式

《pythonlogging模块详解及其日志定时清理方式》:本文主要介绍pythonlogging模块详解及其日志定时清理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录python logging模块及日志定时清理1.创建logger对象2.logging.basicCo

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t

Python虚拟环境终极(含PyCharm的使用教程)

《Python虚拟环境终极(含PyCharm的使用教程)》:本文主要介绍Python虚拟环境终极(含PyCharm的使用教程),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录一、为什么需要虚拟环境?二、虚拟环境创建方式对比三、命令行创建虚拟环境(venv)3.1 基础命令3

Python Transformer 库安装配置及使用方法

《PythonTransformer库安装配置及使用方法》HuggingFaceTransformers是自然语言处理(NLP)领域最流行的开源库之一,支持基于Transformer架构的预训练模... 目录python 中的 Transformer 库及使用方法一、库的概述二、安装与配置三、基础使用:Pi

关于pandas的read_csv方法使用解读

《关于pandas的read_csv方法使用解读》:本文主要介绍关于pandas的read_csv方法使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录pandas的read_csv方法解读read_csv中的参数基本参数通用解析参数空值处理相关参数时间处理相关

使用Node.js制作图片上传服务的详细教程

《使用Node.js制作图片上传服务的详细教程》在现代Web应用开发中,图片上传是一项常见且重要的功能,借助Node.js强大的生态系统,我们可以轻松搭建高效的图片上传服务,本文将深入探讨如何使用No... 目录准备工作搭建 Express 服务器配置 multer 进行图片上传处理图片上传请求完整代码示例

SpringBoot条件注解核心作用与使用场景详解

《SpringBoot条件注解核心作用与使用场景详解》SpringBoot的条件注解为开发者提供了强大的动态配置能力,理解其原理和适用场景是构建灵活、可扩展应用的关键,本文将系统梳理所有常用的条件注... 目录引言一、条件注解的核心机制二、SpringBoot内置条件注解详解1、@ConditionalOn

Python中使用正则表达式精准匹配IP地址的案例

《Python中使用正则表达式精准匹配IP地址的案例》Python的正则表达式(re模块)是完成这个任务的利器,但你知道怎么写才能准确匹配各种合法的IP地址吗,今天我们就来详细探讨这个问题,感兴趣的朋... 目录为什么需要IP正则表达式?IP地址的基本结构基础正则表达式写法精确匹配0-255的数字验证IP地