3

我曾经能够通过如下命令行获得对 Google App Engine 测试进行单元测试的代码覆盖率:

coverage run --omit=/Applications --source=../mycode --branch /usr/local/bin/dev_appserver.py ...

[这使用了 Ned Batchelder 的 coverage.py] 但是,在最近更新到最新的 SDK 之后(在长时间没有处理代码之后),我发现这不再起作用了。服务器进程必须在子进程等中运行应用程序代码。

我试着按照这个http://nedbatchelder.com/code/coverage/subprocess.html#subprocess

我看到另一个关于此的半近期问题,其中有一条评论表明 coverage.py 不起作用。使用 dev_appserver.py 获得覆盖不包括我的项目文件

我花了几个令人沮丧的时间在谷歌上搜索并尝试了一些没有运气的事情。所以……这还不可能吗?有没有人以任何方式获得代码覆盖率?是否有其他工具可以计算代码覆盖率?

4

2 回答 2

2

短期修复可能是运行旧的 dev_appserver.py

https://developers.google.com/appengine/docs/python/tools/old_devserver#Running_the_Old_Development_Web_Server

于 2013-09-09T04:04:03.500 回答
1

Dragonx 建议使用 old_dev_appserver.py 对我来说效果很好。更具体地说,这是我在 MacOS X 10.9.3 上使用 App Engine 1.9.6、coverage 3.7.1 和 Python 2.7 所做的:

MyAppDir是包含 app.yaml 的目录。
--omit是可选的。你很可能不需要它。我已经将我的测试代码移出了 MyAppDir,因为我不想让 appcfg.py 上传它。
--branch是可选的,但很有用。
old_dev_appserver.py(目前)随 App Engine 一起提供。无需下载或安装副本。

# One time:
sudo pip install coverage

# Start the server:
APP=MyAppDir
coverage run \
  --source=$APP \
  --omit='$APP/exclude/*' \
  --branch \
  /usr/local/bin/old_dev_appserver.py \
  $APP

# Run your tests in a separate tab. In my case I use this command:
webdriver/system_tests.py

# Kill the server with Control-C once the tests are finished.

# Display a quick text summary:
coverage report -m

# Generate and open an HTML report linking to line by line coverage:
coverage html
open htmlcov/index.html

我相对简单的应用程序(电子邮件、全文搜索、ndb、urlfetch、webapp2)不需要任何更改即可与 old_dev_appserver 一起使用。我确实删除了传递给 dev_appserver 的标志。没有他们我也能活下去。--port 如果你需要,它和其他一些一样支持。

如果您希望在 dev_appserver.py 的未来版本中看到代码覆盖支持,请投票添加对代码覆盖测试和一些文档的支持,以前为https://code.google.com/p/googleappengine/issues/detail?id =4936

于 2014-06-20T22:01:17.467 回答