如何测试使用上下文的 Azure 函数?
How to test an Azure Function that uses Context?
我正在编写一个使用上下文(用于监视目的)的 Azure 函数,这就是我的函数的样子:
import logging
import json
import azure.functions as func
def main(req: func.HttpRequest, context: func.Context) -> func.HttpResponse:
logging.info(
"{}\t{}".format(
context.invocation_id, context.function_name
)
)
reponse = "foo"
return func.HttpResponse(json.dumps(reponse), mimetype="application/json")
我想为这个功能编写集成测试,像这样:
import unittest
import azure.functions as func
from MyFunc import main
class TestMyFunc(unittest.TestCase):
def test_myfunc(self):
req = func.HttpRequest(
method="GET",
body=None,
url="/api/myfunc",
)
ctx = ??
reponse = main(req, ctx) # This part fails because of the context
self.assertEqual(
reponse.get_body(),
b'foo',
)
如何创建 Context 对象以传递给我的 Azure 函数?
看起来像 Context
is an ABC(Abstract Base Class) class, so you cannot directly instantiate. Instead you could subclass the func.Context
class 并将 class 的实例用作 ctx
class MockContext(func.Context):
def __init__(self, ii, fn, fd):
self._invocation_id = ii
self._function_name = fn
self._function_directory = fd
@property
def invocation_id(self):
return self._invocation_id
@property
def function_name(self):
return self._function_name
@property
def function_directory(self):
return self._function_directory
ctx = MockContext("Some dummy values")
我正在编写一个使用上下文(用于监视目的)的 Azure 函数,这就是我的函数的样子:
import logging
import json
import azure.functions as func
def main(req: func.HttpRequest, context: func.Context) -> func.HttpResponse:
logging.info(
"{}\t{}".format(
context.invocation_id, context.function_name
)
)
reponse = "foo"
return func.HttpResponse(json.dumps(reponse), mimetype="application/json")
我想为这个功能编写集成测试,像这样:
import unittest
import azure.functions as func
from MyFunc import main
class TestMyFunc(unittest.TestCase):
def test_myfunc(self):
req = func.HttpRequest(
method="GET",
body=None,
url="/api/myfunc",
)
ctx = ??
reponse = main(req, ctx) # This part fails because of the context
self.assertEqual(
reponse.get_body(),
b'foo',
)
如何创建 Context 对象以传递给我的 Azure 函数?
看起来像 Context
is an ABC(Abstract Base Class) class, so you cannot directly instantiate. Instead you could subclass the func.Context
class 并将 class 的实例用作 ctx
class MockContext(func.Context):
def __init__(self, ii, fn, fd):
self._invocation_id = ii
self._function_name = fn
self._function_directory = fd
@property
def invocation_id(self):
return self._invocation_id
@property
def function_name(self):
return self._function_name
@property
def function_directory(self):
return self._function_directory
ctx = MockContext("Some dummy values")