मैं पाइथन पृष्ठ (https://cloud.google.com/appengine/docs/python/tools/localunittesting) के लिए स्थानीय यूनिट परीक्षण पर डाले गए सटीक कोड का उपयोग करके Google App Engine के साथ यूनिट परीक्षण सीखने की कोशिश कर रहा हूं। मैं यह त्रुटि पता लगा सकते हैं नहीं है, हालांकि:ऐप इंजन यूनिट परीक्षण: आयात त्रुटि: प्रारंभ निर्देशिका आयात करने योग्य नहीं है
ImportError: Start directory is not importable: 'testmem.py'
मैं सिर्फ testrunner.py और उनके डेटास्टोर और एक फ़ाइल बुलाया testmem.py में Memcache परीक्षण के रूप में उनके सरल परीक्षण ढांचे का उपयोग कर रहा हूँ।
<me>$ python testrunner.py ~/google_appengine testmem.py
इस जहाँ तक मैं बता सकता हूँ उपयोग मेल खाता है::% prog SDK_PATH TEST_PATH मैं के रूप में परियोजना रूट निर्देशिका से परीक्षण कहते हैं।
मेरे फ़ाइल संरचना है:
__init__.py
app.yaml
testrunner.py
testmem.py
helloworld.py
किसी को भी मुझे बता सकते हैं मैं गलत यहाँ क्या कर रहा हूँ? अग्रिम में धन्यवाद।
पूरा त्रुटि संदेश:
Traceback (most recent call last):
File "testrunner.py", line 30, in <module>
main(SDK_PATH, TEST_PATH)
File "testrunner.py", line 17, in main
suite = unittest.loader.TestLoader().discover(test_path)
File "/usr/lib/python2.7/unittest/loader.py", line 204, in discover
raise ImportError('Start directory is not importable: %r' % start_dir)
ImportError: Start directory is not importable: 'testmem.py'
testrunner.py:
#!/usr/bin/python
import optparse
import sys
import unittest
USAGE = """%prog SDK_PATH TEST_PATH
Run unit tests for App Engine apps.
SDK_PATH Path to the SDK installation
TEST_PATH Path to package containing test modules"""
def main(sdk_path, test_path):
sys.path.insert(0, sdk_path)
import dev_appserver
dev_appserver.fix_sys_path()
suite = unittest.loader.TestLoader().discover(test_path)
unittest.TextTestRunner(verbosity=2).run(suite)
if __name__ == '__main__':
parser = optparse.OptionParser(USAGE)
options, args = parser.parse_args()
if len(args) != 2:
print 'Error: Exactly 2 arguments required.'
parser.print_help()
sys.exit(1)
SDK_PATH = args[0]
TEST_PATH = args[1]
main(SDK_PATH, TEST_PATH)
testmem.py:
import unittest
from google.appengine.api import memcache
from google.appengine.ext import db
from google.appengine.ext import testbed
class TestModel(db.Model):
"""A model class used for testing."""
number = db.IntegerProperty(default=42)
text = db.StringProperty()
class TestEntityGroupRoot(db.Model):
"""Entity group root"""
pass
def GetEntityViaMemcache(entity_key):
"""Get entity from memcache if available, from datastore if not."""
entity = memcache.get(entity_key) # @UndefinedVariable
if entity is not None:
return entity
entity = TestModel.get(entity_key)
if entity is not None:
memcache.set(entity_key, entity) # @UndefinedVariable
return entity
class DemoTestCase(unittest.TestCase):
def setUp(self):
# First, create an instance of the Testbed class.
self.testbed = testbed.Testbed()
# Then activate the testbed, which prepares the service stubs for use.
self.testbed.activate()
# Next, declare which service stubs you want to use.
self.testbed.init_datastore_v3_stub()
self.testbed.init_memcache_stub()
def tearDown(self):
self.testbed.deactivate()
def testInsertEntity(self):
TestModel().put()
self.assertEqual(1, len(TestModel.all().fetch(2)))
def testFilterByNumber(self):
root = TestEntityGroupRoot(key_name="root")
TestModel(parent=root.key()).put()
TestModel(number=17, parent=root.key()).put()
query = TestModel.all().ancestor(root.key()).filter('number =', 42)
results = query.fetch(2)
self.assertEqual(1, len(results))
self.assertEqual(42, results[0].number)
def testGetEntityViaMemcache(self):
entity_key = str(TestModel(number=18).put())
retrieved_entity = GetEntityViaMemcache(entity_key)
self.assertNotEqual(None, retrieved_entity)
self.assertEqual(18, retrieved_entity.number)
if __name__ == '__main__':
unittest.main()
बहुत बहुत धन्यवाद: वह था। यह मेरे लिए सहज नहीं था कि testrunner उन सभी परीक्षणों के साथ सभी मॉड्यूल खोजने के लिए एक पूरी निर्देशिका के माध्यम से जाना होगा; मुझे लगता है कि मुझे विशिष्ट होना था। यह समझ में आता है कि सभी परीक्षण तब अपनी निर्देशिका में क्यों होना चाहिए। – Mike