【问题标题】:mock HTTP POST request模拟 HTTP POST 请求
【发布时间】:2013-05-29 14:15:29
【问题描述】:

我有一个只有 POST 方法实现的 python FLASK 视图。我不需要 GET,因为外部模板会将数据发布到此视图。 现在我想为此视图编写单元测试,我想在其中模拟初始 POST 请求并断言视图实现正常工作。

将访问我的视图实现的外部模板示例:

<HTML>
    <HEAD>
     <TITLE> New Document </TITLE>
     <META NAME="Author" CONTENT="Richard Ward">
     <META NAME="Keywords" CONTENT="">
     <META NAME="Description" CONTENT="Test Page">
    </HEAD>

    <BODY>
        <FORM METHOD="POST" ACTION="www.myView.com/testview">
         <INPUT TYPE="hidden" NAME="employeeId" value="304253498022">
         <INPUT TYPE="hidden" NAME="employeeName" value="testName">
         <INPUT TYPE="submit" name="submit" value="Show Information">
        </FORM>
    </BODY>
</HTML>

我的视图类

class TestView(MethodView):
    app = None
    def post(self):
        """
        Implementation of the post request for this view
        """
        employeeId= request.form.get('employeeId', None)
        employeeName = request.form.get('employeeName', None)

        # some data processing code

        return render_template("summary.html")

    @classmethod
    def registerSelf(cls, app):
        """
        Registers itself as a view with the passed Flask application
        """
        TestView.app = app
        app.flaskApp.add_url_rule('/testview', view_func=TestView.as_view('testview'))

我想直接调用我的视图的post,并在请求的正文中传递模拟表单数据

【问题讨论】:

  • 您需要使用 selenium 还是可以使用内置于测试客户端的烧瓶? flask.pocoo.org/docs/testing, stackoverflow.com/a/15838404/594589
  • 使用flask内置的测试客户端会更容易模拟POST请求吗?
  • 是的,这就是测试客户端的设计目的
  • @dm03514 感谢您的建议,但我将无法使用测试客户端,因为我的应用程序的设计方式我必须部署整个东西才能使其正常运行以进行测试。因此我需要以某种方式编写一个模拟 POST 请求的硒测试
  • “部署整个事物以使其正常运行以进行测试”是什么意思?

标签: python unit-testing post selenium mocking


【解决方案1】:

我只是在这个问题上停留了 2 个小时,结果证明您可以在测试中将字典作为数据负载传递,并且您可以通过 request.form.get 从代码中访问它

示例测试代码

from <the module you want to test> import app
    app.testing = True
    self.app = app.test_client()
    self.app.post(<endpoint name, for example /index>, data={
        'employeeId': '1',
        'employeeName': 'Ruth'})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-10
    • 2021-11-09
    • 2016-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多