Rest-assured框架详解
REST-assured接口测试框架详解
- 一、接口测试介绍
- REST-assured基本使用
- 发送请求
- GET请求
- 3.2 POST请求
- 获取响应
一、接口测试介绍
- 什么是接口测试
本质上基于某种协议,发送请求给服务器,服务器返回响应数据,对响应数据进行分析,判断和我们的预期是否一致,从而验证功能是否正确。
- 为什么做接口测试
更早发现问题,降低研发成本
减少回归测试人力成本与时间,快速的质量反馈
更容易实现持续集成
- 接口自动化测试流程
- 理解业务需求
- 分析接口测试范围
- 接口测试用例设计
- 接口测试框架选择,常见的如 RestAssured
- 接口测试用例编写
- 框架与用例维护
- 持续集成
REST-assured基本使用
REST-assured 是一种专为测试 REST API 而设计的测试框架。
- 引入依赖
<dependency><groupId>io.rest-assured</groupId><artifactId>rest-assured</artifactId><version>4.2.0</version><scope>test</scope>
</dependency>
- 语法格式
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用来提取响应中的某一个具体的数据。
- 提取JSON:res.jsonPath().get(“XXX.XXX.XXX”);
- 提取xml:res.xmlPath().get(“XXX.XXX.XXX”);
- 提取HTML:res.htmlPath().get(“XXX.XXX.XXX”);
提取JSON示例:
提取HTML示例:
获取HTML响应时,通过 标签名.标签名 的方式获取标签中的值,通过 @属性名 的方式获取属性的值:
提取xml与提取HTML使用方式几乎一致。
注意:
- REST-assured 获取响应时如果返回的是 JSON
小数,那么对应的Java类型是float,但是为了解决丢失精度的问题,一般都会将其转换为BigDecimal。 - 如果想要将返回结果转换成BigDecimal,需要添加配置,如下图:
4. 将浮点数转换成BigDecimal:BigDecimal bigDecimal =
BigDecimal.valueOf(3.14159);
全局配置:
使用了 baseURI 全局配置之后地址会自动的拼接:
5.一些基本的自动化过程:比如登录注册的测试用例写在了同一个 Excel 文件中,可以使用 @BeforeMethod 注解标记注册方法(先注册后登录),@Test 注解标记登录方法,定义两个 dataprovider 方法,分别读取 Excel 的某几行作为登录或注册的测试用例,将这些测试用例放在对应的测试方法中按顺序运行
Rest-assured框架详解相关推荐
- jQuery Validate验证框架详解
2019独角兽企业重金招聘Python工程师标准>>> 一.导入js库 <script type="text/javascript" src="& ...
- shiro放行_Shiro框架详解 tagline
部分面试资料链接:https://pan.baidu.com/s/1qDb2YoCopCHoQXH15jiLhA 密码:jsam 想获得全部面试必看资料,关注公众号,大家可以在公众号后台回复" ...
- [Cocoa]深入浅出 Cocoa 之 Core Data(1)- 框架详解
深入浅出 Cocoa 之 Core Data(1)- 框架详解 罗朝辉(http://blog.csdn.net/kesalin) CC 许可,转载请注明出处 Core data 是 Cocoa 中处 ...
- WebDriver自动化测试框架详解
webDriver自动化测试框架详解 一. 简介 WebDriver API相对于Selenium Remote Control API来说,虽然同样是控制浏览器,但它的编程接口更加简洁 WebDri ...
- atitit.jQuery Validate验证框架详解与ati Validate 设计新特性
atitit.jQuery Validate验证框架详解与ati Validate 设计新特性 1. AtiValidate的目标1 2. 默的认校验规则1 2.1. 使用方式 1.metadata用 ...
- Android 动画框架详解,第 1 部分
2019独角兽企业重金招聘Python工程师标准>>> Android 平台提供了一套完整的动画框架,使得开发者可以用它来开发各种动画效果,本文将向读者阐述 Android 的动画框 ...
- springboot2整合mysql5_SpringBoot2整合SSM框架详解
SpringBoot2整合SSM框架详解 发布时间:2019-01-15 21:33, 浏览次数:1218 , 标签: SpringBoot SSM <>开发环境 * 开发工具:Eclip ...
- Django REST FRAMEWORK swagger(一)框架详解
Django REST FRAMEWORK swagger(一.框架详解) 一.Django REST SWAGGER框架图 具体见下图 二.说明 RESTFul说明 每一个URI代表一种资源: 客 ...
- 框架详解_Qt开发技术:QtCharts(一)QtCharts基本介绍以及图表框架详解
若该文为原创文章,未经允许不得转载 原博主博客地址:https://blog.csdn.net/qq21497936 原博主博客导航:https://blog.csdn.net/qq21497936/ ...
- iOS开发之Accounts框架详解
2019独角兽企业重金招聘Python工程师标准>>> iOS开发之Accounts框架详解 Accounts框架是iOS原生提供的一套账户管理框架,其支持Facebook,新浪微博 ...
最新文章
- [转载] 七龙珠第一部——第125话 神将登场
- 年过30 ,这10条人生建议句句肺腑
- LoadRunner 如何设置关联
- 一段三次分拆的蚂蚁搬家式MySQL迁移经历
- React-引领未来的用户界面开发框架-读书笔记(一)
- Chrome无法打开文件的错误 [Not allowed to load local resource: file://XXXX]
- Javascript this 的一些学习总结
- java4特征_java的四大基本特征
- 数据库系统概念第六版
- 窃取5亿雅虎用户信息的黑客 被判处5年有期徒刑
- 嵌入式系统三级考试终结版2019.3
- 中国银行软件中心信息技术岗(北京 )面试
- 国美易卡围绕数据云等科技,国美易卡解决问题
- 关于app的几个核心功能的设计想法
- 事件的三个阶段:捕获阶段 目标阶段 冒泡阶段
- 浏览器使用:chrome谷歌浏览器网页截图capture+火狐浏览器的历史在哪?
- 微信小程序 | 一文总结全部营销抽奖功能
- 金蝶生成凭证模板_金蝶凭证导入模板
- 微信群、朋友圈和订阅号的流量到底有什么差异?
- 自控重点整理1.1 比例微分PD控制器的作用
热门文章
- 大学计算机云计算与虚拟服务实验,虚拟化与云计算实验报告.doc.pdf
- [乡土民间故事_徐苟三传奇]第廿三回_吃蒸肉财主受捉弄
- mysql 综合练习
- FPI厂商SoleraNetworks被Blue Coat收购
- 机器人操作空间轨迹规划 -- 姿态规划
- js树形数据处理--树形数据转换,获取指定类型节点下的所有子节点或指定类型下的所有父节点
- 安防网络摄像机推送到RTMP流媒体服务器方案
- JSCORE06(达)
- base64字符串转换为图片
- VSCode 新版 HTML文件 英文感叹号 + Tab 没有出现模板 解决方法