当前位置: 首页 > 知识库问答 >
问题:

单元测试Python Google Cloud HTTP函数-需要传入请求对象

苍德寿
2023-03-14

我正在开始使用Python编写Google Cloud http函数,我想包括单元测试。我的职能仅响应POST请求,因此我的职能基本概述如下:

def entry_point(request):
    if request.method == 'POST':
        # do something
    else:
        # throw error or similar

我想写一个简单的单元测试,以确保如果函数收到GET请求,响应具有405状态。

因此,在我的单元测试中,我需要为request参数传递一个值:

def test_call(self):
    req = #need a way of constructing a request

    response = entry_point(req)
    assert response.status  == 405 # or something like this

基本上,我需要构造一个请求,然后检查响应状态是否符合我的预期。我谷歌了一下,发现了很多关于嘲笑和各种我坦率地不理解的东西的页面(我不是一个热门开发者),所以我希望有人能帮我做我需要做的事情。

我确实发现:https://cloud.google.com/functions/docs/bestpractices/testing#unit_tests_2:

from unittest.mock import Mock

import main


def test_print_name():
    name = 'test'
    data = {'name': name}
    req = Mock(get_json=Mock(return_value=data), args=data)

    # Call tested function
    assert main.hello_http(req) == 'Hello {}!'.format(name)


def test_print_hello_world():
    data = {}
    req = Mock(get_json=Mock(return_value=data), args=data)

    # Call tested function
    assert main.hello_http(req) == 'Hello World!'

这有点帮助,但它没有解释如何指定请求方法(即GET、POST等)。

共有2个答案

居英资
2023-03-14

现在评论这个可能已经很晚了,但我也在经历同样的探索。如何在没有模拟和/或烧瓶测试客户端的情况下真正对云函数进行单元测试。对于记录,在Google Cloud Platform Python Docs Samples中,解释了如何使用Flasktest_request_context()功能以及一些示例来实现这一点(而不必手动创建请求对象)。

归俊捷
2023-03-14

我才意识到我有点想得太多了。为了测试我的代码,实际上并不需要向它传递一个真正的Flask请求,它只需要一个具有我的代码所引用的属性的对象。对我来说,这可以:

import unittest
from main import entry_point


class Request:
    def __init__(self, method):
        self.method = method

class MyTestClass(unittest.TestCase):
    def test_call_with_request(self):
        request = Request("GET")
        response = entry_point(request)
        assert response.status_code == 405

 类似资料:
  • 我们有一个 REST 服务,它接受包含保存 的 POST 请求。在 REST 服务中,可能会根据提供的数据创建一个文件。 我们希望对基于其<code>多部分 然而,问题在于从REST客户端发送的MultiPart与REST服务器接收的不同,因为球衣可能会对数据进行一些处理以对其进行流式传输或其他操作。尝试测试(见下文)以下设置将导致 (只是片段,我省略了显而易见的东西): Rest: 服务器端Mu

  • 我正在尝试micronaut,我在理解如何进行单元测试方面遇到了一些困难。 我有一个只有一个控制器的简单应用程序(它返回hello)。 现在我要测试这个endpoint。来自springboot的我希望micronaut有一些runner类,比如,但我找不到。micronaut中有运行测试的runner类吗? 从这里的文档中,我看到可以使用HttpClient测试restendpoint。我两个都

  • 问题内容: 我有一个实现一些WKNavigationDelegate函数的UIViewController,并且我想对这些函数中的逻辑进行单元测试。这是一个例子: 我希望我的单元测试确保基于WKNavigationAction的request.url用正确的WKNavigationActionPolicy调用DecisionHandler。 但是,我不知道如何测试此功能。当我运行测试项目时,在We

  • 我启动了一个项目,现在项目中有大约7个测试,使用执行整个测试套件已经花费了一分钟多的时间。 从附加输出(标志)中,我可以看到,对于每个测试类和方法,整个quarkus应用程序以及mongodb实例等依赖项都会重新启动。 这与quarkus文档在测试指南页面上的内容完全相反: 到目前为止,在我们的所有示例中,我们只为所有测试启动Quarkus一次。在运行第一个测试之前,Quarkus将启动,然后所有

  • 我有以下服务方式: 我正试图为此方法创建以下单元测试: 我的问题是: 1.我们需要在单元测试中测试方法吗?如果是这样,我们是否应该为列表创建多条记录,然后将返回的结果与预期的筛选值进行比较? 泛型可译: