您在App Engine上使用了哪些方法进行轻量级Python单元测试?

Ale*_*lli 39 python google-app-engine unit-testing

我即将开始一些基于Python的大型App Engine项目,我认为在进行单元测试策略之前,我应该检查Stack Overflow的"人群智慧".我有一个现有的单元测试框架(基于单元测试定制亚军和扩展),我想使用,所以任何"重量级" /"侵入",如鼻子,WebTest的,或 gaeunit似乎并不合适.在我的世界观中,关键的单元测试是非常轻巧和快速的,在非常短的时间内运行,所以我可以一直运行它们而不会破坏我的开发节奏(例如,对于不同的项目,我得到对于一个20K线项目有97%左右的覆盖率,需要几十次超快速测试,需要5-7秒,经过一段时间,对于一次典型的运行,总体来说 - 这就是我认为是一套体面的小型,快速单元 - 测试).我当然会有更丰富/更重的测试,一直到硒或风车的集成测试,这不是我要问的问题;-) - 我对这个问题的关注(以及我的大部分开发工作) ;-)是小型,轻量级的单元测试,轻松超级快速地覆盖我的代码,而不是更深层次的代码.

所以我认为我需要的是一组小型的,非常轻量级的各种关键App Engine子系统模拟 - 数据存储,内存缓存,请求/响应对象以及对webapp处理程序的调用,用户处理,邮件和c,大致在此优先顺序.我还没有找到我正在寻找的东西,所以在我看来我应该依赖mox,就像我过去经常做的那样,这基本上意味着模拟给定测试中使用的每个子系统并设置所有期望和c(强大,但每次都很多工作,对测试代码的内部非常敏感,即非常"白盒"y),或者滚动我自己的每个子系统的模拟(并在模拟的子系统上做断言'作为单元测试的一部分.后者似乎是可行的,考虑到GAE的Python端强大的"存根"架构...但我不敢相信我需要自己动手,即没有人已经编写过这样简单的模拟器! - )例如,对于数据存储区,看起来我需要的或多或少是"文件数据存储"存根,它已经是SDK的一部分,另外还有一种方法可以标记它只读和易于使用的访问器,用于断言数据存储的状态; 依此类推,子系统逐个子系统 - 每个似乎都需要比现有的"存根"架构中"已经存在"的"仅仅更多".

所以,在潜入并花费一两天宝贵的开发时间"滚动我自己"模拟GAE子系统进行单元测试之前,我想我会对SO人群进行双重检查,看看你们都会想到这一点. ..或者,如果已经有一些现有的开源软件组,我可以简单地重复使用(或者最小化调整! - ),而我在搜索中却没有发现! - )

编辑:澄清一下,如果我自己动手,我打算在可行的情况下利用SDK提供的存根; 但是例如,对于最初从文件读入但最后没有保存的数据存储区没有存根,所以我需要子类化并调整现有的数据存储区(这也没有提供特别方便的方法来对其进行断言) state - 与邮件服务存根相同,等等.这就是我所说的"滚动我自己" - 而不是"从头开始重写"! - )

编辑:"为什么不GAEUnit" - GAEUnit很适合自己的用例,但运行dev_appserver并在我的浏览器中看到结果(甚至通过urllib.urlopen)绝对不是我想要的 - 我想用一个完全自动化的设置,适合在现有的测试运行框架内运行,该框架基于扩展unittest,并且没有HTTP(所述框架定义了一个"快速"测试,其中包括没有套接字和最小磁盘I/O - 我们模拟或模拟这些 - 所以通过gaeunit我可以做的不比"中等"测试更好+ +没有方便的方法为每个测试预填充数据存储(没有OO结构来帮助定制事物).

Nic*_*son 13

您不需要编写自己的存根 - SDK包含它们,因为它们用于模拟生产API.并非所有这些都适合用于单元测试,但大多数都适用.查看此代码,了解使用内置存根所需的设置/拆卸代码示例.


Hai*_*inh 5

NoseGAE是一个鼻子插件,通过自动设置开发环境和测试数据存储区来支持单元测试.在dev_appserver上开发时非常有用.