Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 应用服务器的单元测试_Python_Unit Testing_Twisted - Fatal编程技术网

Python 应用服务器的单元测试

Python 应用服务器的单元测试,python,unit-testing,twisted,Python,Unit Testing,Twisted,我编写了一个应用服务器(使用python&twisted),我想开始编写一些测试。但我不想使用Twisted的试用版,因为时间有限,现在没有时间玩它。因此,我想到的是:编写一个小型测试客户端,连接到应用服务器并发出必要的请求(通信协议是一些内部XML),以静态方式存储接收到的XML,然后使用unitest对这些静态数据编写一些测试 我的问题是:这是一种正确的方法吗?如果是,这种方法包括哪些测试 此外,使用此方法还有几个缺点,例如:无法访问数据库层以构建/重建架构,测试客户端何时连接到服务器:每个

我编写了一个应用服务器(使用python&twisted),我想开始编写一些测试。但我不想使用Twisted的试用版,因为时间有限,现在没有时间玩它。因此,我想到的是:编写一个小型测试客户端,连接到应用服务器并发出必要的请求(通信协议是一些内部XML),以静态方式存储接收到的XML,然后使用unitest对这些静态数据编写一些测试

我的问题是:这是一种正确的方法吗?如果是,这种方法包括哪些测试


此外,使用此方法还有几个缺点,例如:无法访问数据库层以构建/重建架构,测试客户端何时连接到服务器:每个单元测试还是在运行测试套件之前?

以前没有使用twisted,而且twisted/trial文档与我刚才看到的不一样,但是您可能需要2-3天才能正确实现上面描述的测试系统。现在,就像我说的,我不知道试用版,但我想你可能会在1-2天内让它工作,因为你已经有了一个扭曲的应用程序。如果审判能在更短的时间内给你更多的报道,我会选择审判

但请记住,这只是粗略查看文档后的一个答案。“我的问题是:这是正确的方法吗?”

这是你选择的。你找了很多借口,所以我认为你对这门课的理解很好。这不是最好的,但你已经列出了你做这件事的所有理由(然后就这一具体行动提出了后续问题)。“正确”已经不在其中了,所以这个问题没有答案

“这种方法包括哪些类型的测试?”

他们称之为“黑箱”测试。应用服务器是一个有少量输入和输出的黑盒子,您无法测试它的任何内部。它被认为是一种可接受的测试形式,因为它测试外部接口的底线是否有可接受的行为

如果你有问题,它对诊断工作是无用的。您会发现还需要对内部结构进行白盒测试

“无法访问数据库层以构建/重建架构,”

为什么不呢?这是Python。编写一个单独的工具,导入该层并进行数据库构建

“测试客户端何时连接到服务器:每个单元测试还是在运行测试套件之前?”

取决于测试的目的。取决于您的用例。在“现实世界”中,你的实际目标客户会发生什么

您需要测试类似于客户端的行为,以客户端建立连接的方式建立连接


此外,您还需要测试异常行为,例如客户端断开连接、做事无序或断开连接。

我认为您选择了错误的方向。的确,试用文件很轻。但是这个测试是基于unittest的,只添加了一些东西来处理reactor循环和异步调用(编写处理deffers的测试并不容易)。所有不包括defer/异步调用的测试都将与普通的unittest完全相同

test命令是一个测试运行程序(有点像nose),因此您不必为测试编写测试套件。你可以节省时间。除此之外,试用命令还可以输出分析和覆盖率信息。只需做试用-h了解更多信息


但无论如何,你应该首先问自己,你最需要哪种测试,单元测试、集成测试还是系统测试(黑匣子)。试用版可以做到所有方面,但并非所有方面都是最合适的。

您应该使用试用版。这真的不是很难。试用版的文档还有待改进,但如果您知道如何使用标准库单元测试,唯一的区别是它不是编写

import unittest
你应该写

from twisted.trial import unittest
。。。然后您可以从
测试方法返回延迟。其他几乎都是一样的

另一个不同之处是,不是在模块底部构建一个巨大的测试对象,然后运行

python your/test_module.py
您可以简单地定义测试用例,然后运行

trial your.test_module

如果您根本不关心reactor集成,实际上,您可以在一组现有的Python单元测试上运行
trial
。试用版支持标准库“
unittest
”模块。

是的,的确,试用版文档非常“轻巧”。)嗨,Glyph!谢谢你的回答。我的应用服务器是某种状态机(基本上为有限数量的用户服务),它有特定的工作流,因此,为了测试一个请求,您应该处理它之前的所有请求。因此,我认为测试它的方法是将所有xml请求存储在sqlite数据库中,并按顺序发送所有请求,直到找到需要测试的请求为止。