python 测试通过ftp发送文件
我对测试的知识很少,想请教一下关于以下情况的建议——我有一段代码,它接受一些参数(比如文件名、路径等),然后把指定的文件上传到一个远程的ftp服务器上。所以,我测试的目标就是检查文件是否上传到了ftp服务器的正确目录。
现在,我觉得在我的测试脚本中不应该涉及远程服务器,那我是不是应该在本地搭建一个ftp服务器,并模拟文件结构,还是说在Python中有现成的模拟ftp工具可以用来处理这些情况呢?
另外,这算是单元测试还是功能测试呢?
2 个回答
我们有一些功能测试,确实会连接到一个真实的FTP服务器,这个服务器是我们在测试环境中一直运行的。我们的Django项目在运行测试时配置稍有不同,所以它会连接到这个“测试”FTP服务器,而不是我们真实的服务器或客户的服务器。话虽如此,这些测试是我们运行得最慢的,所以我想重写它们,使用一个在本地计算机上运行的FTP服务器,由需要它的测试来启动和关闭。
使用一个模拟的FTP服务器听起来是个好主意。迫不及待想试试,感谢@Bryce。对于第三方服务器来说,确保你的模拟服务器和真实服务器的接口一致可能会有问题,但对于FTP来说,这个协议相对稳定且大家都比较了解,所以应该不会有太大问题。
功能测试是对整个系统进行端到端的检查,目的是确认用户看到的行为符合我们的规范,以确保我们的产品确实能正常工作,这样无论代码有什么变化,我们都可以放心地发布新版本。功能测试的主要问题在于,它们可能以不同于生产环境的方式来测试产品代码(比如只运行部分代码,或者使用不同的数据库结构或供应商)。这些测试通常使用真实数据,规模较大,编写起来比较困难(尤其是数据库的设置),而且运行速度慢。通常很难写足够的功能测试来验证程序在所有可能输入组合下的行为,如果真的写了,运行起来会非常耗时。因此,通常我们会选择少量精心挑选的功能测试来展示关键的用户工作流程,然后再用单元测试来补充:
单元测试只调用一小段代码,比如一个函数或方法。单元测试的主要目标是快速运行,容易编写,这样你可以写成百上千个,覆盖面广,并且在提交之前,最多几秒钟就能全部运行(或者每次在编辑器中保存时都能运行)。单元测试的主要问题是,有时候运行速度会比较慢。
介于这两者之间的测试叫做集成测试,它们不是对整个系统进行端到端的测试,而是测试几个层次或组件是否正确集成。有时候这些测试很有用,或者是最容易编写的测试,但它们缺乏证明整个产品实际工作的主要优点,或者运行速度非常快。因此,我认为应该努力写出最少数量的集成测试(我个人认为大多数项目的这个数字是零,但其他人可能不同意)。
最好把实际的远程服务器排除在外。也就是说,你可以使用ftp上传和下载,这样就能有很好的测试覆盖率。
确实有一个模拟的ftp服务器(在谷歌上搜索的第一个结果),地址是 https://github.com/tarttelin/Python-Stub-Server
这是单元测试,因为被测试的功能比较简单。