1.简介

RestAssured是一个java接口自动化测试框架,可以发送POST,GET,PUT,DELETE,OPTIONS,PATCH和HEAD请求,并且可以用来验证和校对这些请求的响应信息。从名称上来看,它可以很好的支对restful风格的接口进行测试。

github地址:https://github.com/rest-assured/rest-assured

Rest Assured是在HTTP Builder(一个软件项目)基础上开发出的一个工具,这个工具能够采用
Java DSL(领域特定语言,例如groovy)进行基于REST风格的服务的测试,使得这种测试变得简单。
2 Rest Assured 支持POST, GET, PUT, DELETE, HEAD, PATCH and OPTIONS这几种类型的请求和响应的验证。没有TRACE类型哈。
1)支持JSON数据解析和验证
2)支持XML数据解析和验证
3)支持cookies添加
4)支持Header字段设置
5)支持Content Type设置
6)正文Body的设置
7)支持Cookies的设置
8)Status状态码相关设置
9)authentication认证设置

2.环境搭建及示例

创建一个maven项目,在pom.xml中加入以下依赖

<dependencies><dependency><groupId>org.apache.httpcomponents.client5</groupId><artifactId>httpclient5</artifactId><version>5.0.1</version></dependency><dependency><groupId>io.rest-assured</groupId><artifactId>rest-assured</artifactId><version>4.0.0</version><scope>test</scope></dependency><!-- use to parse json document --><!-- https://mvnrepository.com/artifact/io.rest-assured/json-path --><dependency><groupId>io.rest-assured</groupId><artifactId>json-path</artifactId><version>4.0.0</version></dependency><!-- https://mvnrepository.com/artifact/io.rest-assured/json-schema-validator --><!-- validate a json response conforms to a Json schema --><dependency><groupId>io.rest-assured</groupId><artifactId>json-schema-validator</artifactId><version>4.0.0</version></dependency><!-- https://mvnrepository.com/artifact/io.rest-assured/xml-path --><!-- use to parse xml document --><dependency><groupId>io.rest-assured</groupId><artifactId>xml-path</artifactId><version>4.0.0</version></dependency><!-- https://mvnrepository.com/artifact/org.testng/testng --><dependency><groupId>org.testng</groupId><artifactId>testng</artifactId><version>6.14.3</version><scope>test</scope></dependency><!-- https://mvnrepository.com/artifact/org.hamcrest/java-hamcrest --><!-- match rules in assertion --><dependency><groupId>org.hamcrest</groupId><artifactId>java-hamcrest</artifactId><version>2.0.0.0</version><scope>test</scope></dependency><dependency><groupId>org.testng</groupId><artifactId>testng</artifactId><version>6.14.3</version><scope>compile</scope></dependency><dependency><groupId>io.rest-assured</groupId><artifactId>rest-assured</artifactId><version>4.0.0</version><scope>compile</scope></dependency></dependencies>

简单例子

import org.testng.annotations.Test;import static io.restassured.RestAssured.*;
import static org.hamcrest.Matchers.containsString;/*** @description:* @author: ljx* @time: 2020/6/24 16:56*/
public class FirstRestAssured {@Testpublic void test() {//given()这是一个请求对象,get(url)这个是做GET类型请求的发送操作,then()这个是验证相关的对象,前面get()执行完了就能拿到response对// 象,然后response对象下有一些验证相关的类,then()就是验证类的一个方法//能够打印出响应中一切内容(响应头,cookie,body),而且是比较美观的格式打印,不管响应内容是json还是xml,还是html。String url = "https://www.baidu.com";given().get(url).then().statusCode(200).log().all();}}

上边的代码完成了请求百度,然后判断状态码并且打印响应信息的操作,可以看出来这种函数式编程十分的便捷,代码量少

given()这是一个请求对象,get(url)这个是做GET类型请求的发送操作,then()这个是验证相关的对象,前面get()执行完了就能拿到response对象,然后response对象下有一些验证相关的类,then()就是验证类的一个方法。

如果使用常规java编程如下:

        /*** Java原本风格的写法*/@Testpublic void testStatusCodeJavaStyle() {//1. 创建一个RestAssured对象RestAssured ra = new RestAssured();//2. 创建一个请求对象RequestSpecification rs = ra.given();//3. 发送请求,拿到响应对象Response res = rs.get("https://www.baidu.com");//4. 判断响应状态码是不是200assert res.getStatusCode() == 200;}

代码行数比较多。

3.功能详解

1.请求

请求方法之前的部分都是返回请求对象,可以通过param或params添加请求参数,header或headers添加请求头,log().all()打印请求信息

 //带参数请求given().param("userId", 2).when().get("http://jsonplaceholder.typicode.com/posts").then().statusCode(200).log().all();//带多个参数请求HashMap<String,String> param_map = new HashMap<>();param_map.put("userId","2");param_map.put("id","14");given().params(param_map).when().get("http://jsonplaceholder.typicode.com/posts").then().statusCode(200);//带请求头,when后返回对象是请求对象可以打印请求信息given().header("accept-encoding", "gzip,deflate").param("userId", 2).when().log().all().get("http://jsonplaceholder.typicode.com/posts").then().statusCode(200).log().all();Map<String, String> parameters = new HashMap<String, String>();parameters.put("userId", "2");parameters.put("id", "14");//构造一个Map对象,用来存多个参数和值Map<String, String> headers = new HashMap<String, String>();headers.put("accept-encoding", "gzip,deflate");headers.put("accept-language", "zh-CN");//同时添加header和param,and()可加可不加given().headers(headers).and().params(parameters).get("http://jsonplaceholder.typicode.com/posts").then().statusCode(200);

设置多种类型请求参数

 @Testpublic void testMulParams() {List<String> list = new ArrayList<String>();list.add("one");list.add("two");given().param("key1", "val1", "val2", "val3").param("B").param("C", list).when().get("https://xxxx/api/users").then().statusCode(400);}

设置请求contentType,设置请求cookie,设置全局的请求url和bathpath

@Testpublic void testSetContentType() {given().contentType(ContentType.JSON).contentType("applicatipn/json;charset=UTF-8").cookie("__utmt", "1").when().get("http://xxx/xxx").then().statusCode(404);//获取响应时间long t = given().get("http://jsonplaceholder.typicode.com/photos/").time();System.out.println(t);//包装请求参数RequestSpecBuilder builder = new RequestSpecBuilder();builder.addParam("userId", "2");builder.addHeader("Accept-Encoding", "gzip, deflate");RequestSpecification requestSpc = builder.build();given().spec(requestSpc).log().all().when().get("http://jsonplaceholder.typicode.com/posts").then().statusCode(200).log().cookies();//log()方法可以打印全部,部分,根据条件选择是否打印
//        basePath, baseURI和portRestAssured.baseURI = "http://jsonplaceholder.typicode.com";RestAssured.port = 80;RestAssured.basePath = "/posts";get("/1").then().statusCode(200);}
@Testpublic void testBasicChallengeAuthentication() {//请求接口前先进行账号验证given().auth().basic("tom", "123").when().get("https://www.xxx.com").then().statusCode(200);}

请求前进行验证或登录

2.响应

请求方法之后的就属于是响应对象

响应内容获取,包含状态码,打印响应内容,获取响应时间,获取响应头,响应类型,响应cookie等

@Testpublic void test_post() {//post请求given().param("name", "Anthony123").param("job", "tester").header("Content-Type", "text/html").when().post("https://reqres.in/api/users").then().contentType(ContentType.JSON);//响应内容格式转换,可以转换为字节数组,字符串,输入流等get("https://www.baidu.com").asByteArray();get("https://www.baidu.com").asString();get("https://www.baidu.com").asInputStream();//获取响应中的字段内容,以便拿到数据后做进一步操作String url = get("http://jsonplaceholder.typicode.com/photos/1").then().extract().path("url");//先获取响应,在进行操作Response res = get("http://jsonplaceholder.typicode.com/photos/1").then().extract().response();System.out.println(res.path("url"));System.out.println(res.getContentType());//获取headersSystem.out.println(res.getHeaders());Map<String, String> cookies_map = res.getCookies();}

响应内容格式转换,请求数据进行序列化,响应数据进行反序列化

 @Testpublic void testDeSerialization() {//        序列化就是把对象转换为字节流的过程,反过来,反序列化就是把字节流转换成对象的过程User u = new User();u.setAge(18);u.setWeight(75);u.setHome("China");UserResponse ur =given().body(u).//restassured内部自动进行序列化,将user对象转换成jsonwhen().post("http://www.thomas-bayer.com/restnames/countries.groovy").as(UserResponse.class);//将响应结果反序列化成java对象,不论响应格式时json还是xml// 断言ur.setRegId(1101); // 随意设置一个响应数据Assert.assertTrue(ur.getRegId() > 0);RestAssured.defaultParser = Parser.JSON;//指定全局的解析器位json//单独指定解析器given().get("http://www.thomas-bayer.com/sqlrest/CUSTOMER/02/").then().using().defaultParser(Parser.XML);}

3.结果断言

    @Testpublic void testJson() {//匹配json中一个字段的值given().get("http://jsonplaceholder.typicode.com/posts/3").then().body("id", equalTo(3));String titleString = "ea molestias quasi exercitationem repellat qui ipsa sit aut";//匹配json多个值given().get("http://jsonplaceholder.typicode.com/posts/3").then().body("id", equalTo(3), "title", equalTo(titleString));//匹配json中多个值得第二种写法使用and()given().get("http://jsonplaceholder.typicode.com/posts/3").then().body("id", equalTo(3)).and().body("title", equalTo(titleString));//部分匹配given().get("http://jsonplaceholder.typicode.com/posts/3").then().body("title", containsString("molestias quasi"));}

https://www.cnblogs.com/lwjnicole/category/1146558.html

RestAssured接口自动化框架学习相关推荐

  1. 转:Jenkins+Jmeter+ant接口自动化框架for Linux学习

    Jenkins+Jmeter+ant接口自动化框架for Linux学习 2018年06月08日 17:55:31 杀生丸的玲 阅读数:1031 版权声明: https://blog.csdn.net ...

  2. python api开发用什么框架_python+requests接口自动化框架

    为什么要做接口自动化框架 1.业务与配置的分离 2.数据与程序的分离:数据的变更不影响程序 3.有日志功能,实现无人值守 4.自动发送测试报告 5.不懂编程的测试人员也可以进行测试 正常接口测试的流程 ...

  3. 用python画风车_python接口自动化()一)(实现一款简单的接口自动化框架)

    python接口自动化一(设计一款自己的接口自动化框架) 一.起因: 前面学习过了python接口requests来进行接口测试,但是在框架选择上还是选择的unittest.当接口数量不怎么多时还好, ...

  4. pytest+yaml设计接口自动化框架过程记录(一步一步记录如何设计,完结撒花),源码提供,视频教程

    pytest+yaml设计接口自动化框架过程记录 第三代框架使用教程,该框架比现在这个完善了很多 框架简介 框架运行演示和功能介绍视频 pytest+yaml框架环境配置和使用教程 0.去年也写了一个 ...

  5. Java接口自动化测试框架学习

    Java接口自动化测试框架学习 高级软件测试,性能测试,功能测试,自动化测试,接口测试,移动端测试,手机测试,WEB测试,渗透测试,测试用例设计,黑盒测试,白盒测试,UFT高级测试,Android测试 ...

  6. 接口自动化 ------ 快速搭建接口自动化框架

    接口自动化框架要搭成什么,里面的内容究竟应该有多少? 这个问题没有标准答案,因为这要取决于你的项目,以及你想要用框架来解决什么问题等多种因素. 当然了,这里也就不展开讨论了,还是回到接口自动化这个点, ...

  7. APIJSON自动化框架学习指南

    APIJSON自动化框架学习指南 1.springboot2.0+集成 基本项目需要的包: <dependency><groupId>org.springframework.b ...

  8. 浅谈python+requests接口自动化框架

    为什么要做接口自动化框架 1.业务与配置的分离 2.数据与程序的分离:数据的变更不影响程序 3.有日志功能,实现无人值守 4.自动发送测试报告 5.不懂编程的测试人员也可以进行测试 正常接口测试的流程 ...

  9. Android接口和框架学习

    Android接口和框架学习 缩写: HAL:HardwareAbstraction Layer,硬件抽象层 CTS:CompatibilityTest Suite,兼容性测试套件 Android让你 ...

  10. pytest文档73-pytest+yaml实现接口自动化框架之用例参数关联

    前言 使用 yaml 文件写测试用例的时候,如何在 yaml 文件的测试用例里面实现参数关联? 这是很多做自动化测试的小伙伴经常思考的一个问题. 接着前面的pytest+yaml 文件实现接口自动化框 ...

最新文章

  1. 编写函数求两个整数 a 和 b 之间的较大值。要求不能使用if, while, switch, for, ?: 以 及任何的比较语句。...
  2. 【树的直径】解题报告: luogu P3629 [APIO2010]巡逻(树的直径,位运算成对变换,思维)
  3. Dependency injection in ASP.NET Core
  4. Eclipse 报 “Exception in thread main java.lang.OutOfMemoryError: Java heap space ”错误的解决办法...
  5. 静态资源Html基础语法
  6. 【剑指offer】_19 滑动窗口中的最大值
  7. 【分享】纯js的n级联动列表框 —— 基于jQuery,支持下拉列表框和列表框,最重要的是n级,当然还有更重要的...
  8. 目前最小的替换模板了,只有十几行代码
  9. PROSAIL模型前向模拟与植被参数遥感提取代码实践
  10. 如何选择物业管理软件,五大误区需要避免
  11. hexo WARN No layout: index.html
  12. 千锋深圳Java培训分享:MySQL详细知识点
  13. glTF格式模型导出方式
  14. PHP开发Android应用程序
  15. google的秘密入口
  16. 岁月温柔-9 妈妈吃人参果的后遗症
  17. Mysql的基本函数--与自定义函数
  18. android 经纬度工具类,工具类之LocationUtils(定位工具类)
  19. 《ucore lab1 练习5》实验报告
  20. Go全局唯一ID选型集合

热门文章

  1. SVN commit时,提示“remains in conflict”错误:
  2. 各大IT/IC公司offer比较
  3. C语言中getchar
  4. UEFI——PCD研究
  5. RRD原理(转载的)
  6. 微信公众号二维码在哪里看?如何查看自己的微信公众号二维码?
  7. thermal系列(7)-Thermal配置和调试
  8. github上12306抢票使用说明
  9. html中div hover的用法,CSS: hover选择器的使用详解
  10. 云服务器被攻击了怎么解决?恢复需要多久?