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

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

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

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

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

Ответы [ 6 ]

3 голосов
/ 18 сентября 2008

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

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

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

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

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

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

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

Ник

1 голос
/ 18 сентября 2008

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

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

1 голос
/ 18 сентября 2008

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

0 голосов
/ 21 апреля 2009

Пожалуйста, попробуйте 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.

0 голосов
/ 18 сентября 2008

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

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

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

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

0 голосов
/ 18 сентября 2008

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

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

...