一、 接口授权,鉴权相关概念
- 什么是授权,什么是鉴权
授权: 相当于给一个通行证,由服务器下发
鉴权: 鉴定是否有权限访问(判断有没有通行证)
- 目前最常用三种认证机制
1) Cookies
2) Session
3) token
二、 实例说明: - 接口文档说明
2 实现思路:
i) 登录接口:成功登录后获取响应体中的token信息
ii ) 其他接口(请求头Authorization 需要token信息),需要将token信息拼接进请求头中
- 代码实现示例
1) 登录接口: 请求发送,提取token信息:
public class RLoginTest extends BaseCase {
public static String apiNo="2";
public static int caseSheetNum=2;
public static boolean isNeedToken = false;
/**
* 注册用例测试方法
* @param url 接口请求地址
* @param method 接口请求方法
* @param params 接口请求传参
* @param Type 接口请求类型
* @param title 用例说明
*/
@Test(dataProvider="casesExcel")
public void test_login(API api,Case c ) {
// 1. 参数化替换
// 2. 数据库前置查询结果
// 3. 调用接口
setDefaultHeaders(isNeedToken);
String body = HttpUtils.request(api.getUrl(),api.getMethod(),api.getContentType(),c.getParams(),headers);
int case_row = Integer.parseInt(c.getId().split("_")[1]);;
addWriteBackData(caseSheetNum, case_row,Constants.ACTUAL_RESPONSE_COLUMNNUM,body);
// 3.1 从body里面提取token
int code = (int) JSONPath.read(body, "$.code");
String msg = (String) JSONPath.read(body, "$.msg");
// if (code==0 && msg=="OK") {
// 登录成功,提取内容并存储
setVariableToEnv(body,"$.data.token_info.token","${token}");
setVariableToEnv(body,"$.data.token_info.token_type","${token_type}");
setVariableToEnv(body,"$.data.id","${member_id}");
}
/**
* 从Excel中读取用例数据
* @return 用例数据,类型,二维数组
*/
@DataProvider
public Object[][] casesExcel(){
Object[][] cases = ExcelUtils.getAPIAndCaseByApiId(apiNo,caseSheetNum);
return cases;
}
@BeforeClass
public void init_class(){
ExcelUtils.cases = ExcelUtils.read(caseSheetNum,1,Case.class);
}
@AfterClass
public void clear_class(){
ExcelUtils.cases=null;
}
}
2) 其他接口拼接token信息
i ) 其他接口请求代码
public class SRechargeTest extends BaseCase {
public static String apiNo="3";
public static int caseSheetNum=3;
public static boolean isNeedToken = true;
/**
* 充值用例测试方法
* @param url 接口请求地址
* @param method 接口请求方法
* @param params 接口请求传参
* @param Type 接口请求类型
* @param title 用例说明
*/
@Test(dataProvider="casesExcel")
public void test_recharge(API api,Case c ) {
// 1. 参数化替换
// 2. 数据库前置查询结果
// 3. 调用接口
// 环境变量中存在token与token_type,那么就获取并设置键
setDefaultHeaders(isNeedToken);
String body = HttpUtils.request(api.getUrl(),api.getMethod(),api.getContentType(),c.getParams(),headers);
int case_row = Integer.parseInt(c.getId().split("_")[1]);;
addWriteBackData(caseSheetNum, case_row,Constants.ACTUAL_RESPONSE_COLUMNNUM,body);
}
/**
* 从Excel中读取用例数据
* @return 用例数据,类型,二维数组
*/
@DataProvider
public Object[][] casesExcel(){
Object[][] cases = ExcelUtils.getAPIAndCaseByApiId(apiNo,caseSheetNum);
return cases;
}
@BeforeClass
public void init_class(){
ExcelUtils.cases = ExcelUtils.read(caseSheetNum,1,Case.class);
}
@AfterClass
public void clear_class(){
ExcelUtils.cases=null;
}
}
2) 请求头拼接
结果: