Как пройти аутентификацию для всех тестов с использованием TestCafe - PullRequest
0 голосов
/ 24 октября 2018

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

Чтобы протестировать нашу среду принятия, нам нужно нажать 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 иПример 3 загрузки пустых страниц.Если я удаляю .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 Ответ

0 голосов
/ 25 октября 2018

Я не рекомендую использовать функцию 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();
})
...