【问题标题】:Automated test of client/server application客户端/服务器应用程序的自动化测试
【发布时间】:2010-07-21 17:38:08
【问题描述】:

正如标题所说,您将如何测试用 C/C++ 编写并通过网络协议进行通信的客户端/服务器应用程序?我对如何做到这一点有点困惑。我想过做一些嘲笑,但我从未尝试过嘲笑,所以我不知道这是否是最好的方法。 我该怎么做?我编写了许多单元测试,但从未尝试测试通过网络交互的东西。

【问题讨论】:

  • 也许我可以分解单元测试,所以系统唯一未知的就是网络?

标签: c++ client-server testing


【解决方案1】:

我使用单元测试驱动程序(客户端)中的命令模式向服务器发送测试命令。这样做的好处是测试在一个地方编码。

请求超时测试示例:

客户端向服务器发送睡眠命令,然后向服务器发送请求。请求超时,测试用例通过。

【讨论】:

  • 我不知道我是否理解这一点,但你说你有一个单元测试,它向服务器发送消息,然后看看它是否得到正确的答案?在我的项目中,这听起来是一种相当不错的处理方式。
  • 是的,更准确地说,单元测试向服务器发送两种消息。第一类消息建立测试条件(例如休眠触发超时),第二类是实际的测试请求。
【解决方案2】:

通常,您会希望使用模拟来验证每一方是否根据需要对来自另一方的消息做出反应(例如,当客户端收到来自服务器的响应时,它会正确处理该响应)。

要测试网络功能本身,您可以测试在同一台机器上运行的两者,也可以在虚拟机中运行一个(或两者)。如果您有两个网络适配器,您甚至可以将每个适配器专用于一个虚拟机,这样网络流量实际上会从一个到交换机/路由器,然后返回另一个(当/如果您想捕获和验证数据包时特别有用) )。

【讨论】:

  • 没想到虚拟机!!谢谢你提醒我,
【解决方案3】:

我有一些通过环回地址进行单元测试的客户端/服务器代码。当我必须测试错误条件时,我会使用一些模拟。因此,我尽可能使用真实代码进行测试,并在需要触发非常具体的条件时使用模拟。

【讨论】:

  • 你说你mock的时候需要触发特殊条件。你能举个例子吗?
  • 最常见的原因是触发错误条件。如果我想在服务器报告错误时测试我的客户端代码,我将在很难让服务器执行此操作时进行模拟以返回错误代码。另外,在环回上很难触发套接字错误,所以当我想确保正确处理套接字错误时,我会模拟一个套接字连接。
猜你喜欢
  • 1970-01-01
  • 2010-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多