【问题标题】:Problem in JSR223 script JSR223 Sampler, while connecting to Azure Cosmos DB from Jmeter从 Jmeter 连接到 Azure Cosmos DB 时,JSR223 脚本 JSR223 Sampler 出现问题
【发布时间】:2020-07-27 06:09:12
【问题描述】:

我正在尝试通过从 azure 门户公开的其余 API 将我的 JMeter 结果推送到 Azure Cosmos DB。

为此,我使用 JSR223 采样器(作为我的预处理器)获取身份验证令牌以连接到 cosmos db,同时使用 stand 脚本生成 auth_token(参考:https://github.com/MicrosoftCSA/documentdb-postman-collection/issues)。

但我收到的是Problem in JSR223 script JSR223 Sampler, message: javax.script.ScriptException: ReferenceError: "request" is not defined

代码片段:

var mastKey = "master_key_for_cosmos_db";
log.info("mastKey = " + mastKey);

var today = new Date();
var UTCstring = today.toUTCString();
var url = "uri_key_for_cosmos_db"
var strippedurl = url.replace(new RegExp('^https?://[^/]+/'), '/');
log.info("stripped Url = " + strippedurl);

var strippedparts = strippedurl.split("/");
var truestrippedcount = (strippedparts.length - 1);
var resourceId = "";
var resType = "";
if (truestrippedcount % 2) {
    resType = strippedparts[truestrippedcount];
    if (truestrippedcount > 1) {
        var lastPart = strippedurl.lastIndexOf("/");
        resourceId = strippedurl.substring(1, lastPart);
    }
} else // its even (item request on resource)
{
    resType = strippedparts[truestrippedcount - 1];
    strippedurl = strippedurl.substring(1);
    resourceId = strippedurl;
}
var verb = request.method.toLowerCase();
var date = UTCstring.toLowerCase();
var key = CryptoJS.enc.Base64.parse(mastKey);
var text = (verb || "").toLowerCase() + "\n" +
    (resType || "").toLowerCase() + "\n" +
    (resourceId || "") + "\n" +
    (date || "").toLowerCase() + "\n" +
    "" + "\n";

var signature = CryptoJS.HmacSHA256(text, key);
var base64Bits = CryptoJS.enc.Base64.stringify(signature);
var MasterToken = "master";
var TokenVersion = "1.0";
auth = encodeURIComponent("type=" + MasterToken + "&ver=" + TokenVersion + "&sig=" + base64Bits);
vars.put("authToken", auth);

我做错了什么或错过了什么?

【问题讨论】:

  • 它在 JavaScript 中看起来有错误...并非特定于 CosmosDB
  • 什么是request.method,你没有定义request

标签: azure jmeter


【解决方案1】:

这个request对象belongs to Postman tool,你不能在你的JMeter脚本中使用它,因为它没有在那里定义。

您还需要导入这个CryptoJS,这可能不是小事。

此外recommended language for scripting in JMeter is Groovy

因此,与其尝试将某人的 Postman 代码复制并粘贴到 JMeter 中那样不起作用,我宁愿建议采用以下方向之一:

  1. 使用 Groovy 语言从 JSR223 测试元素中使用 Azure Cosmos DB Java SDK for SQL API
  2. 或者像 How to Handle Dynamic AWS SigV4 in JMeter for API Testing 文章中描述的那样在 Groovy 中复制 Postman 的 JavaScript

【讨论】:

    猜你喜欢
    • 2021-09-07
    • 1970-01-01
    • 2020-09-28
    • 1970-01-01
    • 2019-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-17
    相关资源
    最近更新 更多