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

参数化2

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

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)返回出来

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<>();
}

从登陆接口获取token

@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");
}

修改http请求代码

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;
}

修改旧注册http请求

传入默认头部信息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();
    }
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值