【问题标题】:How to parameterize Bearer token authorization in Jmeter如何在 Jmeter 中参数化承载令牌授权
【发布时间】:2017-01-26 05:25:31
【问题描述】:

我有一个用户登录和注销的 jmeter 登录脚本。下面附上详细的截图。

请求数据如下:

在响应日期,生成授权令牌:

同样的正则表达式如下:

我在 55/users 中将值作为参数传递:

当我运行脚本时它失败了:

这是响应数据:

【问题讨论】:

  • 错误消息表明服务器希望在 HEADER 中使用此令牌,而不是作为 URL 参数。这是您需要使用的解决方案:stackoverflow.com/questions/24542747/…
  • 我试过了,但是脚本还是不行
  • 发送承载作为 GET 的参数也不起作用。尝试使该脚本正常工作,或发布问题,详细说明其中不工作的地方

标签: jmeter


【解决方案1】:

使用 Header Manager 将 Token 作为 Header 传递,这样您就可以:

查看详情:

https://stackoverflow.com/a/43283700/460802

如果您想正确学习 jmeter,book 会帮助您。

【讨论】:

    【解决方案2】:

    更简单的 JMeter 设置(登录/获取):

    线程组

    • HTTP 请求,正文数据:{ "Login":"some", "Password":"credentials" }

      • HTTP 标头管理器:内容类型应用程序/json
      • JSON 提取器 - 创建变量的名称:令牌; JSON 路径表达式:tokenName(在我的例子中是根级别)
    • HTTP 请求

      • HTTP 标头管理器:内容类型 -> 应用程序/json;授权 -> 持有者 ${Token}
      • 响应断言:要测试的字段 = 响应代码;模式匹配规则=等于,不;测试 401 的模式
    • 查看结果树查看结果

    本地 IE Ajax 版本以防万一...

    <SCRIPT>
    var baseUri = 'https://localhost:port';
    var tokenUri = '/something';
    var getUri = '/restrictedData';
    var token;
    var form = { "Login":"some", "Password":"credentials" };
    postRequest(baseUri + tokenUri, form, gotToken)
    
    function gotToken(progress) {
        var response = progress.srcElement;
        if (response.status != 200) {
            document.body.innerText = "Error:\n" + response.response;
            return;
        }
        token = JSON.parse(response.response);
        console.log(JSON.stringify(token));
        var restricted = getRequest(baseUri + getUri, token.tokenName, gotRestricted);
    }
    function gotRestricted(progress) {
        var jsonStr = progress.srcElement.response;
        var jsonObj = JSON.parse(jsonStr);
        document.body.innerText = JSON.stringify(token,null,2) + '\n\n' + JSON.stringify(jsonObj,null,2);
    }
    function getRequest(url, token, callback) {
        var xhr = new XMLHttpRequest();
        xhr.onloadend = callback;
        xhr.open('GET', url);
        xhr.setRequestHeader('contentType', 'application/json')
        if (token) xhr.setRequestHeader("Authorization", "Bearer " + token);
        xhr.send();
        return xhr;
    }
    function postRequest(url, body, callback) {
        var xhr = new XMLHttpRequest();
        xhr.onloadend = callback;
        xhr.open('POST', url);
        xhr.setRequestHeader('Content-Type', 'application/json')
        xhr.send(JSON.stringify(body));
        return xhr;
    }
    </SCRIPT>
    

    【讨论】:

      【解决方案3】:

      在 HTTP 标头管理器中添加承载 ${token} 在 HTTP 请求失败时可用。

      【讨论】:

        【解决方案4】:

        从令牌 API 请求中提取令牌后,在 HTTP 授权标头管理器中使用此令牌用于后续 API。示例如下:

        Header Name: Header Value Authorization: Bearer ${generated_token}
        

        其中“generated_token”是一个包含提取令牌的变量。

        【讨论】:

          【解决方案5】:

          使用授权作为参数名称和值应该是 承载 ${variable_name}

          【讨论】:

            猜你喜欢
            • 2021-08-28
            • 2016-10-31
            • 2020-08-28
            • 2021-01-17
            • 2016-10-23
            • 2020-04-28
            • 2020-09-24
            • 1970-01-01
            • 2021-09-16
            相关资源
            最近更新 更多