Ответ 1
Во-первых, я не знаю никакого общедоступного инструмента, который автоматизирует задачу генерации тестовых данных для произвольных сценариев.
Собственно, это сложная задача в целом. Вы можете искать научные статьи и книги по этой теме. Это могут быть те. К сожалению, у меня нет рекомендаций по набору "хороших".
Весьма тривиальный подход - это генерирование случайных данных, полученных из набора потенциальных значений для каждого поля (столбец в случае базы данных). (Это то, что вы уже сделали.) Для небольших наборов вы можете даже генерировать полный набор потенциальных комбинаций. Например. вы можете посмотреть следующий тестовый генератор данных для примера, применяющего вариант такого подхода.
Однако это может быть неприемлемо по следующим причинам:
- результирующие данные будут демонстрировать значительную избыточность, хотя могут все еще не охватывать все интересные случаи.
- он может создавать несогласованные данные в отношении логических ограничений, которые ваше приложение будет применять в противном случае (например, ссылочная целостность).
Вы можете решить такие проблемы, добавив некоторые ограничения в процесс генерации тестовых данных для устранения недопустимых или избыточных комбинаций (в отношении вашего приложения).
Фактическое ограничение, возможное (и имеющее смысл), однако, зависит от вашего бизнеса и случаев использования. Таким образом, нет общего правила в отношении таких ограничений. Например. если ваш API предоставляет специальное лечение для возрастных ценностей, основанных на гендерных комбинациях возраста и пола, важно для ваших тестов, если такое различие не существует, любая комбинация возраста и пола будет в порядке.
Пока вы ищете сценарии тестирования белого ящика, вам нужно будет указать данные о вашей реализации (или, по крайней мере, спецификации).
Для тестирования черного ящика будет достаточно полного набора комбинаторных данных. Тогда проблема с сокращением тестовых данных, чтобы обеспечить время выполнения тестов в пределах некоторого максимума.
При работе с тестированием белого ящика вы можете явно искать добавление в угловые случаи. Например. в вашем случае: отдел без какого-либо студента, отдел с одним студентом, студенты без отдела, если такой сценарий имеет смысл в ваших целях тестирования. (например, при тестировании обработки ошибок или при тестировании того, как ваше приложение будет обрабатывать несогласованные данные.)
В вашем случае вы просматриваете свой API как основной вид данных. Содержимое базы данных - это только вход, необходимый для достижения всех интересных результатов от этого API. Фактическая задача определения надлежащего содержимого базы данных может быть описана математической задачей обеспечения обратного отображения, предоставляемого вашим приложением (от содержимого базы данных до результата API).
При отсутствии готового инструмента вы можете применить следующие шаги:
- начать с простого генератора комбинаторных данных
- применять некоторые ограничения, устраняя бесполезные или незаконные записи
-
запускать тесты, фиксируя данные о покрытии, добавлять дополнительные записи данных для улучшения повторного тестирования покрытия до тех пор, пока покрытие не будет ОК
-
просмотрите и отредактируйте данные после любого изменения вашего кода или схемы