如何将REST Assured中提取Token的逻辑封装为可复用方法?
封装可复用的Token提取方法
方案一:基于已有FakeTokenVO封装
你已经有返回FakeTokenVO的方法,只需在其基础上逐层获取token字段即可。确保FakeTokenVO的结构与JSON响应层级对应(比如包含getCreateTokenResponse()、getCreateTokenSuccess()、getToken()方法):
public String getFakeToken() { String payload = "payloadthere"; // 调用原有逻辑获取VO对象 FakeTokenVO tokenVO = given(specBuilder.fakeTokenRequestSpecification()) .body(payload) .log().all() .when() .post(RestApiRoutes.FAKE_URI) .then() .log().all() .extract() .response() .as(FakeTokenVO.class); // 从VO中逐层提取token return tokenVO.getCreateTokenResponse().getCreateTokenSuccess().getToken(); }
方案二:直接提取Token字符串
如果不需要整个VO对象,可直接用Rest Assured的path()方法定位token,简化代码:
public String fetchFakeToken() { String payload = "payloadthere"; return given(specBuilder.fakeTokenRequestSpecification()) .body(payload) .log().all() .when() .post(RestApiRoutes.FAKE_URI) .then() .log().all() .extract() // 直接通过JSON路径提取token .path("createTokenResponse.createTokenSuccess.token"); }
优化:添加Token缓存(可选)
如果Token有效期较长,可加入缓存逻辑避免重复请求接口:
// 静态变量存储缓存的token private static String cachedToken; public String getCachedFakeToken() { // 判断token是否为空或过期,过期则重新获取 if (cachedToken == null || isTokenExpired(cachedToken)) { cachedToken = fetchFakeToken(); } return cachedToken; } // 需根据实际Token规则实现过期判断逻辑(示例) private boolean isTokenExpired(String token) { // 比如解析JWT Token的过期时间,可使用JJWT等库实现 return false; }
复用方式
将上述方法放在公共工具类(如TokenUtils)或测试基类中,其他类直接调用即可:
// 在其他测试类或业务类中使用 @Test public void testWithToken() { TokenUtils tokenUtils = new TokenUtils(); String token = tokenUtils.getFakeToken(); // 携带token发起后续请求 given() .header("Authorization", "Bearer " + token) .when() .get("/your/api/endpoint") .then() .statusCode(200); }
内容的提问来源于stack exchange,提问作者balusero
相关产品推荐
相关产品推荐

