REST-assured接口测试框架详解

  • 一、接口测试介绍
    • REST-assured基本使用
    • 发送请求
    • GET请求
    • 3.2 POST请求
    • 获取响应

一、接口测试介绍

- 什么是接口测试

本质上基于某种协议,发送请求给服务器,服务器返回响应数据,对响应数据进行分析,判断和我们的预期是否一致,从而验证功能是否正确。

- 为什么做接口测试

更早发现问题,降低研发成本
减少回归测试人力成本与时间,快速的质量反馈
更容易实现持续集成

- 接口自动化测试流程

  • 理解业务需求
  • 分析接口测试范围
  • 接口测试用例设计
  • 接口测试框架选择,常见的如 RestAssured
  • 接口测试用例编写
  • 框架与用例维护
  • 持续集成

REST-assured基本使用

REST-assured 是一种专为测试 REST API 而设计的测试框架。

  1. 引入依赖
<dependency><groupId>io.rest-assured</groupId><artifactId>rest-assured</artifactId><version>4.2.0</version><scope>test</scope>
</dependency>
  1. 语法格式
given().XXXX
when().XXXX
then().XXXX
  • given:设置测试预设,包括请求头、请求参数、请求体、cookie等
  • when:所要执行的操作,即发起请求的网址(GET / POST 请求)
  • then:解析结果、断言

发送请求

httpbin 是一个测试 HTTP 请求的网址,向它传递什么参数,它就会返回什么参数。

根据 http://httpbin.org/get 或者 http://httpbin.org/post 区分是 get 还是 post 请求。

GET请求

方式一:直接在在URL地址后面拼接参数

import org.testng.annotations.Test;
import static io.restassured.RestAssured.*;public class Test {@Testpublic void test() {given().when().get("http://httpbin.org/get?name=jay").then().log().body(); //返回响应体中的数据//log可以向控制台输出返回的信息//log().all() 可以返回所有响应中的数据}
}

运行结果:

方式二:通过 queryParam 方法添加参数

import org.testng.annotations.Test;
import static io.restassured.RestAssured.*;public class Test {@Testpublic void test() {given().queryParam("name", "jay").queryParam("age", "22").when().get("http://httpbin.org/get").then().log().body();}
}

运行结果:

3.2 POST请求

1. form表单参数类型

public class Test {@Testpublic void test() {given().formParam("name", "jay").formParam("password", "qwerty").when().post("http://httpbin.org/post").then().log().body();}
}

运行结果:


JSON参数类型

String jsonData = "{\"mobilephone\":\"13323234545\",\"password\":\"234545\"}";
given().body(jsonData).contentType(ContentType.JSON). //使用body时必须指定类型
when().post("http://httpbin.org/post").
then().log().body();

xml参数类型

String xmlStr = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +"<suite>\n" +" <class>测试xml</class>\n" +"</suite>";given().contentType(ContentType.XML).body(xmlStr).
when().post("http://www.httpbin.org/post").
then().log().body();

4. 上传文件
REST-assured 提供了一个叫做 multiPart() 的方法可以指定文件(file)、字节数组(byte-array)、输入流或者是上传文件:

given().multiPart(new File("D:\\match.png")).
when().post("http://httpbin.org/post").
then().log().body();

获取响应

通过 extract().response() 将响应结果赋值到一个 Response 类型的变量中。

Response res=given().contentType(ContentType.JSON).body(jsonData).//headers(Map map),将JSON格式的多个header,通过fastjson转换成map:Map result = (Map) JSON.parse(JSON_String);when().post("http://httpbin.org/post").then().extract().response();//获取接口的响应时间(ms)
System.out.println(res.time());
//获取响应头信息
System.out.println(res.getHeader("Content-Type"));
//获取响应体信息(Json格式)
System.out.println(res.jsonPath().get("lotto.lottoId"));

Gpath的使用:

Gpath用来提取响应中的某一个具体的数据。

  1. 提取JSON:res.jsonPath().get(“XXX.XXX.XXX”);
  2. 提取xml:res.xmlPath().get(“XXX.XXX.XXX”);
  3. 提取HTML:res.htmlPath().get(“XXX.XXX.XXX”);

提取JSON示例:


提取HTML示例:

获取HTML响应时,通过 标签名.标签名 的方式获取标签中的值,通过 @属性名 的方式获取属性的值:


提取xml与提取HTML使用方式几乎一致。

注意:

  1. REST-assured 获取响应时如果返回的是 JSON
    小数,那么对应的Java类型是float,但是为了解决丢失精度的问题,一般都会将其转换为BigDecimal。
  2. 如果想要将返回结果转换成BigDecimal,需要添加配置,如下图:


4. 将浮点数转换成BigDecimal:BigDecimal bigDecimal =
BigDecimal.valueOf(3.14159);

全局配置:


使用了 baseURI 全局配置之后地址会自动的拼接:

5.一些基本的自动化过程:比如登录注册的测试用例写在了同一个 Excel 文件中,可以使用 @BeforeMethod 注解标记注册方法(先注册后登录),@Test 注解标记登录方法,定义两个 dataprovider 方法,分别读取 Excel 的某几行作为登录或注册的测试用例,将这些测试用例放在对应的测试方法中按顺序运行

Rest-assured框架详解相关推荐

  1. jQuery Validate验证框架详解

    2019独角兽企业重金招聘Python工程师标准>>> 一.导入js库 <script type="text/javascript" src="& ...

  2. shiro放行_Shiro框架详解 tagline

    部分面试资料链接:https://pan.baidu.com/s/1qDb2YoCopCHoQXH15jiLhA 密码:jsam 想获得全部面试必看资料,关注公众号,大家可以在公众号后台回复" ...

  3. [Cocoa]深入浅出 Cocoa 之 Core Data(1)- 框架详解

    深入浅出 Cocoa 之 Core Data(1)- 框架详解 罗朝辉(http://blog.csdn.net/kesalin) CC 许可,转载请注明出处 Core data 是 Cocoa 中处 ...

  4. WebDriver自动化测试框架详解

    webDriver自动化测试框架详解 一. 简介 WebDriver API相对于Selenium Remote Control API来说,虽然同样是控制浏览器,但它的编程接口更加简洁 WebDri ...

  5. atitit.jQuery Validate验证框架详解与ati Validate 设计新特性

    atitit.jQuery Validate验证框架详解与ati Validate 设计新特性 1. AtiValidate的目标1 2. 默的认校验规则1 2.1. 使用方式 1.metadata用 ...

  6. Android 动画框架详解,第 1 部分

    2019独角兽企业重金招聘Python工程师标准>>> Android 平台提供了一套完整的动画框架,使得开发者可以用它来开发各种动画效果,本文将向读者阐述 Android 的动画框 ...

  7. springboot2整合mysql5_SpringBoot2整合SSM框架详解

    SpringBoot2整合SSM框架详解 发布时间:2019-01-15 21:33, 浏览次数:1218 , 标签: SpringBoot SSM <>开发环境 * 开发工具:Eclip ...

  8. Django REST FRAMEWORK swagger(一)框架详解

    Django REST FRAMEWORK swagger(一.框架详解) 一.Django REST  SWAGGER框架图 具体见下图 二.说明 RESTFul说明 每一个URI代表一种资源: 客 ...

  9. 框架详解_Qt开发技术:QtCharts(一)QtCharts基本介绍以及图表框架详解

    若该文为原创文章,未经允许不得转载 原博主博客地址:https://blog.csdn.net/qq21497936 原博主博客导航:https://blog.csdn.net/qq21497936/ ...

  10. iOS开发之Accounts框架详解

    2019独角兽企业重金招聘Python工程师标准>>> iOS开发之Accounts框架详解 Accounts框架是iOS原生提供的一套账户管理框架,其支持Facebook,新浪微博 ...

最新文章

  1. [转载] 七龙珠第一部——第125话 神将登场
  2. 年过30 ,这10条人生建议句句肺腑
  3. LoadRunner 如何设置关联
  4. 一段三次分拆的蚂蚁搬家式MySQL迁移经历
  5. React-引领未来的用户界面开发框架-读书笔记(一)
  6. Chrome无法打开文件的错误 [Not allowed to load local resource: file://XXXX]
  7. Javascript this 的一些学习总结
  8. java4特征_java的四大基本特征
  9. 数据库系统概念第六版
  10. 窃取5亿雅虎用户信息的黑客 被判处5年有期徒刑
  11. 嵌入式系统三级考试终结版2019.3
  12. 中国银行软件中心信息技术岗(北京 )面试
  13. 国美易卡围绕数据云等科技,国美易卡解决问题
  14. 关于app的几个核心功能的设计想法
  15. 事件的三个阶段:捕获阶段 目标阶段 冒泡阶段
  16. 浏览器使用:chrome谷歌浏览器网页截图capture+火狐浏览器的历史在哪?
  17. 微信小程序 | 一文总结全部营销抽奖功能
  18. 金蝶生成凭证模板_金蝶凭证导入模板
  19. 微信群、朋友圈和订阅号的流量到底有什么差异?
  20. 自控重点整理1.1 比例微分PD控制器的作用

热门文章

  1. 大学计算机云计算与虚拟服务实验,虚拟化与云计算实验报告.doc.pdf
  2. [乡土民间故事_徐苟三传奇]第廿三回_吃蒸肉财主受捉弄
  3. mysql 综合练习
  4. FPI厂商SoleraNetworks被Blue Coat收购
  5. 机器人操作空间轨迹规划 -- 姿态规划
  6. js树形数据处理--树形数据转换,获取指定类型节点下的所有子节点或指定类型下的所有父节点
  7. 安防网络摄像机推送到RTMP流媒体服务器方案
  8. JSCORE06(达)
  9. base64字符串转换为图片
  10. VSCode 新版 HTML文件 英文感叹号 + Tab 没有出现模板 解决方法