Обработка подлинности Basi c в сценарии пользовательского интерфейса каратэ - PullRequest
2 голосов
/ 21 февраля 2020

Я только начал внедрять пользовательский интерфейс каратэ (v0.9.5). Уже реализовано API-тестирование с использованием каратэ, и оно отлично работает.

Следуя стратегии аутентификации HTTP basi c на этой странице - https://github.com/intuit/karate#http -basi c -authentication-example the Работа с basi c auth работает для API-тестов. Я устанавливаю заголовки HTTP один раз и запускаю все тесты API. Теперь для тестирования пользовательского интерфейса открываемый мной URL-адрес вызывает всплывающее окно с базовой аутентификацией c, как показано ниже:

enter image description here

Итак, я подумал что я мог бы использовать ту же стратегию, что я использовал для API-тестов, чтобы справиться с этим. В фоновом разделе моего файла объектов я вызываю файл объектов, который выполняет аутентификацию и устанавливает заголовки, как показано ниже:

Файл вызываемого объекта для установки заголовков (admin-headers.feature). Этот функциональный файл получает токен после того, как администратор выполнил вход через karate-config. js. Затем назначает токен вместе с base64-закодированным basei c auth заголовкам, вызывающим заголовки. js. Пользователь и пароль Base64 вводятся как аргументы maven и считываются через переменные karate-config.

(/ admin-headers.feature)

Feature: karate-config.js will perform one time login for admin and
  set the session token for all subsequent requests

  Background:
    * def session = adminAuthInfo.authSession
    * def basic_auth = call read('classpath:basic-auth.js') { username: '#(basicAuthUser)', password: '#(basicAuthPassword)' }
    * configure headers = read('classpath:headers.js')

  Scenario: One-time login for user and set the
    session token in request header

Код js для возврата Auth и готовить ie к вышеуказанному файлу функций (/headers.js).

function() {
    var session = karate.get('session');
    var basic_auth = karate.get('basic_auth');
    if(session){
        return {
            Authorization: basic_auth,
            Cookie: "SESSION=" + session
        };
    } else {
        return {};
    }
}

Мой файл тестовых возможностей пользовательского интерфейса (/ui-test.feature):

Feature: Login test

  Background:
    # Authorise via api
    * callonce read('classpath:common/headers/admin-headers.feature') 
    * configure driver = { type: 'chrome' }

  Scenario: Test login
    Given driver 'https://test.internal.mysite.com/names'

Запуск вышеуказанного файла функции по-прежнему показывает всплывающее окно аутентификации.

Затем я попытался установить файлы cookie во время инициализации драйвера (что я думаю, вероятно, не правильный путь?), Как показано ниже:

Feature: Login test

  Background:
    # Authorise via api
    * def login = callonce read('classpath:common/headers/admin-headers.feature')
    * def uiCookie = { name: 'SESSION', value: '#(login.userAuthInfo.authSession)', domain: 'test.internal.mysite.com' }
    * configure driver = { type: 'chrome', cookie: '#(uiCookie)' }

  Scenario: Test login
    Given driver 'https://test.internal.mysite.com/names'

Выше также не работает. Что я здесь не так делаю? всплывающее окно продолжает появляться, потому что повар ie не устанавливается, когда драйвер инициализируется, а затем открывает указанный URL-адрес?

Помощь очень ценится.

1 Ответ

1 голос
/ 21 февраля 2020

Я думаю, что вы подняли очень хороший запрос о функции, что configure driver должен также принимать куки, чтобы вы могли перейти на страницу и установить куки в один прием, и я открыл запрос функции: https://github.com/intuit/karate/issues/1053

Попробуйте эту последовательность, см. Документы для cookie(): https://github.com/intuit/karate/tree/master/karate-core#cookieset

* driver 'about:blank'
* cookie(uiCookie)
* driver 'https://test.internal.mysite.com/names'

И теперь это должно работать!

...