Автоматизированное интеграционное тестирование приложения C++ с базой данных

Я представляю автоматизированное интеграционное тестирование зрелого приложения, которое до сих пор тестировалось только вручную.

Приложение основано на Windows и взаимодействует с базой данных MySQL.

Каков наилучший способ (включая подробную информацию о любых рекомендуемых инструментах) обеспечить независимость тестов друг от друга с точки зрения транзакций базы данных, которые будут происходить?

(Модификации исходного кода приложения для этой конкретной цели невозможны.)

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
7
0
2 572
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Вы можете выгрузить / восстановить базу данных для каждого набора тестов и т. д. Поскольку вы автоматизируете это, это может быть что-то в функции настройки / разрыва.

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

Для автоматизации тестирования многие люди используют Perl, но мы обнаружили, что Perl-программы растут подобно Topsy и становятся запутанными. Использование Python в качестве языка сценариев (мы запускаем тесты C++) целесообразно, если вы пытаетесь создать серию структурированных тестов.

Как говорит @ Крис К., сброс и восстановление базы данных между каждым тестом, вероятно, будет лучшим вариантом.

Поскольку вы планируете проводить тестирование за пределами приложения, я бы попытался создать среду тестирования на языке, на котором вы можете воспользоваться лучшими инструментами тестирования.

Если вы создали среду тестирования на Java, вы могли бы воспользоваться JUnit и, возможно, даже чем-то вроде FitNesse.

Не думайте, что только потому, что тестируемое приложение является C++, это означает, что вы застряли в использовании C++ для автоматического тестирования.

Я использовал для восстановления базы данных в функции SetUp класса модульного теста, связанного с базой данных. Таким образом было гарантировано, что каждый тест выполняется в одинаковых условиях.

Вы можете подумать о подготовке специального содержимого базы данных для тестов, то есть с меньшим объемом данных, чем в текущей производственной версии (чтобы время восстановления было разумным).

Ответ принят как подходящий

Как вы проверяете результаты?

Если вам нужно запросить БД (а похоже, что вы это делаете) для результатов, я согласен с Крисом К, за исключением того, что я бы попытался перестроить БД после каждого тестового примера, а не только для каждого набора.

Это помогает избежать опасного взаимодействующие тесты

Что касается инструментов, я бы порекомендовал CppUnit. На самом деле вы не выполняете модульные тесты, но это не имеет значения, поскольку фреймворк xUnit должен предоставить вам фреймворк для настройки и разборки, который вам понадобится для автоматической настройки вашего испытательный стенд.

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

Если вас интересуют дальнейшие исследования, посмотрите Тестовые таблицы XUnit. Это прекрасная книга и хороший сайт для такого рода вещей.

И спасибо за автоматизацию :)

Ник

Пожалуйста, попробуйте AnyDbTest, я думаю, это именно тот инструмент, который вы находите. (www.anydbtest.com).

Функции:

  • 1. Написание тестового примера с использованием Xml, а не кода Java / C++ / C# / VB. Не нужны эти дорогие инструменты программирования.

  • 2. поддерживает все популярные базы данных, такие как Oracle / SQL Server / My SQL

  • 3. Поддерживается так много видов утверждений, как StrictEqual, SetEqual, IsSupersetOf, Overlaps, RecordCountEqual и т. д. Кроме того, большинство утверждений может префикс логики, а не оператора.

  • 4. Позволяет использовать электронную таблицу Excel / XML в качестве источника данных для тестов. Как известно, электронная таблица Excel позволяет легко создавать / редактировать и поддерживать тестовые данные.

  • 5.Поддерживает тестовую модель песочницы, если один тест будет выполнен в песочнице, все операции с базой данных в каждой БД будут отменены, что означает, что любые изменения будут отменены.

  • 6. Позволяет выполнять перекачку данных из одной базы данных / Excel в целевую базу данных на этапе инициализации и завершения тестирования. Это простой способ подготовить тестовые данные для тестирования.

  • 7. Уникальное тестирование баз данных разных типов, что означает, что целевой и эталонный набор результатов может поступать из двух баз данных, даже если одна - это SQL Server, а другая - Oracle.

  • 8. Установить сравнение стилей для набора записей. AnyDbTest сообщит вам, что является пересечением, избытком или отсутствием между двумя наборами записей.

  • 9. Последовательное сравнение стилей для набора записей или скалярных значений. Это означает, что два набора результатов будут сравниваться в исходной последовательности.

  • 10. Разрешите экспортировать набор результатов оператора SQL в файл Xml / Excel.

Другие вопросы по теме