Проблема верхнего уровня
Наша команда унаследовала очень большую и хрупкую кодовую базу Python 2 (и C, C ++, несколько других), которую очень сложно и дорого обновить.Тонны зависимостей.Очень мало тестов.Добавление улучшения поведения и переход на Python 3 оба оказались монументальными задачами.Даже делая небольшие изменения в новом выпуске, нам приходилось много раз возвращаться, потому что он что-то сломал.
Это история недостаточного тестирования и значительных технических долгов.
Тем не менее, проект настолько большой и полезный, что, кажется, нет ничего проще, чем обновить его, чем заново изобрести все, что он делает.
Подзадача
Как добавить огромное количество пропавших без вестинебольшие тесты.Как мы можем автоматически генерировать даже простые модульные тесты ввода / вывода из высокоуровневых пользовательских приемочных тестов?
Попытка решения
Существует около 50 больших поведенческих тестов высокого уровня, которые должна обрабатывать эта кодовая база,К сожалению, для их запуска требуются дни, а не секунды.Они используют весь код, который нас больше всего интересует, но они слишком медленные.(Также занудное наблюдение, 80% одного и того же кода выполняется в каждом).Есть ли способ автоматически генерировать модульные тесты ввода / вывода из автоматической проверки стека при их запуске?
Другими словами, у меня есть высокоуровневые тесты, но я хотел бы автоматически создавать модульные и интеграционные тесты низкого уровня на основе выполнения этих высокоуровневых тестов.
Зеркальное отображение тестов высокого уровнямодульные тесты дают ровно ноль для дополнительного покрытия кода, но делают тесты намного быстрее и гораздо менее хрупкими.Это позволит быстро и уверенно выполнять рефакторинг деталей.
Я очень хорошо знаком с использованием TDD, чтобы, в первую очередь, смягчить эту проблему с хрупкими каплями, поскольку в действительности она во многих случаях ускоряет разработку и предотвращает это.проблема, но это своего рода уникальная проблема, которую нужно решить, так как кодовая база уже существует и «работает»;).
Какие-нибудь подсказки для инструментов автоматического тестирования?Я много гуглял и нашел некоторые вещи, которые могут работать на C, но я не могу найти ничего для python, который генерирует pytests / unittest / nose или что-то еще.Мне все равно, какой тестовый фреймворк Python он использует (хотя предпочел бы pytest).Должно быть, я искал неправильные термины, так как кажется невероятным, что инструмент создания тестов для python не существует.