2009-07-23 5 views
2

Мне поручено писать модульные тесты для набора сетевого программного обеспечения, написанного на python. Написание единиц для сборщиков сообщений и других статических методов очень просто, но я ударил стену, когда дело доходило до написания тестов для сетевых потоков.с использованием pyunit в сетевой нити

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

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

ответ

1

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

Старайтесь не использовать потоки только для упрощения тестирования.

0

Это зависит от того, как ваше сетевое программное обеспечение является многоуровневым, и насколько подробно вы хотите, чтобы ваши тесты были, но в некоторых случаях это возможно в некоторых случаях для настройки сервера и отрывной части теста. Например, когда я работал над пакетом протоколов Python (до того, как он стал частью Python), у меня был тест (я не использовал pyunit/unittest - это был просто рекламный скрипт), который был запущен (в одном тест) четыре сервера для прослушивания по портам TCP, UDP, HTTP и HTTP/SOAP, а затем отправили им сетевой трафик. Если вам интересно, дистрибутив here, а соответствующий тестовый сценарий в архиве - log_test.py. С тех пор пакет ведения журнала Python, конечно же, возник из-за этого, но старый пакет все еще используется для использования с версиями Python < 2.3 и> = 1.5.2.

0

У меня есть несколько тестовых примеров, которые запускают сервер в setUp и закрывают его в tearDown. Я не знаю, если это очень элегантный способ сделать это, но это работает для меня.

Я счастлив, что получил его, и это очень помогает мне.

Если сервер init очень длинный, альтернативой было бы автоматизировать его с помощью муравья. ant запускает/останавливает сервер до/после выполнения тестов.

См here очень интересный учебник по муравей и питона

0

Вам нужно будет создать макетные сокеты. Точный способ сделать это будет зависеть от того, как вы создаете сокеты и создаете генератор сокетов, было бы хорошей идеей. Вы также можете использовать насмешливую библиотеку, такую ​​как pymox, чтобы сделать вашу жизнь проще. Это также может исключить необходимость создания генератора сокетов только для единственной цели тестирования.

Использование pymox, вы могли бы сделать что-то вроде этого:

def test_connect(self): 
    m = mox.Mox() 
    m.StubOutWithMock(socket, 'socket') 
    socket_mock = m.MockAnything() 
    m.socket.socket(socket.AF_INET, socket.SOCK_STREAM).AndReturn(socket_mock) 
    socket_mock.connect(('test_server1', 80)) 
    socket_mock.connect(('test_server2', 81)) 
    socket_mock.connect(('test_server3', 82)) 

    m.ReplayAll() 
    code_to_be_tested() 
    m.VerifyAll() 
    m.UnsetStubs()