Webdriver.IO: Как выполнить конкретное "it" выражение в Jasmine, используя WDIO
Я пытаюсь извлечь набор дыма из моего набора регрессии, написанного с использованием фреймворка Jasmine (wdio-jasmine-framework
).
Можно ли просто добавить тег на конкретные тестовые случаи в Жасмин?
2 ответа
Если я правильно помню из моих дней жасмин / мокко, было несколько способов достичь этого. Я опишу несколько, но я уверен, что могут быть и другие. Используйте тот, который лучше для вас.
1. Используйте it.skip()
оператор внутри выражения условного оператора для определения состояния тестового случая (например, в случае smokeRun
пропустите тесты на отсутствие дыма, используя: (smokeRun ? it.skip : it)('not a smoke test', () => { // > do smth here < });
).
Вот расширенный пример:
// Reading the smokeRun state from a system variable:
const smokeRun = (process.env.SMOKE ? true : false);
describe('checkboxes testsuite', function () {
// > this IS a smoke test! < //
it('#smoketest: checkboxes page should open successfully', () => {
CheckboxPage.open();
// I am a mock test...
// I do absolutely nothing!
});
// > this IS NOT a smoke test! < //
(smokeRun ? it.skip : it)('checkbox 2 should be enabled', () => {
CheckboxPage.open();
expect(CheckboxPage.firstCheckbox.isSelected()).toEqual(false);
expect(CheckboxPage.lastCheckbox.isSelected()).toEqual(true);
});
// > this IS NOT a smoke test! < //
(smokeRun ? it.skip : it)('checkbox 1 should be enabled after clicking on it', () => {
CheckboxPage.open();
expect(CheckboxPage.firstCheckbox.isSelected()).toEqual(false);
CheckboxPage.firstCheckbox.click();
expect(CheckboxPage.firstCheckbox.isSelected()).toEqual(true);
});
});
2. Используйте it.only()
для достижения в основном того же эффекта, разница заключается в рабочей нагрузке рефактора в тестовом случае. Я обобщу эти идеи как:
- если у вас больше тестов на дым, чем тестов на отсутствие дыма, используйте
it.skip()
подход; - если у вас больше тестов на дым, чем тестов на дым, используйте
it.only()
подход;
Вы можете прочитать больше о pending-tests
здесь
3. Используйте пропуск времени выполнения (.skip()
) в сочетании с некоторыми вложенными describe
заявления.
Это должно выглядеть примерно так:
// Reading the smokeRun state from a system variable:
const smokeRun = (process.env.SMOKE ? true : false);
describe('checkboxes testsuite', function () {
// > this IS a smoke test! < //
it('#smoketest: checkboxes page should open successfully', function () {
CheckboxPage.open();
// I am a mock test...
// I do absolutely nothing!
});
describe('non-smoke tests go here', function () {
before(function() {
if (smokeRun) {
this.skip();
}
});
// > this IS NOT a smoke test! < //
it('checkbox 2 should be enabled', function () {
CheckboxPage.open();
expect(CheckboxPage.firstCheckbox.isSelected()).toEqual(false);
expect(CheckboxPage.lastCheckbox.isSelected()).toEqual(true);
});
// > this IS NOT a smoke test! < //
it('checkbox 1 should be enabled after clicking on it', function () {
CheckboxPage.open();
expect(CheckboxPage.firstCheckbox.isSelected()).toEqual(false);
CheckboxPage.firstCheckbox.click();
expect(CheckboxPage.firstCheckbox.isSelected()).toEqual(true);
});
});
});
! Примечание: это рабочие примеры! Я проверил их, используя рекомендованный WebdriverIO проект Jasmine Boilerplace.
! Obs: Есть несколько способов отфильтровать тесты Jasmine, к сожалению, только на уровне тестового файла (testsuite) (например: использование grep
сообщения по трубопроводу или встроенный WDIO specs
& exclude
атрибуты).
В дополнение к ответу iamdanchiv, с помощью WebdriverIO ~ 7+ и Jasmine ~ 3.7+ (возможно, и с более старыми версиями) вы можете добавить любой текстовый тег к своим описаниям и отфильтровать спецификации для его запуска.
Рабочий скрипт package.json использует grep Jasmine:
"smoketest": "wdio run wdio.local.conf.js --suite=temp --jasmineOpts.grep=_smoke"
где:
--suite=temp
определен в наборах wdio.local.conf.js и запускает только те файлы спецификаций,
--jasmineOpts.grep=_smoke
находит в тесте часть '_smoke' (it
) названия Иdescribe
title внутри указанных выше файлов спецификаций и запускает только их.
Это приведет к полному описанию
describe(`Suite 1 _smoke any other text`, () => {
it('Test 1-1', async () => {});
it('Test 1-2', async () => {});
});
и тесты из других описаний, например:
it('Test 2-1 _smoke is for smoke runs', async () => {});
Несовпадающие тесты (его) пропускаются.
_smoke
это может быть любой другой текстовый тег, который вы добавляете к заголовкам.
P.S.: Мне не удалось заставить работать несколько тегов вместе, но этого достаточно, чтобы выбрать только дымовые тесты.