我对测试知之甚少,我希望在以下场景中寻求指导 - 我有一段代码,它接受一些参数(文件名,路径等)并将指定的文件上传到远程ftp服务器。因此,测试的目标是检查文件是否上传到ftp服务器中的正确目录。
现在,我不认为我应该将远程服务器放在我的测试脚本中,所以我应该在本地设置一个ftp服务器并模仿文件结构,还是在python中有一个模拟ftp工具来促进这些场景?
此外,这是单元测试还是功能测试?
答案 0 :(得分:4)
可能最好将实时远程服务器保持在图片之外。那说你可以ftp上传,ftp下载,并且有很好的覆盖率。
https://github.com/tarttelin/Python-Stub-Server
确实存在一个模拟ftp服务器(google上的热门点击)考虑到被测功能的简单性,这是单元测试。
答案 1 :(得分:0)
我们有一些真正的功能测试确实击中了我们作为暂存环境的一部分继续运行的真实FTP服务器。我们的Django项目的配置在运行测试时略有不同,因此它会命中这个“测试”FTP服务器而不是我们的任何真实服务器或任何客户端。话虽如此,这些都是我们运行速度最慢的测试之一,所以我想重写它们以在localhost上使用ftp服务器,启动和放大。被需要它的测试关闭。
模拟ftp服务器听起来不错。迫不及待想试试看,谢谢@Bryce。对于第三方服务器,一般来说,确保您的模拟实际上与服务器API匹配可能会有问题,但对于FTP来说,这看起来很稳定且充分理解,这应该不是问题。
功能测试会端到端调用整个系统,检查用户可见的行为是否符合您的规范,以确保您的产品真正有效,这样您就可以放心地部署新版本,无论什么更改代码包含。功能测试的主要失败是以不同于生产的方式运行产品代码(例如,仅运行部分代码,针对不同的数据库模式或供应商运行)它们通常使用实际数据,大而难以编写(数据库设置)特别是),并且运行缓慢。通常很难编写足够的功能测试来验证整个程序对所有可能的输入排列的行为,如果你写了它们,它们将需要永远运行。因此,您可以编写少量明智选择的功能测试来演示关键用户工作流程,然后使用单元测试来增强这些功能:
单元测试会调用极少量的代码,例如单个函数或方法。单元测试的主要目标是快速运行并且易于编写,这样您就可以在提交之前在几秒钟内编写数百或数千个,获得良好的覆盖率并运行它们。 (或者甚至每次你从编辑器中点击保存时。)单元测试的主要失败是缓慢。
在这两个极端之间听起来有点像测试的是集成测试,它们不会端到端地测试整个系统,而是测试多个层或组件是否正确集成。有时这些是有用的,或者是最容易编写的测试,但它们缺乏证明产品整体实际运行或运行速度非常快的主要优点。因此,我认为应该努力编写可以逃脱的最小数量的集成测试。 (我个人认为大多数项目的数字为零,但其他人不同意。)