Выбирайте с умом |
13.02.2017 00:00 |
Автор: Баз Дийкстра (Bas Dijkstra) Оригинал статьи: http://www.ontestautomation.com/choose-wisely/ Перевод: Ольга Алифанова В своей недавней статье, опубликованной на TechBeacon, я утверждал, что тесты на уровне API копают золотую жилу скорости выполнения, стабильности (как стабильности запуска, так и стабильности требуемой поддержки) и тестового покрытия. Однако я забыл упомянуть, что именно сподвигло меня написать такую статью. Об этом я и расскажу. На самом деле причина для такой темы у меня была только одна: я слишком часто вижу, как все идет наперекосяк, когда люди начинают писать автотесты. Сейчас я работаю с несколькими клиентами над двумя разными проектами, и их объединяет стремление к end-to-end тестам (зачастую при помощи инструментов вроде Selenium или Protractor), с проверками, которые выходят за рамки юнит-тестов. Вот вам пример. Я работаю над проектом, в котором мы собираемся создать автоматические проверки для веб-магазина, который продает электронные сигареты и аксессуары для них в Соединенных Штатах Америки. В магазине несколько продуктовых категорий, возрастных групп покупателей (некоторые продукты можно приобретать, если вам больше 18, некоторые – если вам больше 21, некоторые продукты не учитывают возраст, и так далее). К тому же это США – 50 разных штатов, и в каждом свои правила и законодательство. Короче говоря, возможных комбинаций тут куча (я не считал, но точно в районе сотен). К тому же из-за жестких правил США, и штрафов за нарушение этих правил, автотесты должны включать абсолютно все возможные комбинации. Звучит логично, но проблема в том, что заказчик предлагает написать автоматизированный end-to-end тест для каждой из возможных комбинаций. Следовательно, нам нужно создать заказ для каждой комбинации продуктовой группы, возрастной группы и штата, и каждый заказ включает заполнение трех или четырех разных форм и несколько переходов по страницам. Другими словами, такой тест будет медленно запускаться (счет пойдет на часы), и его будет тяжело поддерживать. Вместо этого я использовал Fiddler, чтобы проанализировать, что на самом деле делает приложение, чтобы определить, может ли покупатель приобрести выбранный им продукт. Короче говоря, оно просто вызывало API, которое содержало бизнес-логику принятия подобного решения. Итак, вместо сотен интерфейсных тест-кейсов я предложил создать кейсы на уровне API, которые будут проверять конфигурацию бизнес-логики, и добросить несколько end-to-end тестов, чтобы убедиться, что пользователь действительно может успешно разместить заказ или получить сообщение об ошибке при попытке заказать недоступный по какой-то причине товар. Мы все еще работаем над этим, но мне кажется, что этот пример хорошо иллюстрирует мою позицию: выйти за рамки пользовательского интерфейса экономит время при создании автотестов для веб-приложений.
Для тех, кто знаком с пирамидой тест-автоматизации, это может прозвучать как точная иллюстрация к ней. Так оно и есть. Однако в свете недавно прочитанных мною статей (например, вот этой от Джона Фергусона Смарта), я думаю, не стоит привязывать все и вся к этой пирамиде. Вместо этого, как говорит Джон, надо определить, ЧТО вы пытаетесь протестировать, а затем написать тесты на нужном уровне. Если это ведет к пирамидальной схеме, пусть будет так. Коническая форма – это хорошо. Мороженое тоже конической формы. Я люблю мороженое. Несмотря на это небольшое лирическое отступление про пирамиду тест-автоматизации, я думаю, что вышеописанный случай хорошо иллюстрирует мою точку зрения. Как я уже говорил, создание наиболее эффективных автоматизированных тестов происходит так:
Я уверен, что в вашей ежедневной работе встречаются ситуации, когда пересмотр подхода к автотестам может принести вам ощутимую выгоду. Это может быть и не уход от UI к API (хотя это наиболее частое явление), это может быть также создание юнит-тестов вместо end-to-end UI тестов. В некоторых случаях это замена большого количества нерелевантных юнит-тестов на небольшой сьют более мощных интеграционных API-тестов. Возвращаясь к тому, о чем говорил Джон в своей статье на LinkedIn, вы необязательно должны придерживаться пирамиды автотестов – вы должны поступать так, как правильно именно для вашей ситуации. Может получиться и пирамида. А может и нет. Выбирайте (и автоматизируйте) с умом. |