Как пройти аутентификацию для всех тестов с использованием TestCafe

Я знаю, что эта тема обсуждается довольно мало, но у меня уникальная ситуация.

Чтобы протестировать нашу среду принятия, нам нужно нажать https://authentication-example.com/, которая запускает сценарий для добавления файла cookie сеанса, таким образом, аутентифицируя нас. Затем мы переходим на https://acceptance-site.com/ для запуска тестов.

После попытки многих вариантов самое близкое к решению, которое я могу найти, - это использовать роль, такую ​​как

const a3 = Role('https://acceptance-site.com', async testController => {
    await testController.navigateTo('https://authentication-example.com');
    await testController.navigateTo('https://acceptance-site.com');
}, { preserveUrl: true });

fixture('Testing acceptance')
    .beforeEach(async testController => {
        await testController.useRole(authenticate);
});

test('example1', async testController => {
    await testController.debug();
}).disablePageReloads;

test('example2', async testController => {
    await testController.debug();
}).disablePageReloads;

test('example3', async testController => {
    await testController.debug();
}).disablePageReloads;

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

Если я удалю {preserveUrl: true} из роли, example2 и example3 загрузят пустые страницы. Если я удаляю.disablePageReloads из тестов, аутентификация завершается неудачно для второго и третьего тестов, и я получаю сообщение об ошибке "Не удалось найти DNS-запись для ресурса в...". Также если у меня есть роль как

const a3 = Role('https://authentication-example.com', async testController => {
    await testController.navigateTo('https://acceptance-site.com');
}, { preserveUrl: true });

проверка подлинности не пройдена для всех тестов.

Я заметил, что при успешной работе файл cookie, который я должен получить, на самом деле сохраняется в сеансе в приложении во время отладки, и он изменяется этой оболочкой-хранилищем молотка. Основной URL при тестировании - это ip и порт для сервера testCafe, перед которыми стоят случайные буквы, например 172.0.0.1:8080/hoi23hh/ https://acceptance-site.com/ результате чего мой cookie сохраняется в сеансе (не под cookie, как обычно происходит, когда не используется тестовое кафе) в качестве молотка |storage-wrapper|hoi23hh|accept-site.com

Когда я удаляю.disablePageReloads, но сохраняю для роли preserveUrl: true, "cookie" остается прежним, но базовый URL-адрес изменяется на 172.0.0.1:8080/ohgbo223/ https://acceptance-site.com/

таким образом, "hoi23hh" изменяется на "ohgbo223" в URL-адресе, а ключ cookie / сеанса больше не совпадает с URL-адресом, и аутентификация завершается неудачно.

Каковы ваши предложения для сохранения аутентификации, при этом все еще в состоянии менять страницы и тому подобное

1 ответ

Я не рекомендую использовать disablePageReloads особенность с ролями, потому что она внутренняя и может быть нестабильной. preserveUrl опция позволит каждому тесту начинаться с https://acceptance-site.com стр. Итак, я думаю, что это наиболее предпочтительный способ в вашем случае:

const a3 = Role('https://acceptance-site.com', async testController => {
    ...
}, { preserveUrl: true });

fixture('Testing acceptance')
    .beforeEach(async testController => {
        await testController.useRole(authenticate);
});

test('example1', async testController => {
    await testController.debug();
})

test('example2', async testController => {
    await testController.debug();
})
Другие вопросы по тегам