Как смоделировать / скрипт для AD SSO Войти в инструмент k6 - PullRequest
1 голос
/ 10 июля 2019

Приложение использует SSO-вход для доступа.

Если SSO-вход не работает, браузер запрашивает учетные данные для входа в приложение.

Для нагрузочного тестирования такого приложения с помощью инструмента K6 я пытаюсь понять, как это может быть написано в сценарии для успешного входа в систему.

Я пытался передать учетные данные как часть URL-адреса, как показано в приведенном ниже коде, и пытался использовать аутентификацию NTLM.

Ниже приведен мой скрипт;

const username = "global\\user001", 
    password = "Password";

let pURL="abc.xyz.dev";

let req, res;
req = [{
 "method": "get",
 "url": `https://${username}:${password}@${pURL}/pqrs`,
 "params": {
  "headers": {
   "Host": ""+pURL+"",
   "Connection": "keep-alive",
   "Pragma": "no-cache",
   "Cache-Control": "no-cache",
   "Upgrade-Insecure-Requests": "1",
   "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36",
   "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
   "Accept-Encoding": "gzip, deflate, br",
   "Accept-Language": "en-GB,en-US;q=0.9,en;q=0.8"
  },
  "auth":"ntlm",
 }
}];
res = http.batch(req);

ОжидаемыйКод состояния HTTP для ответа - 301, но в настоящее время я получаю 401: Неаутентифицировано.

Однако, если URL в приведенном выше запросе изменяется на:

"url": `https://${username}:${password}@${pURL}/pqrs`,

Я получаю ошибку (ниже), поскольку он не может принять имя пользователя с другим доменом, упомянутым с ним.

ERRO[0002] GoError: parse https://global\user001:Password@abc.xyz.dev/pqrs: net/url: invalid userinfo

Что я делаю не так и как я могу это исправить?

1 Ответ

0 голосов
/ 10 июля 2019

У вас есть \ в вашем имени пользователя, поэтому вам нужно будет url кодировать его.Вы можете использовать encodeURI, как показано ниже:

import http from "k6/http";

const username = encodeURI("global\\user001"),
            password = "Password";
export default function() {

    let pURL="httpbin.org";

    let req, res;
    req = [{
         "method": "get",
         "url": `https://${username}:${password}@${pURL}/basic-auth/${username}/${password}`,
         "params": {
               "headers": {
                      "Host": ""+pURL+"",
                      "Connection": "keep-alive",
                      "Pragma": "no-cache",
                      "Cache-Control": "no-cache",
                      "Upgrade-Insecure-Requests": "1",
                      "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36",
                      "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
                      "Accept-Encoding": "gzip, deflate, br",
                      "Accept-Language": "en-GB,en-US;q=0.9,en;q=0.8"
                     },
               "auth":"ntlm",
              }
    }];
    res = http.batch(req);

    console.log(JSON.stringify(res[0].body));
}

...