Rest-assured框架详解

一、接口测试介绍

- 什么是接口测试

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

- 为什么做接口测试

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

- 接口自动化测试流程

  • 理解业务需求
  • 分析接口测试范围
  • 接口测试用例设计
  • 接口测试框架选择,常见的如 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 {
    @Test
    public 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 {
    @Test
    public 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 {
    @Test
    public 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 的某几行作为登录或注册的测试用例,将这些测试用例放在对应的测试方法中按顺序运行

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TestNG 是一种流行的测试框架,它提供了丰富的功能来进行单元测试、集成测试和端到端测试。TestNG 结合 TestAssured 可以进行接口自动化测试,以下是 TestNG TestAssured 接口自动化测试框架的优点: 1. 简单易用:TestNG TestAssured 框架易于学习和使用。TestNG 的注解可以方便地对测试用例进行分组、依赖、优先级等操作,而 TestAssured 提供了直观的 API,可以轻松地完成接口测试。 2. 支持多种验证方式:TestAssured 提供了多种验证方式,如 body、header、cookie、statusCode、responseTime 等,可以全面地验证接口的正确性。 3. 支持数据驱动:TestNG TestAssured 框架可以通过数据驱动的方式进行接口测试,可以通过 Excel、CSV、JSON 等数据源进行参数化测试,提高了测试效率和覆盖率。 4. 支持并发测试:TestNG TestAssured 框架支持并发测试,可以提高测试效率。可以通过 TestNG 的 parallel 属性来设置并发线程数,也可以通过 TestAssuredRestAssured.config() 方法来设置并发连接数。 5. 集成度高:TestNG TestAssured 框架可以与其他测试工具和框架集成,如 Maven、Jenkins、ExtentReports 等,可以方便地进行持续集成和测试报告生成。 总之,TestNG TestAssured 接口自动化测试框架具有易用性高、多种验证方式、数据驱动、并发测试、集成度高等优点,是进行接口自动化测试的不二选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值