当前位置: 首页 > 面试题库 >

如何将集成测试(而非单元测试)应用于Flask RESTful API

米楚青
2023-03-14
问题内容

假设我想测试以下Flask API(从此处开始):

import flask
import flask_restful

app = flask.Flask(__name__)
api = flask_restful.Api(app)

class HelloWorld(flask_restful.Resource):
    def get(self):
        return {'hello': 'world'}

api.add_resource(HelloWorld, '/')

if __name__ == "__main__":
    app.run(debug=True)

将其另存为flaskapi.py并运行后,在同一目录中运行脚本test_flaskapi.py

import unittest
import flaskapi
import requests

class TestFlaskApiUsingRequests(unittest.TestCase):
    def test_hello_world(self):
        response = requests.get('http://localhost:5000')
        self.assertEqual(response.json(), {'hello': 'world'})


class TestFlaskApi(unittest.TestCase):
    def setUp(self):
        self.app = flaskapi.app.test_client()

    def test_hello_world(self):
        response = self.app.get('/')

if __name__ == "__main__":
    unittest.main()

这两个测试都通过了,但是对于第二个测试(在中定义TestFlaskApi),我还没有弄清楚如何断言JSON响应符合预期(即{‘hello’: ‘world’})。这是因为它是的实例flask.wrappers.Response(本质上可能是Werkzeug响应对象(请参阅http://werkzeug.pocoo.org/docs/0.11/wrappers/)),但是我找不到等效的对象响应对象的json()方法。requests

如何对第二个的JSON内容进行断言response


问题答案:

我发现可以将JSON数据应用于方法json.loads()的输出get_data()

import unittest
import flaskapi
import requests
import json
import sys

class TestFlaskApiUsingRequests(unittest.TestCase):
    def test_hello_world(self):
        response = requests.get('http://localhost:5000')
        self.assertEqual(response.json(), {'hello': 'world'})


class TestFlaskApi(unittest.TestCase):
    def setUp(self):
        self.app = flaskapi.app.test_client()

    def test_hello_world(self):
        response = self.app.get('/')
        self.assertEqual(
            json.loads(response.get_data().decode(sys.getdefaultencoding())), 
            {'hello': 'world'}
        )


if __name__ == "__main__":
    unittest.main()

两项测试均按要求通过:

..
----------------------------------------------------------------------
Ran 2 tests in 0.019s

OK
[Finished in 0.3s]


 类似资料:
  • 单元测试 单元测试仅依赖于源代码,是测试代码逻辑是否符合预期的最简单方法。 运行所有的单元测试 make test 仅测试指定的package # 单个package make test WHAT=./pkg/api # 多个packages make test WHAT=./pkg/{api,kubelet} 或者,也可以直接用go test go test -v k8s.io/kubernet

  • Spring对MockMvc有2个设置: 独立设置 WebApplication Context安装 一般来说,MockMvc用于哪种测试?单元还是集成?或者两者兼而有之? 使用独立设置(运行在Spring应用程序上下文之外)允许您编写单元测试,而使用WebApplication Context设置您可以编写集成测试,这是对的吗?

  • 我刚来锡库利。我想在我的python(2.7版)单元测试(实际上是selenium webdriver测试)中添加sikuli特性(能够检查网页上是否显示了特定的图像)。有什么建议怎么做吗?我尝试安装,但出现错误(因为它可能需要Cython)。

  • 英文原文:http://emberjs.com/guides/testing/integration/ 集成测试通常用来测试应用中得重要工作流。集成测试用来模拟用户交互和确认交互结果。 设置 为了对Ember应用进行集成测试,需要在测试框架中运行应用。首先需要将根元素(root element)设置为任意一个已知将存在的元素。如果根元素在测试运行时可见的话,这对测试驱动开发非常有用,带来的帮助非常

  • 本文向大家介绍单元测试和集成测试之间的区别,包括了单元测试和集成测试之间的区别的使用技巧和注意事项,需要的朋友参考一下 众所周知,测试是任何应用程序或软件交付过程中最重要的阶段,因为测试不仅可以验证应用程序的质量,还可以为开发人员提供改进其产品的机会。 每个应用程序都以某种高级或低级语言进行开发,这意味着已经为其开发编写了一些代码,因此在要测试的模块的基础上,存在测试的分类,即单元测试和集成测试。