Java自动化测试(接口鉴权 16)

Java自动化测试(接口鉴权 16)

参数化2

testng.xml中增加parameter可以赋值给DataProvider

1
<parameter name="sheetIndex" value="0"></parameter>

测试代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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

cookies

Cookie,有时也用其复数形式 Cookies。类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息。

存储在客户端(我们的电脑上)

打开浏览器,打开F12,进入Application可以看到Cookies

Expires/Max-Age:存活时间

cookies

Session

Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web页时,如果该用户还没有会话,则Web服务器将自动创建一个 Session对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在Session对象中。有关使用Session 对象的详细信息,请参阅“ASP应用程序”部分的“管理会话”。注意会话状态仅在支持cookie的浏览器中保留。

token

Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。

Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,这样的背景下,Token便应运而生。Token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。

接口文档鉴权部分

鉴权1

鉴权2

修改代码

将三个请求的方法最后的printResponse(response)返回出来

1
return printResponse(response);

定义一个存储的类

1
2
3
4
5
6
7
8
9
package com.zhongxin.utils;

import java.util.HashMap;
import java.util.Map;

public class UserData {
// 存储接口响应对象
public static Map<String, Object> VARS = new HashMap<>();
}

从登陆接口获取token

1
2
3
4
5
6
7
8
9
10
11
12
@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);
}
}

存储类中添加默认头

1
2
3
4
5
6
7
8
// 存储默认请求头
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");
}

修改http请求代码

headers直接传入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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;
}

修改旧注册http请求

传入默认头部信息UserData.DEFAULT_HEADERS

1
2
3
4
@Test(dataProvider = "datas")
public void test(CaseInfo caseInfo) {
HttpUtils.call(caseInfo, UserData.DEFAULT_HEADERS);
}

充值接口实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
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();
}
}
 wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!
您的支持将鼓励我继续创作!