Rest-assured框架官网
官网url: https://rest-assured.io/
一、接口测试介绍
- 什么是接口测试
本质上基于某种协议,发送请求给服务器,服务器返回响应数据,对响应数据进行分析,判断和我们的预期是否一致,从而验证功能是否正确。
- 为什么做接口测试
更早发现问题,降低研发成本
减少回归测试人力成本与时间,快速的质量反馈
更容易实现持续集成
-接口自动化测试流程
- 理解业务需求
- 分析接口测试范围
- 接口测试用例设计
- 接口测试框架选择,常见的如 RestAssured
- 接口测试用例编写
- 框架与用例维护
- 持续集成
二. REST-assured基本使用
REST-assured 是一种专为测试 REST API 而设计的测试框架。
1. pom.xml文件中 引入依赖
<dependency> <groupId>io.rest-assured</groupId> <artifactId>rest-assured</artifactId> <version>4.2.0</version> <scope>test</scope> </dependency>
2. 语法格式
given().XXXX
when().XXXX
then().XXXX
given:设置测试预设,包括请求头、请求参数、请求体、cookie等
when:所要执行的操作,即发起请求的网址(GET / POST 请求)
then:解析结果、断言
3.发送请求
httpbin 是一个测试 HTTP 请求的网址,向它传递什么参数,它就会返回什么参数。
根据 http://httpbin.org/get 或者 http://httpbin.org/post 区分是 get 还是 post 请求。
三.请求method传参方式
3.1 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表单参数
参数在url后面的样式:public class Test { @Testpublic void test() {given(). formParam("name", "jay").formParam("password", "qwerty").when().post("http://httpbin.org/post").then().log().body();} }
运行结果:
2.JSON参数类型
String jsonData = "{\"mobilephone\":\"13323234545\",\"password\":\"234545\"}"; given(). body(jsonData). contentType(ContentType.JSON). //使用body时必须指定类型 when().post("http://httpbin.org/post"). then().log().body();
3.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();
四. 获取api响应
通过 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”);
1) 提取JSON示例:
2) 提取HTML示例:
获取HTML响应时,通过 标签名.标签名 的方式获取标签中的值,通过 @属性名 的方式获取属性的值:
3) 提取xml与提取HTML使用方式几乎一致。
注意:
- 1. REST-assured 获取响应时如果返回的是 JSON 小数,那么对应的Java类型是float,但是为了解决丢失精度的问题,一般都会将其转换为BigDecimal。
- 2. 如果想要将返回结果转换成BigDecimal,需要添加配置,如下图:
- 3. 将浮点数转换成BigDecimal:
BigDecimal bigDecimal =BigDecimal.valueOf(3.14159);
全局配置:
使用了 baseURI 全局配置之后地址会自动的拼接:
- 4.一些基本的自动化过程:比如登录注册的测试用例写在了同一个 Excel 文件中,可以使用 @BeforeMethod 注解标记注册方法(先注册后登录),@Test 注解标记登录方法,定义两个 dataprovider 方法,分别读取 Excel 的某几行作为登录或注册的测试用例,将这些测试用例放在对应的测试方法中按顺序运行
原文链接:https://blog.csdn.net/wxsyj/article/details/127068752