Latest posts on Unittesting. Тестирование приложения. topichttp://python.su/forum/topic/627/2007-04-01T17:56:03+03:00Общий :: Network :: Unittesting. Тестирование приложения.
2007-04-01T17:56:03+03:00russian_knight4336<blockquote><em>j2a</em><br/>2) Я бы тестировал логику (поведение сервера/клиента), т.е. модуль MultiCast</blockquote>А что там конкретно надо тестировать?<br/>1) Удачно ли посылаются данные на multicast адрес?<br/>2) Приходит ли то же, что и было послано?<br/><br/><blockquote><em>j2a</em><br/>4) Неплохо бы использовать {code:python} для кода</blockquote>Исправил. Не знал про тег.<br/><br/>Вот то что я начал делать:<br/><br/>from twisted.trial import unittest<br/>from twisted.internet import protocol, defer<br/>from LoadingProgram import Multicast<br/>from twisted.test.test_protocols import StringIOWithoutClosing as SIOWOC<br/><br/>class ServerProtoTest(unittest.TestCase):<br/> def setUP(self):<br/> self.p = Multicast.MulticastServerUDP()<br/><br/> def test_datagramRecieved(self):<br/> s = SIOWOC()<br/> self.p.makeConnection(protocol.FileWrapper(s))<br/><br/><br/>Но не могу понять вообще то я собираюсь проверять что надо или не то?<br/>Как посылать сообщение, если для посылки мне надо привязаться к локальному порту и только потом посылать? А для привязки нужен reactor, можно ли его в тесты засовывать? Сомневаюсь…<br/><br/>В статье ни одного комментария по поводу тестов. Увы, по ней я не смог разобраться.
Общий :: Network :: Unittesting. Тестирование приложения.
2007-04-01T13:08:13+03:00j2a43231) М.б. <a href="http://kamaelia.sf.net">Kamaelia</a> лучше подойдет для распределенных приложений (честно - не пробовал)<br/>2) Я бы тестировал логику (поведение сервера/клиента), т.е. модуль MultiCast<br/>3) Тестируется, заменяя транспорт StringIO, проверяются ответы ожидаемые и реальные (как это делается, описано в ссылаемой статье)<br/>4) Неплохо бы использовать {code:python} для кода
Общий :: Network :: Unittesting. Тестирование приложения.
2007-04-01T11:58:36+03:00russian_knight4322Привет. Пишу маленькую утилитку, которая должна:<br/><br/>1) Ставится на каждый из узлов кластера<br/>2) Посылать сообщения на другие узлы кластера. Нагрузку можно менять.<br/>3) Принимать сообщения с других узлов кластера.<br/><br/>Выбрал Twisted. Вот что получилось:<br/><br/><strong>Multicast.py:</strong><br/><br/>from twisted.internet.protocol import DatagramProtocol, Factory<br/>from twisted.internet import defer<br/>from time import time<br/><br/>class MulticastServerUDP(DatagramProtocol):<br/> def __init__(self, adress, changefunction):<br/> self.adress = adress<br/> self.changefunction = changefunction<br/><br/> def startProtocol(self):<br/> print ‘Started Listening’<br/> # Join a specific multicast group<br/> self.transport.joinGroup(self.adress)<br/><br/> def datagramReceived(self, datagram, address):<br/> if datagram == “System”:<br/> print " ' + repr(datagram) + “ from ” + repr(address)<br/> self.changefunction(datagram)<br/><br/>class MulticastClient(DatagramProtocol):<br/> def __init__(self, data, adress):<br/> self.data = data<br/> self.adress = adress<br/><br/> def SendPacket(self):<br/> self.transport.write(self.data, self.adress)<br/><br/><strong> main.py </strong><br/><br/>from twisted.internet import reactor, task<br/>from twisted.application.internet import MulticastServer<br/>from twisted.internet.protocol import DatagramProtocol<br/>import LoadingProgram.Multicast<br/><br/>SendPacketLoopTime = 1<br/>MulticastGroupAdress = ('224.0.0.1', 8005)<br/>MulticastListeningInterface = ‘0.0.0.0’<br/><br/>def ChangeFunction(data):<br/> SendPacketLoopTime = float(data)<br/> loopSendPacket.stop()<br/> loopSendPacket.start(SendPacketLoopTime)<br/><br/># Listen for multicast on MulticastGroupAdress<br/>serverprotocol = LoadingProgram.Multicast.MulticastServerUDP(MulticastGroupAdress, ChangeFunction)<br/>reactor.listenMulticast(8005, serverprotocol, MulticastListeningInterface)<br/><br/># Send multicast on MulticastGroupAdress from our dynamically allocated port<br/>clientprotocol = LoadingProgram.Multicast.MulticastClient(u'UIR', MulticastGroupAdress)<br/>reactor.listenUDP(0, clientprotocol)<br/>loopSendPacket = task.LoopingCall(clientprotocol.SendPacket)<br/>loopSendPacket.start(SendPacketLoopTime)<br/><br/>reactor.run()<br/><br/>Программа замечательно выполняет свои ф-ии, однако, вдохновившись XP программированием и статьёй pythy (<a href="http://gorod-omsk.ru/blog/pythy/2006/07/30/from-perl-script-to-twisted-app-writing-unit-tests/%29">http://gorod-omsk.ru/blog/pythy/2006/07/30/from-perl-script-to-twisted-app-writing-unit-tests/)</a> решил написать для неё тесты.<br/><br/>Однако никак не могу понять что тут нужно проверять и как проверять?<br/><br/>Может быть, гуру, посоветуете что-то?