четверг, 21 декабря 2017 г.

Автоматизация в блокноте. Берем из кода р2о, кладем в тест

На входе в систему у нас плоская запись — физик со всеми его атрибутами (телефоны, адреса...). На выходе — объект. Между ними некая трансформация. Соответственно, в коде есть маппирование p2o (plain to object) — какие поля объекта в каком поле плоской записи хранятся.

Если надо выполнить трансформацию в автотестах, мы указываем там конкретное поле по его названию. Например, ${p2o_name}. К этому мы, кстати, тоже не сразу пришли, пройдя через #жизньболь, но об этом я рассказывала раньше.

Итак, если надо проверить логику одного поля, все легко и просто. Но полей то в заказчиках много. И при создании новой сборки добавляется базовый комплект тестов, в том числе и на трансформацию. А это значит, что нам надо проверить, что каждое значение поля ложится ровно туда, куда ему надо. И что для каждого поля срабатывают конкретные правила.

Условие


Значит, имеем код:

    <!-- Дата актуальности -->
    <entry key="actualityDate" value="4"/>

    <!-- ФИО -->
    <entry key="fullNameRawSource" value="5"/>
    <entry key="surname" value="6"/>
    <entry key="name" value="7"/>
    <entry key="patronymic" value="8"/>
    <entry key="gender" value="9"/>
    <entry key="genderRawSource" value="10"/>
    <entry key="fullNameQC" value="11"/>
    ...

И надо на его основе сделать тесты. Фактически надо забрать значение key и переложить в запись ${p2o_key}, сделав верхнюю строчку заголовков в тесте:

Есть код, надо на его основе создать автотест

И хотя похожие тесты уже есть, наборы полей у заказчиков разные. Обычно можно взять готовый тест и подменить буквально пять значений. Это можно сделать и ручками. Но если полей много, получается невесело.

Радость и веселье
Здесь нам поможет автоматизация в блокноте. Я расскажу, как решала эту проблему. Итак, вставляем текст в блокнот и поехали!



1. Удалить комментарии


Тут все просто. Включаем регэкспы и заменяем:

<!--.*-->

на пустоту

Сначала уберем комментарии

И вуаля, комментов как не бывало!

Комментариев нет! Едем дальше


2. Убрать пробелы


А то раздражают ツ
Используем регэксп с жадным квантификатором

^\s*(.*)$

\1

Вуаля, пробелы исчезли!

Избавились от лишних пробелов


3. Из key="actualityDate" сделать ${p2o_actualityDate}


Надо из key="actualityDate" сделать ${p2o_actualityDate}
При этом не захватить value="4"

Value можно отсечь на жадном квантификаторе:

^.*key=\"(.*)\"\svalue.*$

${p2o_\1}

Или использовать ленивый:

^.*key=\"(.*?)\".*$

${p2o_\1}

Оба варианта работают!


4. Из столбца сделать строку


Осталось самое простое. Переключаемся на расширенный режим с регэкспов и подменяем

\r\n → ,



Осталось только добавить на новую строку любое значение, например, «1», скопировать и вставить в эксельку с тестом!

Вторую строку мы добавляем, чтобы эксель сам распознал колонки, иначе он просто запихает нашу строку в одну ячейку.


Алгоритм кратко


Повторюсь без картинок, просто напоминалкой себе:

1. Регэксп
<!--.*-->

на пустоту

Убрали комментарии

2. Убираем пробелы. Тоже регэксп, с жадным квантификатором

^\s*(.*)$

\1


3. Надо из key="actualityDate" сделать ${p2o_actualityDate}
При этом не захватить value="4"

value можно отсечь на жадном квантификаторе

^.*key=\"(.*)\"\svalue.*$

${p2o_\1}

Или использовать ленивый
^.*key=\"(.*?)\".*$

Оба варианта работают!

4. \r\n → ,


Ну вот и все, не так уж и сложно! Big grin :D

См также:
Автоматизация в блокноте. Изменился порядок записей в тесте, меняем регэкспами


5 комментариев:

  1. Ольга.
    Sublime и знание хоткеев решают, а Notepad - нет ;)
    В замедленной съемке:
    https://www.screencast.com/t/9U1U21UCI

    ОтветитьУдалить
    Ответы
    1. Флешплеер это фи)))
      Потом мб посмотрю, где он у меня установлен.

      А почему блокнот не решает то? Очень решает, без установки доп программ дает быстрый результат)

      Удалить
    2. Поддерживаю! :)
      Пользуюсь Notepad++ на работе примерно так же, только под свои нужды.
      Каждому свой инструмент!) Главное, чтобы было лично Вам удобно.))

      Удалить
  2. А почему блокнот не решает то?
    Это как разница между bash и powershell. Можно решать задачи, но совсем не то...

    ОтветитьУдалить