在网络线程中使用pyunit

2 投票
4 回答
689 浏览
提问于 2025-04-15 13:07

我现在的任务是为一套用Python写的网络软件编写单元测试。为消息构建器和其他静态方法写测试非常简单,但在为网络循环线程写测试时,我遇到了困难。

举个例子:它连接的服务器可能在任何端口上,我想测试连接多个端口的能力(是顺序测试,而不是同时测试),但又不想实际运行很多个服务器。有什么好的方法可以解决这个问题吗?也许可以把服务器的创建和销毁作为测试的一部分?我觉得一定有更简单的办法,但我就是想不到。

我想应该有一些方法可以进行网络线程的单元测试,但我找不到相关的信息。

4 个回答

0

我有一些测试用例,它们在设置阶段启动一个服务器,然后在结束阶段关闭这个服务器。我不知道这样做是否很优雅,但对我来说是有效的。

我很高兴能这样做,这对我帮助很大。

如果服务器的初始化过程很长,另一种选择是用ant来自动化这个过程。ant可以在执行测试之前启动服务器,测试结束后再关闭它。

想了解更多,可以看看这里关于ant和python的有趣教程。

0

这要看你的网络软件是怎么设计的,以及你希望测试的细致程度。在某些情况下,把服务器的设置和拆除作为测试的一部分是完全可行的。举个例子,我之前在做Python的日志包(在它成为Python的一部分之前)时,有一个测试(我没有用pyunit/unittest,只是写了个临时脚本),这个测试会同时启动四个服务器,分别监听TCP、UDP、HTTP和HTTP/SOAP的端口,然后向它们发送网络流量。如果你感兴趣,可以在这里找到这个版本,相关的测试脚本是log_test.py。当然,Python的日志包自那以后已经发展了很多,但旧版本仍然可以在Python版本小于2.3和大于等于1.5.2时使用。

1

我建议你在现有的代码中引入一个工厂,这个工厂的作用是创建套接字对象。然后在测试的时候,使用一个模拟工厂,这个模拟工厂可以创建一些假套接字,它们只是装作已经连接到服务器(或者在出错的情况下不连接,这也是你想测试的,对吧?),并记录消息的流量,以证明你的代码使用了正确的端口连接到正确类型的服务器。

在测试的时候尽量不要使用线程,这样可以简化测试过程。

撰写回答