REST-Assured,接口自动化的 “瑞士军刀“- 初识篇
REST-Assured 简介
REST-Assured 是一套基于 Java 语言实现的开源 REST API 测试框架,由作者 Johan Haleby 开发并维护,目前该项目在 GitHub 上已收获 4.9K star
从官方描述可以看到 REST-Assured 使得通过 Java 语言测试 REST API 变得更加简单和容易
REST-Assured 除了语法简洁之外,强大的解析功能(支持 XML,JSON)也是其成为如今企业首选的接口自动化框架原因之一。
REST-Assured 初体验
Step 1)安装 JDK
Step 2)安装 IDE,推荐 Intellij IDEA
Step 3)安装 Maven,设置 Maven 镜像
引入 REST-Assured 依赖
1.创建 Maven 工程
2.POM.xml 添加 REST-Assured 依赖坐标
<dependency><groupId>io.rest-assured</groupId><artifactId>rest-assured</artifactId><version>4.3.0</version><scope>test</scope>
</dependency>
3.创建 Java Class,静态导入 REST-Assured 类路径(官方推荐使用,编写脚本时更加有效率)
import static io.restassured.RestAssured.*;
4.第一个 get 请求
given().
when().get("http://httpbin.org/get?phone=13323234545&password=123456").
then().log().body();
类似于行为驱动开发(Behaviour Driven Development-BDD)中的定义的结构 Given-When-Then,Given:在某场景下,When:发生什么事件,Then:产生了什么结果。而 REST-Assured 借鉴了这一套描述可以使得语法更加简洁:
given 设置测试预设(包括请求头、请求参数、请求体、cookies 等等)
when 所要执行的操作(GET/POST 请求)
then 解析结果、断言
所以我们很容易想到这条 case 的作用:发送 get 请求,log()表示输出响应结果信息,body()输出响应体内容。
如果要输出响应的所有信息,使用 log().all()即可。
param 参数设置
我们会注意到上面这条 case 参数和 URL 是拼接在一起的,REST-Assured 可以让每部分(URL,参数,请求头)分开来,确保我们的代码有更好的可读性,在 given 中配置 queryParam 查询参数:
given().queryParam("mobilephone","1224653738").queryParam("password","123456").
when().get("http://httpbin.org/get").
then().log().body();
而且我们还能采用更加智能的方式:given 中指定 param,此时 REST-Assured 将会自动根据 Http 方法决定参数类型(GET 方法将会自动使用查询参数,POST 方法将会自动使用表单参数)
//GET方法将会自动使用查询参数
given().param("mobilephone","1224653735").param("password","123456").
when().get("http://httpbin.org/get").
then().log().body();
//POST方法将会自动使用表单参数
given().param("mobilephone","1224653735").param("password","123456").
when().post("http://httpbin.org/post").
then().log().body();
Cookies 设置
如果想要在请求中携带 Cookies 信息,REST-Assured 给我们提供了非常方便的方式:
given().cookie("cookieName","cookieValue").
when().post("http://httpbin.org/post").
then().log().body();
或者是指定多对 cookie:
given().cookie("cookieName","cookieValue1","cookieValue2").
when().post("http://httpbin.org/post").
then().log().body();
Header 设置
given().header("headerName","value").
when().post("http://httpbin.org/post").
then().log().body();
如果对软件测试、接口、自动化、性能测试、测试开发、面试经验交流。感兴趣可以810119819,群内会有不定期的发放免费的资料链接,这些资料都是从各个技术网站搜集、整理出来的,如果你有好的学习资料可以私聊发我,我会注明出处之后分享给大家。
Content Type 设置
given().contentType("application/json").//或者指定下面的形式//contentType(ContentType.JSON).
when().post("http://httpbin.org/post").
then().log().body();
Request Body 设置
given().body("{\"mobilephone\":\"13323234545\",\"password\":\"123456\"}").
when().post("http://httpbin.org/post").
then().log().body();
REST-Assured 还支持可以将 Java 对象序列化为 JSON 或者 XML,比如:
1 ) 通过 contentType 指定为 JSON,将 HashMap 序列化为 JSON
HashMap<String,String> hashMap= new HashMap<String,String>();
hashMap.put("firstName","jack");
hashMap.put("lastName","tom");
given().contentType(ContentType.JSON).body(hashMap).
when().post("http://httpbin.org/post").
then().log().body();
2 )通过 contentType 指定为 JSON,将 Message 对象序列化为 JSON
Message.java
public class Message {private String message;public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}
}
Message message = new Message();
message.setMessage("tester");
given().contentType(ContentType.JSON).body(message).
when().post("http://httpbin.org/post").
then().log().body();
3 ) 通过 contentType 指定为 XML,将 Message 对象序列化为 XML
在类前面加注解 XmlRootElement:
@XmlRootElement
public class Message {}
Message message = new Message();
message.setMessage("tester");
given().contentType(ContentType.JSON).body(message).
when().post("http://httpbin.org/post").
then().log().body();
校验响应数据
支持校验状态码, cookies, 响应头, content type 和响应体
given().
when().post("http://httpbin.org/post").
then().assertThat().statusCode(200);//assertThat().cookie("cookieName","cookieValue");//assertThat().header("headName","headerValue");//assertThat().contentType(ContentType.JSON);//assertThat().body(equalTo("something"));
//equalTo是hamcrest所带断言,hamcrest有提供非常丰富的断言方式
本文带着大家了解 REST-Assured 的基本结构和语法,当然,REST-Assured 的功能远不止这些,比如其内置的 JsonPath 解析和 XmlPath 解析以及 hamcrest 断言都是十分强大的功能,后续再给大家详细介绍。
如果对软件测试、接口、自动化、性能测试、测试开发、面试经验交流。感兴趣可以810119819,群内会有不定期的发放免费的资料链接,这些资料都是从各个技术网站搜集、整理出来的,如果你有好的学习资料可以私聊发我,我会注明出处之后分享给大家。
REST-Assured,接口自动化的 “瑞士军刀“- 初识篇相关推荐
- REST-Assured,接口自动化的 “瑞士军刀“- 断言篇
Hamcrest 是一款用于编写匹配器对象的框架,可以组合创建灵活的匹配器进行断言. 官方网址:http://hamcrest.org/ 可以支持 Java.Python.Ruby.Objective ...
- python 封装_python接口自动化学习笔记(封装方法用于读取excel)
本文是为难得干货文章 (是位大佬所写哦) 大家好,我是测试君. 下面分享一波Python接口自动化文章: 本篇是使用xlrd实现的对excel的数据进行读取,xlrd网上demo很多,不做过多叙述,下 ...
- pytest文档73-pytest+yaml实现接口自动化框架之用例参数关联
前言 使用 yaml 文件写测试用例的时候,如何在 yaml 文件的测试用例里面实现参数关联? 这是很多做自动化测试的小伙伴经常思考的一个问题. 接着前面的pytest+yaml 文件实现接口自动化框 ...
- java接口自动化测试的搭建_java接口自动化(一) - 接口自动化测试整体认知 - 开山篇(超详解)...
简介 了解什么是接口和为什么要做接口测试.并且知道接口自动化测试应该学习哪些技术以及接口自动化测试的落地过程.其实这些基本上在python接口自动化的文章中已经详细的介绍过了,不清楚的可以过去看看.了 ...
- java接口自动化(一) - 接口自动化测试整体认知 - 开山篇(超详解)
简介 了解什么是接口和为什么要做接口测试.并且知道接口自动化测试应该学习哪些技术以及接口自动化测试的落地过程.其实这些基本上在python接口自动化的文章中已经详细的介绍过了,不清楚的可以过去看看.了 ...
- 超详细 | 接口自动化测试总结与分享入门篇
这篇文章,就说说功能测试到接口自动化的进阶,以及接口自动化的一些事~ 前言 自动化测试,算是近几年比较火热的一个话题,当然,更是软件测试未来的一个发展趋势.未来,功能测试等非核心的测试工作,都将被外包 ...
- 接口测试—-工具篇,实现接口自动化
接口测试--工具篇,实现接口自动化 今天来看下接口测试的两个工具方式,目前主流的做法有两种方式--基于代码框架的用例编写和直接使用接口测试工具,那么本篇就这两种方式都来实现一下,为了说明情况,我们实现 ...
- 接口自动化-第二篇(python+requests)
接口自动化一个很重要的库 requests,它是用来发送http协议请求和接受http协议响应的第三方库. 1.安装requests pip install requests 2. 了解request ...
- 接口自动化-第一篇(Python+pytest+allure)
想写很久,一直懒得动笔,且边学边写吧... 目录 1.了解pytest框架 2.安装pytest,以及相关插件 2.1安装pytest 2.2安装插件 1.使用虚拟环境(也是针对此项目,局部安装)安装 ...
最新文章
- Datawhale团队第六期录取名单!
- H264 RTP头分析
- 机器学习笔记(四)——最大似然估计
- layui tab html,layui竖版tab选项卡
- 几个实用PPT排版技巧,让幻灯片不在枯燥
- 基于Office的开发-VBA
- 接入网、承载网、核心网是什么,交换机路由器是什么、这个和网络的协议有什么关系呢?
- 带你认识SSD的SATA、mSATA 、PCIe和M.2四种主流接口。联想g31t-lm2主板接线图
- java课程设计模板_《JAVA课程设计模板.doc
- 品达通用权限系统(Day 1~Day 2)
- 101. Symmetric Tree (C语言)
- Android studio 配置 jPBC 2.0.0
- linux替换变量字符串,linux shell 替换字符串的几种方法,变量替换${},sed,awk
- Android Scroller
- 消除Mac Word文档生成目录中的灰色底纹
- Java实现注册邮箱激活验证
- 紫书《算法竞赛入门经典》
- 数据挖掘与python实践心得体会_2年数据挖掘服务工作心得体会
- Android TTS语音播报
- python怎么做网站6_网站开发学习Python实现-Django学习-自学注意(6.1.3)