You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Rest Assured中运行API自动化前置脚本?

在Rest Assured中实现前置脚本的几种方式

在Rest Assured里实现Postman那种前置脚本,本质就是在发送目标API请求前,先执行准备逻辑(比如获取token、设置公共参数、初始化环境等),下面是几种常用的实现方式:

1. 直接在测试方法内编写前置逻辑

如果只是单个测试需要简单的前置操作,直接在发送目标请求前写对应的代码就行,比如先调用登录接口拿token,再用这个token访问受保护的接口:

import io.restassured.RestAssured;
import io.restassured.response.Response;

public class SimplePreRequestTest {
    public static void main(String[] args) {
        // 前置脚本:调用登录接口获取token
        Response loginResp = RestAssured.given()
                .contentType("application/json")
                .body("{\"username\":\"test\",\"password\":\"123456\"}")
                .post("/api/login");
        String authToken = loginResp.jsonPath().getString("data.token");

        // 目标API请求:用拿到的token访问用户信息接口
        RestAssured.given()
                .header("Authorization", "Bearer " + authToken)
                .get("/api/user/profile")
                .then()
                .statusCode(200);
    }
}

2. 借助测试框架的前置注解

如果多个测试方法需要共享相同的前置逻辑(比如所有接口都需要token),可以用TestNG/JUnit的前置注解来统一执行:

TestNG示例(@BeforeMethod)

import io.restassured.RestAssured;
import io.restassured.response.Response;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

public class SharedPreRequestTest {
    private String authToken;

    // 每个@Test方法执行前都会先跑这个前置逻辑
    @BeforeMethod
    public void setupAuth() {
        Response loginResp = RestAssured.given()
                .contentType("application/json")
                .body("{\"username\":\"test\",\"password\":\"123456\"}")
                .post("/api/login");
        authToken = loginResp.jsonPath().getString("data.token");
    }

    @Test
    public void testGetUserProfile() {
        RestAssured.given()
                .header("Authorization", "Bearer " + authToken)
                .get("/api/user/profile")
                .then()
                .statusCode(200);
    }

    @Test
    public void testUpdateUserInfo() {
        RestAssured.given()
                .header("Authorization", "Bearer " + authToken)
                .contentType("application/json")
                .body("{\"nickname\":\"新昵称\"}")
                .put("/api/user/info")
                .then()
                .statusCode(200);
    }
}

3. 封装前置逻辑为工具类

把常用的前置操作(比如登录、生成签名、获取公共参数)封装成工具类的静态方法,方便在各个测试里复用:

工具类示例

import io.restassured.RestAssured;
import io.restassured.response.Response;

public class PreRequestTools {
    // 封装登录获取token的逻辑
    public static String getAuthToken() {
        Response loginResp = RestAssured.given()
                .contentType("application/json")
                .body("{\"username\":\"test\",\"password\":\"123456\"}")
                .post("/api/login");
        return loginResp.jsonPath().getString("data.token");
    }

    // 封装生成公共请求ID的逻辑
    public static String generateRequestId() {
        return String.valueOf(System.currentTimeMillis());
    }
}

测试中调用工具类

import io.restassured.RestAssured;
import static com.example.PreRequestTools.getAuthToken;
import static com.example.PreRequestTools.generateRequestId;

public class ToolBasedPreRequestTest {
    public static void main(String[] args) {
        String token = getAuthToken();
        String requestId = generateRequestId();

        RestAssured.given()
                .header("Authorization", "Bearer " + token)
                .header("X-Request-ID", requestId)
                .get("/api/protected-resource")
                .then()
                .statusCode(200);
    }
}

4. 使用Rest Assured过滤器做全局前置处理

如果需要对所有请求统一添加前置操作(比如统一加请求头、统一签名),可以自定义Filter,在请求发送前自动执行逻辑:

自定义过滤器示例

import io.restassured.filter.Filter;
import io.restassured.filter.FilterContext;
import io.restassured.response.Response;
import io.restassured.specification.FilterableRequestSpecification;
import io.restassured.specification.FilterableResponseSpecification;

public class GlobalPreRequestFilter implements Filter {
    @Override
    public Response filter(FilterableRequestSpecification requestSpec, FilterableResponseSpecification responseSpec, FilterContext ctx) {
        // 前置逻辑:给所有请求自动加X-Request-ID头
        requestSpec.header("X-Request-ID", String.valueOf(System.currentTimeMillis()));
        // 继续执行后续请求流程
        return ctx.next(requestSpec, responseSpec);
    }
}

在测试中使用过滤器

import io.restassured.RestAssured;

public class FilterBasedPreRequestTest {
    public static void main(String[] args) {
        RestAssured.given()
                .filter(new GlobalPreRequestFilter()) // 全局前置过滤器
                .get("/api/any-endpoint")
                .then()
                .statusCode(200);
    }
}

内容的提问来源于stack exchange,提问作者AKshay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 14:52:43