你在appengine上使用了什么方法来进行轻量级Python单元测试?

2024-05-10 10:33:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我即将着手进行一些大型的基于Python的appengine项目,我想我应该先看看Stack Overflow的“群体智慧”,然后再决定采用单元测试策略。我有一个现有的单元测试框架(基于带有定制运行器和扩展的unittest),所以任何“重磅”/“插入式”的东西,比如nosewebtest,或{a4}似乎都不合适。在我的世界观中,关键的单元测试是非常轻量级和快速的,运行时间非常短,所以我可以一直反复运行它们,而不会破坏我的开发节奏(例如,对于不同的项目,对于一个20K行的项目,我可以获得97%左右的覆盖率,其中有几十个超快速的测试,需要5-7次总的来说,对于一个典型的运行来说,总的来说,这是一个不错的小型快速单元测试套件)。当然,我也会有更丰富/更重的测试,一直到与selenium或Windmiller的集成测试,这正是我要问的问题;—)——我在这个问题上的重点(以及在我的大部分开发工作中;—)是在小的、轻量级的单元测试上,这些单元测试轻巧而快速地覆盖了我的代码,而不是深层次的测试。在

所以我认为我需要的基本上是一组小型的,非常轻量级的各种关键应用引擎子系统的模拟——数据存储、内存缓存、请求/响应对象和对webapp处理程序的调用、用户处理、邮件和c,大致按优先顺序排列。我还没有找到我要找的东西,所以在我看来,我要么依赖mox,就像我过去经常做的那样,这基本上意味着模拟给定测试中使用的每个子系统,并设置所有期望值&c(很强,但每次都要做大量工作,并且对测试代码的内部结构非常敏感,即非常“白盒”y),或者对每个子系统进行我自己的模拟(并作为单元测试的一部分对模拟子系统的状态进行断言)。考虑到GAE的Python端强大的“存根”架构,latter似乎是可行的。。。但我不敢相信我需要自己动手,也就是说,没有人已经编写出这么简单的模拟器!-)例如,对于数据存储,我需要的或多或少是“文件上的数据存储”存根,它已经是SDK的一部分,再加上一种将其标记为只读的、易于使用的访问器来断言数据存储的状态;等等,一个子系统接一个子系统——每个子系统似乎都需要比SDK中已有的“稍微多”一点,“位于”现有“存根”架构之上。在

所以,在投入一两天宝贵的开发时间“自己”模拟GAE子系统以进行单元测试之前,我想我应该和其他人再核实一下,看看你们对这一点的看法。。。或者,如果已经有一些这样的模拟器的开源集合,我可以简单地重用(或者最小限度地调整!-),我只是在搜索中没能发现!-)在

编辑:为了澄清,如果我真的自己动手,我确实计划在可行的情况下利用SDK提供的存根;但例如,对于最初从文件中读入但最后没有保存的数据存储来说,没有存根,因此我需要对现有的存根进行子类化和调整(这也没有提供特别方便的方法)声明其状态——与邮件服务存根相同,等等)。这就是我所说的“自己动手”的意思——而不是“从头开始重写”!-)在

编辑:“why not GAEUnit”--GAEUnit对于它自己的用例来说是很好的,但是运行dev_appserver并在我的浏览器中查看结果(甚至通过urllib.urlopen)绝对不是我想要的——我想用全自动的装置,适合在现有的基于扩展unittest的测试运行框架内运行,并且没有HTTP方式(所述框架定义了一个“快速”测试,即除其他外没有套接字和最小磁盘I/O——我们模拟或模拟这些——因此通过gaeuniti做得比“中等”测试好不了多少)+没有为每个测试预填充数据存储的方便方法(也没有帮助定制东西的OO结构)。在


Tags: 数据项目框架状态时间sdk邮件断言
3条回答

您不需要编写自己的存根—SDK包括它们,因为它们是用来模拟生产API的工具。并不是所有这些都适合在单元测试中使用,但大多数都适合。查看this code以获取使用内置存根所需的设置/拆卸代码示例。在

我使用GAEUnit作为我的googleappengine应用程序,我对测试的速度非常满意。我喜欢GAEUnit的一点,我确信Webtest做到了,就是它为所有用于测试的东西的存根创建了自己的版本,而只剩下您的“实时”版本进行测试。在

当你使用你的gasts开发时,你可以使用你的数据存储。在

NoseGAE是一个nose插件,它通过自动设置开发环境和测试数据存储来支持unittests。在dev_appserver上开发时非常有用。在

相关问题 更多 >