How to unit test Google Cloud Endpoints

后端 未结 6 1406
盖世英雄少女心
盖世英雄少女心 2020-12-23 00:12

I\'m needing some help setting up unittests for Google Cloud Endpoints. Using WebTest all requests answer with AppError: Bad response: 404 Not Found. I\'m not really sure if

6条回答
  •  挽巷
    挽巷 (楼主)
    2020-12-23 00:35

    webtest can be simplified to reduce naming bugs

    for the following TestApi

    import endpoints
    import protorpc
    import logging
    
    class ResponseMessageClass(protorpc.messages.Message):
        message = protorpc.messages.StringField(1)
    class RequestMessageClass(protorpc.messages.Message):
        message = protorpc.messages.StringField(1)
    
    
    @endpoints.api(name='testApi',version='v1',
                   description='Test API',
                   allowed_client_ids=[endpoints.API_EXPLORER_CLIENT_ID])
    class TestApi(protorpc.remote.Service):
    
        @endpoints.method(RequestMessageClass,
                          ResponseMessageClass,
                          name='test',
                          path='test',
                          http_method='POST')
        def test(self, request):
            logging.info(request.message)
            return ResponseMessageClass(message="response message")
    

    the tests.py should look like this

    import webtest
    import logging
    import unittest
    from google.appengine.ext import testbed
    from protorpc.remote import protojson
    import endpoints
    
    from api.test_api import TestApi, RequestMessageClass, ResponseMessageClass
    
    
    class AppTest(unittest.TestCase):
        def setUp(self):
            logging.getLogger().setLevel(logging.DEBUG)
    
            tb = testbed.Testbed()
            tb.setup_env(current_version_id='testbed.version') 
            tb.activate()
            tb.init_all_stubs()
            self.testbed = tb
    
    
        def tearDown(self):
            self.testbed.deactivate()
    
    
        def test_endpoint_testApi(self):
            application = endpoints.api_server([TestApi], restricted=False)
    
            testapp = webtest.TestApp(application)
    
            req = RequestMessageClass(message="request message")
    
            response = testapp.post('/_ah/spi/' + TestApi.__name__ + '.' + TestApi.test.__name__, protojson.encode_message(req),content_type='application/json')
    
            res = protojson.decode_message(ResponseMessageClass,response.body)
    
            self.assertEqual(res.message, 'response message')
    
    
    if __name__ == '__main__':
        unittest.main()
    

提交回复
热议问题