在testng.xml
中增加parameter
可以赋值给DataProvider
<parameter name="sheetIndex" value="0"></parameter>
测试代码:
public class RegisterCase {
public int sheetIndex;
@BeforeClass
@Parameters({"sheetIndex"})
public void beforeClass(int sheetIndex) {
this.sheetIndex = sheetIndex;
}
@Test(dataProvider = "datas")
public void test(CaseInfo caseInfo) {
HttpUtils.call(caseInfo);
}
@DataProvider
public Object[] datas() {
List list = ExcelUtils.read(this.sheetIndex, 1, CaseInfo.class);
return list.toArray();
}
}
class中定义一个int对象sheetIndex
在BeforeClass
中拿到testng.xml
里面的Parameters
将它赋值给我们刚定义的int对象,然后在DataProvider
中使用即可。
修改的代码提交: https://github.com/zx490336534/auto_api/commit/ee6da5809c98396373ec29a8b6a3980bcde5d172
Cookie,有时也用其复数形式 Cookies。类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息。
存储在客户端(我们的电脑上)
打开浏览器,打开F12,进入Application
可以看到Cookies
Expires/Max-Age:存活时间
cookies
Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web页时,如果该用户还没有会话,则Web服务器将自动创建一个 Session对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在Session对象中。有关使用Session 对象的详细信息,请参阅“ASP应用程序”部分的“管理会话”。注意会话状态仅在支持cookie的浏览器中保留。
Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。
Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,这样的背景下,Token便应运而生。Token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。
鉴权1
鉴权2
将三个请求的方法最后的printResponse(response)
返回出来
return printResponse(response);
package com.zhongxin.utils;
import java.util.HashMap;
import java.util.Map;
public class UserData {
// 存储接口响应对象
public static Map<String, Object> VARS = new HashMap<>();
}
@Test(dataProvider = "datas")
public void test(CaseInfo caseInfo) {
String responseBody = HttpUtils.call(caseInfo);
Object token = JSONPath.read(responseBody, "$.data.token_info.token");
Object memberId = JSONPath.read(responseBody, "$.data.id");
if (token != null) {
UserData.VARS.put("${token}", token);
}
if (memberId != null) {
UserData.VARS.put("${member_id}", memberId);
}
}
// 存储默认请求头
public static Map<String, String> DEFAULT_HEADERS = new HashMap<>();
static {
// 静态代码:类在加载时会自动加载一次此代码
DEFAULT_HEADERS.put("X-Lemonban-Media-Type", "lemonban.v2");
DEFAULT_HEADERS.put("Content-Type", "application/json");
}
将headers
直接传入
public static String call(CaseInfo caseInfo, Map<String, String> headers) {
String responseBody = "";
try {
String params = caseInfo.getParams();
String url = caseInfo.getUrl();
String method = caseInfo.getMethod();
String contentType = caseInfo.getContentType();
if ("form".equals(contentType)) {
params = jsonStr2KeyValueStr(params);
headers.put("Content-Type", "application/x-www-form-urlencoded");
}
if ("post".equals(method)) {
responseBody = HttpUtils.post(url, params, headers);
} else if ("get".equals(method)) {
responseBody = HttpUtils.get(url, headers);
} else if ("patch".equals(method)) {
responseBody = HttpUtils.patch(url, params, headers);
}
} catch (Exception e) {
e.printStackTrace();
}
return responseBody;
}
传入默认头部信息UserData.DEFAULT_HEADERS
@Test(dataProvider = "datas")
public void test(CaseInfo caseInfo) {
HttpUtils.call(caseInfo, UserData.DEFAULT_HEADERS);
}
package com.zhongxin.cases;
import com.alibaba.fastjson.JSONPath;
import com.zhongxin.pojo.CaseInfo;
import com.zhongxin.utils.ExcelUtils;
import com.zhongxin.utils.HttpUtils;
import com.zhongxin.utils.UserData;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
import java.util.HashMap;
import java.util.List;
/**
* 充值接口测试
*/
public class RechargeCase {
public int sheetIndex;
@BeforeClass
@Parameters({"sheetIndex"})
public void beforeClass(int sheetIndex) {
this.sheetIndex = sheetIndex;
}
@Test(dataProvider = "datas")
public void test(CaseInfo caseInfo) {
Object token = UserData.VARS.get("${token}");
HashMap<String, String> headers = new HashMap<>();
headers.put("Authorization", "Bearer " + token);
headers.putAll(UserData.DEFAULT_HEADERS);
HttpUtils.call(caseInfo, headers);
}
@DataProvider
public Object[] datas() {
List list = ExcelUtils.read(this.sheetIndex, 1, CaseInfo.class);
return list.toArray();
}
}