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) названия Иdescribetitle внутри указанных выше файлов спецификаций и запускает только их.

Это приведет к полному описанию

      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.: Мне не удалось заставить работать несколько тегов вместе, но этого достаточно, чтобы выбрать только дымовые тесты.

Другие вопросы по тегам