首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java自动化测试(接口鉴权 16)

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

作者头像
zx钟
发布2020-08-11 11:36:18
7400
发布2020-08-11 11:36:18
举报
文章被收录于专栏:测试游记测试游记测试游记

参数化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();
    }
}
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试游记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 参数化2
  • cookies
  • Session
  • token
  • 接口文档鉴权部分
  • 修改代码
    • 定义一个存储的类
      • 从登陆接口获取token
        • 存储类中添加默认头
          • 修改http请求代码
            • 修改旧注册http请求
              • 充值接口实现
              相关产品与服务
              对象存储
              对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档