Принципы тест-дизайна для тестирования API |
09.01.2019 00:00 |
Автор: Анна Хворостьянова
Представьте, что перед Вами поставили задачу: протестировать API веб-сервиса. На этом этапе возникает довольно много вопросов, начиная от “Что именно требуется протестировать? Функционал? Нагрузку? Юзабилити?” до “Чем отличается список проверок для тестирования API от чек-листа для проверки UI”? В данной статье я поделюсь своим опытом составления проверок и кейсов для функционального тестирования SOAP API крупного государственного проекта со сложной логикой; мы обсудим, как лучше писать проверки и на что следует обратить особое внимание; в конце я представлю примерный вид документа с результатами тест-дизайна, которым будет удобно пользоваться и который не стыдно показать менеджеру или заказчику. Хорошие новости При тестировании API есть три хороших новости:
Подготовка к тест-дизайну При создании основного “скелета” проверок можно рисовать схемы или mind-карты. Моя схема-напоминалка в общем виде обычно выглядит так: Смотреть схему в большем размере Представим, что нам нужно протестировать простой сервис загрузки информации о сотрудниках в систему, чтобы потом внутри организации выдать каждому сотруднику логин и пароль от его учетной записи. Для данного сервиса создана операция импорта данных, полного экспорта (с присвоенным системой id и паролем), а также сокращенный вариант экспорта, которым могут пользоваться все сотрудники: в нем выгружается логин, ФИО и полномочие (должность) заданного сотрудника. Взаимодействие с API опасно тем, что здесь изначально доступны все поля, которые есть по wsdl, но далеко не все они подлежат заполнению (например, при экспорте сотрудником он не должен иметь право выгрузить всю информацию по всем сотрудникам). В данном случае, нужно проверить: ● Ограничения на каждое поле в xsd (подробнее можно прочитать на w3schools.com, аналог статьи на русском - здесь) ● Граничные значения для количества полей (например, телефонов у одного сотрудника может быть несколько, а отчества может не быть) ● Граничные значения для информации внутри полей (здесь необходимо проверить соответствие ограничений схемы ТЗ; а также правильную реализацию схем на бекенде, чтобы возникали ошибки формата, а не системные ошибки) ● Авторизационные проверки (сюда включаются все проверки прав доступа). Например, импортом и полным экспортом может пользоваться только сотрудник с правами администратора. На UI эти проверки являются неявными, если прав нет, то у пользователя не появляется данное меню/кнопка. ● Функциональные ошибки: если данные о сотруднике изменяются по истечение времени, то необходимо проверить, был ли такой сотрудник в системе (чтобы не плодить сущности); если в анкете сотрудника есть неизменяемые поля (например, логин), необходимо проверить, что система: во-первых, правильно идентифицирует пользователя (например, по присвоенному id); во-вторых, выдает ошибку неизменяемых полей при попытке их изменения. ● При создании и изменении данных учетных записей необходимо проверять корректность заполнения и отображения данных на UI (если таковой присутствует). Базовые принципы Мне не очень нравится делить проверки на позитивные и негативные, потому как сообщения о том, почему пользователь не может выполнить операцию не менее важны, чем успешный импорт/экспорт. И все-таки хорошим тоном считается сначала делать тесты на успешное выполнение операции и лишь потом - на возникновение тех или иных сообщений. Кроме того, довольно удобно делить проверки по вариантам использования: сначала импорт, потом экспорт (отдельно общий от лица админа, отдельно - от лица сотрудника). При оформлении документа по результатам тест-дизайна я предлагаю такой порядок проверок:
Экспорт всегда стоит после импорта, потому что таким образом мы экономим время на создание разнообразных данных, на которых нужно проверять выгрузку сущностей. Написание проверок Теперь обратим внимание на написание самих проверок. Перепробовав массу подходов, я выделила для себя следующие правила: 1. При написании проверок текст ТЗ нужно перерабатывать.
2. Рядом с проверкой необходимо писать конкретный ожидаемый результат.
3. Подумайте, кто и когда будет пользоваться вашим документом с проверками.
4. Прикрепите ссылку на ТЗ по данному функционалу к документу с проверками и не забывайте регулярно проверять, не изменилась ли она. 5. Если после написания проверок прошло некоторое время и часть функционала была реализована (особенно это касается тестирования доработок, которые расширяют уже существующий функционал), необходимо потратить время на переработку проверок. Любая документация имеет свойство устаревать. Это нормально. Но не стоит заниматься правками по ходу теста - вы лишь потеряете время, пытаясь найти, почему система работает не так, как ожидалось вами полгода назад; вдобавок вы рискуете потерять несколько важных проверок и пропустить важные дефекты. 6. Избегайте превращения отдельных проверок в цепочки. Это застопорит работу уже в самом начале теста, если вы обнаружите блокирующие дефекты. Подробнее об этом можно прочитать в блоге Microsoft. 7. Если вам нужно проверить конкретные значения или комбинацию конкретных параметров, отступите от стандартной шаблонной формы чек-листа и впишите эти значения в таблицу (очень часто для проверки комбинаций параметров используется pairwise. На картинке ниже - как раз-таки такой пример) 8. Разбивайте тесты на проверки так, чтобы на одну проверку у вас не уходило больше 5 минут с подготовкой данных. Не нужно пытаться сотворить одну проверку, в которой будет проверено сразу все. Пусть проверок будет 10, но они будут просты в подготовке и выполнении. 9. Если у вас есть проверки на массовый импорт, подумайте, как проще всего подготовить данные и отметьте это в документе с проверками Примерный вид оформления результатов тест-дизайна Для себя я сформировала следующий список обязательных полей, который должен быть в ТД:
Выглядит это примерно следующим образом: Смотреть табличку в полном размере Случается так, что некоторые проверки нужно перепроходить по несколько раз (по ним или смежным проверкам были заведены дефекты, возникли форс-мажорные ситуации извне, например, были реализованы новые схемы). В таком случае лучше заменять дату предыдущей проверки, а не писать ее рядом. Заключение Тестирование API всегда связано с проверкой имеющейся документации и составлением кейсов и проверок для тестирования. Этим нельзя пренебрегать, так как слишком велик риск пропуска важных пользовательских сценариев. Подробнее о тестировании API (в том числе, нефункциональном) можно прочитать на сайте SmartBear, а также в презентации Тоби Клемсона. |