GAE Python 单元测试运行程序
GAE Python Unittest Runner
我在 Google 的 Cloud Endpoints 框架上有一个 Python API 运行ning。
我正在尝试使用 dev_appserver.
为我的单元测试实现 运行ner
我已经复制并改编了 Google 提供的关于此的内容,只是编辑了一点使其成为 运行 devappserver 一体机。
这是我目前所做的:
import argparse
import os
import sys
import unittest
def fixup_paths(path):
"""Adds GAE SDK path to system path and appends it to the google path
if that already exists."""
try:
import google
google.__path__.append("{0}/google".format(path))
except ImportError:
pass
sys.path.insert(0, path)
def main(sdk_path, test_path, test_pattern):
# If the SDK path points to a Google Cloud SDK installation
# then we should alter it to point to the GAE platform location.
if os.path.exists(os.path.join(sdk_path, 'platform/google_appengine')):
sdk_path = os.path.join(sdk_path, 'platform/google_appengine')
# Make sure google.appengine.* modules are importable.
fixup_paths(sdk_path)
# Make sure all bundled third-party packages are available.
import dev_appserver
dev_appserver.fix_sys_path()
# Fix google shits
from google.appengine.tools.devappserver2 import devappserver2
# Start the devappserver
server_instance = devappserver2.DevelopmentServer()
server_instance.start()
# Discover and run tests.
suite = unittest.loader.TestLoader().discover(test_path, test_pattern)
suite_result = unittest.TextTestRunner(verbosity=2).run(suite)
server_instance.stop()
return suite_result
if __name__ == '__main__':
parser = argparse.ArgumentParser(
description=__doc__,
formatter_class=argparse.RawDescriptionHelpFormatter)
parser.add_argument(
'sdk_path',
help='The path to the Google App Engine SDK or the Google Cloud SDK.')
parser.add_argument(
'--test-path',
help='The path to look for tests, defaults to the current directory.',
default=os.getcwd())
parser.add_argument(
'--test-pattern',
help='The file pattern for test modules, defaults to *_test.py.',
default='test_*.py')
args = parser.parse_args()
result = main(args.sdk_path, args.test_path, args.test_pattern)
if not result.wasSuccessful():
sys.exit(1)
但是我遇到了一个奇怪的导入错误。
我一直在搜索 Github,但找不到任何东西:
Traceback (most recent call last):
File "runner.py", line 65, in <module>
result = main(args.sdk_path, args.test_path, args.test_pattern)
File "runner.py", line 34, in main
from google.appengine.tools.devappserver2 import devappserver2
File "/Users/toto/Libraries/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/devappserver2.py", line 27, in <module>
from google.appengine.tools.devappserver2 import api_server
File "/Users/toto/Libraries/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/api_server.py", line 79, in <module>
from google.appengine.tools.devappserver2 import wsgi_server
File "/Users/toto/Libraries/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/wsgi_server.py", line 48, in <module>
from cherrypy import wsgiserver
File "/usr/local/lib/python2.7/site-packages/cherrypy/__init__.py", line 73, in <module>
from ._cptools import default_toolbox as tools, Tool
File "/usr/local/lib/python2.7/site-packages/cherrypy/_cptools.py", line 33, in <module>
from cherrypy.lib import auth_basic, auth_digest
File "/usr/local/lib/python2.7/site-packages/cherrypy/lib/auth_digest.py", line 27, in <module>
from six.moves.urllib.request import parse_http_list, parse_keqv_list
ImportError: cannot import name parse_http_list
我不知道如何修复那个导入问题:(
该错误表示您安装的软件包六不包含parse_http_list。尝试升级六个包:
pip install six==1.14.0
可能是父包然后抛出错误,然后也升级该包。
我在 Google 的 Cloud Endpoints 框架上有一个 Python API 运行ning。
我正在尝试使用 dev_appserver.
为我的单元测试实现 运行ner我已经复制并改编了 Google 提供的关于此的内容,只是编辑了一点使其成为 运行 devappserver 一体机。
这是我目前所做的:
import argparse
import os
import sys
import unittest
def fixup_paths(path):
"""Adds GAE SDK path to system path and appends it to the google path
if that already exists."""
try:
import google
google.__path__.append("{0}/google".format(path))
except ImportError:
pass
sys.path.insert(0, path)
def main(sdk_path, test_path, test_pattern):
# If the SDK path points to a Google Cloud SDK installation
# then we should alter it to point to the GAE platform location.
if os.path.exists(os.path.join(sdk_path, 'platform/google_appengine')):
sdk_path = os.path.join(sdk_path, 'platform/google_appengine')
# Make sure google.appengine.* modules are importable.
fixup_paths(sdk_path)
# Make sure all bundled third-party packages are available.
import dev_appserver
dev_appserver.fix_sys_path()
# Fix google shits
from google.appengine.tools.devappserver2 import devappserver2
# Start the devappserver
server_instance = devappserver2.DevelopmentServer()
server_instance.start()
# Discover and run tests.
suite = unittest.loader.TestLoader().discover(test_path, test_pattern)
suite_result = unittest.TextTestRunner(verbosity=2).run(suite)
server_instance.stop()
return suite_result
if __name__ == '__main__':
parser = argparse.ArgumentParser(
description=__doc__,
formatter_class=argparse.RawDescriptionHelpFormatter)
parser.add_argument(
'sdk_path',
help='The path to the Google App Engine SDK or the Google Cloud SDK.')
parser.add_argument(
'--test-path',
help='The path to look for tests, defaults to the current directory.',
default=os.getcwd())
parser.add_argument(
'--test-pattern',
help='The file pattern for test modules, defaults to *_test.py.',
default='test_*.py')
args = parser.parse_args()
result = main(args.sdk_path, args.test_path, args.test_pattern)
if not result.wasSuccessful():
sys.exit(1)
但是我遇到了一个奇怪的导入错误。
我一直在搜索 Github,但找不到任何东西:
Traceback (most recent call last):
File "runner.py", line 65, in <module>
result = main(args.sdk_path, args.test_path, args.test_pattern)
File "runner.py", line 34, in main
from google.appengine.tools.devappserver2 import devappserver2
File "/Users/toto/Libraries/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/devappserver2.py", line 27, in <module>
from google.appengine.tools.devappserver2 import api_server
File "/Users/toto/Libraries/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/api_server.py", line 79, in <module>
from google.appengine.tools.devappserver2 import wsgi_server
File "/Users/toto/Libraries/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/wsgi_server.py", line 48, in <module>
from cherrypy import wsgiserver
File "/usr/local/lib/python2.7/site-packages/cherrypy/__init__.py", line 73, in <module>
from ._cptools import default_toolbox as tools, Tool
File "/usr/local/lib/python2.7/site-packages/cherrypy/_cptools.py", line 33, in <module>
from cherrypy.lib import auth_basic, auth_digest
File "/usr/local/lib/python2.7/site-packages/cherrypy/lib/auth_digest.py", line 27, in <module>
from six.moves.urllib.request import parse_http_list, parse_keqv_list
ImportError: cannot import name parse_http_list
我不知道如何修复那个导入问题:(
该错误表示您安装的软件包六不包含parse_http_list。尝试升级六个包:
pip install six==1.14.0
可能是父包然后抛出错误,然后也升级该包。