使用 GET 请求而不是 POST 的烧瓶测试客户端



我有一个只用于 POST 请求的路由,如果满足条件,它会返回 json 响应。它是这样的:

@app.route('/panel', methods=['POST'])
def post_panel():
    # Check for conditions and database operations
    return jsonify({"message": "Panel added to database!"
                    "success": 1})

我正在使用flask-sslify强制http请求到https。

我正在使用 Flask 测试客户端和单元测试来测试此路由。测试函数类似于以下内容:

class TestAPI2_0(unittest.TestCase):
    def setUp(self):
    self.app = create_app('testing')
    self.app_context = self.app.app_context()
    self.app_context.push()
    db.create_all()
    create_fake_data(db)
    self.client = self.app.test_client()
    def tearDown(self):
        ....
    def test_post_panel_with_good_data(self):    
        # data
        r = self.client.post('/panel',
                            data=json.dumps(data),
                            follow_redirects=True)  
        print(r.data)      
        self.assertEqual(r.status_code, 200)

输出正好如下:

test_post_panel_with_good_data (tests.test_api_2_0.TestAPI2_0) ... b'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">n<title>405 Method Not Allowed</title>n<h1>Method Not Allowed</h1>n<p>The method is not allowed for the requested URL.</p>n'

======================================================================
FAIL: test_post_panel_with_good_data (tests.test_api_2_0.TestAPI2_0)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/tanjibpa/work/craftr-master/tests/test_api_2_0.py", line 110, in test_post_panel_with_good_data
    self.assertEqual(r.status_code, 200)
AssertionError: 405 != 200

我收到一个错误,指出该路由中不允许使用方法。如果我指定GET作为路由测试的方法(methods=['GET', 'POST'](似乎有效。但是为什么测试客户端要发出 GET 请求呢?除了为路由指定 GET 请求之外,有什么办法吗?

更新:

如果这样做:

@app.route('/panel', methods=['GET', 'POST'])
def post_panel():
    if request.method == 'POST':
        # Check for conditions and database operations
        return jsonify({"message": "Panel added to database!"
                        "success": 1})
    return jsonify({"message": "GET request"})

我得到这样的输出:

test_post_panel_with_good_data (tests.test_api_2_0.TestAPI2_0) ... b'{n  "message": "GET request"n}n'

我找出了导致烧瓶测试客户端中 GET 请求的原因。我正在使用flask-sslify强制http请求到https。不知何故,flask-sslify 正在强制执行 GET 请求,尽管测试客户端是使用其他类型的请求(POST、PUT、DELETE...(指定的。

因此,如果我在测试烧瓶测试期间禁用 ssliify,则测试客户端可以正常工作。

相关内容

  • 没有找到相关文章

最新更新