Рамки или инструмент для "распределенного модульного тестирования"?

Есть ли какой-либо инструмент или инфраструктура, способная упростить тестирование распределенного программного обеспечения, написанного на Java? Моя тестируемая система представляет собой одноранговое программное обеспечение, и я бы хотел выполнить тестирование с помощью PNUnit, но с Java вместо .Net.

Тестирование системы - это каркас, который я разрабатываю для создания приложений P2P. Он использует JXTA как нижнюю подсистему, пытаясь скрыть некоторые ее сложности. В настоящее время это академический проект, поэтому в настоящий момент я стремлюсь к простоте.

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

Я столкнулся с некоторыми инициативами, такими как Pisces, который "направлен на предоставление распределенной тестовой среды, которая расширяет JUnit, предоставляя разработчику /tester позволяет запускать удаленные JUnits и создавать сложные тестовые пакеты, которые состоят из нескольких удаленных JUnit-тестов, работающих параллельно или последовательно", но этот проект и некоторые другие, которые я нашел, кажутся длинными.

Ответ 1

Тестирование распределенного программного обеспечения во многом зависит от того, какое программное обеспечение оно есть, поэтому для полного ответа мне нужно знать, что делает ваше программное обеспечение. Однако, глядя на PNUnit, он швыряет, что большая часть того, что он делает, позволяет синхронизировать, упорядочивать и параллельно выполнять тесты. TestNG также поддерживает это, например, вы можете:

@Test(threadPoolSize = 3, invocationCount = 10,  timeOut = 10000)
public void testServer() {
   :
}

который будет вызывать функцию testServer десять раз из трех разных потоков. Журнал изменений TestNG 4.5 также указывает на возможность запуска удаленных тестов, более подробная информация доступна в этом блоге.

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

Ответ 2

Ну, есть способ, который очень прост и не требует изучения какой-либо новой структуры. Вы можете протестировать журналы, созданные приложениями в вашей распределенной среде, используя grep4j. Посмотрите здесь и здесь для получения дополнительной информации.