首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >双绞线协议行为的高级测试

双绞线协议行为的高级测试
EN

Stack Overflow用户
提问于 2014-10-20 09:55:44
回答 1查看 87关注 0票数 1

如何用扭曲的方式编写协议的高级测试?

我知道您可以使用StringTransport来测试底层协议的细节,例如,它接收了一些原始数据并发生了一些状态更改,或者它以某种方式做出了响应:

代码语言:javascript
复制
factory = SomeFactory()
protocol = factory.buildProtocol("ignored")
trans = proto_helpers.StringTransport("foo", 1234)
protocol.makeConnection(trans)
# ...
protocol.dataReceived("RAW PROTOCOL DATA\n")
self.assertEquals("Hello World!\n", self.transport.value())

然而,有线协议现在并不那么关键。它是不断变化的,我用AMP不用想太多。我现在要测试的是高层行为:

  • 建立连接,确保协议通知GUI。
  • 请求一个联系人列表,确保它将我提供的联系人发回。

诸若此类。例如:

代码语言:javascript
复制
serverApp = FakeApplication()   # this contains application state
serverFactory = SomeFactory(serverApp)
testEndpoint = magic.TestEndpoint()   # this class doesn't exist
testEndpoint.listen(factory)

clientApp = FakeApplication()
clientFactory = SomeFactory(clientApp)
testEndpoint.otherSide.connect(clientFactory)

self.assertEquals(serverApp.nConnections, 1)
self.assertEquals(clientApp.nConnections, 1)

assert clientApp.onNewConnection.was_called()  # pseudo-code

缺少的是某种假端点或双向传输来连接两个协议对象。

有什么技巧可以用来测试扭曲的协议行为(而不是有线协议编码)?

EN

回答 1

Stack Overflow用户

发布于 2014-10-20 18:14:19

正如您所说的,您不是在尝试测试线路上字节的低级细节。您不需要一个允许您移动那些不相关字节的测试工具。

相反,您需要一个测试工具,它可以让您远离字节,并测试对更高级别非常重要的应用程序级行为。

你说你在用AMP。Twisted中的AMP API提供了命令对象,可以传递给协议的callRemote API。

如果在GUI中单击"foo“按钮会导致"bar”命令使用某些特定参数遍历网络,则将GUI代码连接到只处理命令的AMP-alike。对于这样的双测试,callRemote的实现可能类似于(未经测试):

代码语言:javascript
复制
from twisted.internet.defer import execute

class LocalAMP(object):
    def __init__(self, backend):
        self._backend = backend

    def callRemote(self, command, **kwargs):
        try:
            method = getattr(self._backend, command.__name__)
        except AttributeError:
            return fail(NoSuchMethod())
        return execute(method, **kwargs)

现在,您可以调用应用程序级别的行为,而不必担心协议。

在一个完美的世界中,像这样的类将作为使用AMP的开发人员测试库的一部分来分发Twisted。也许在你建造了它之后,你可以把它贡献到上游。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26462870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档