Python 在单元测试中创建API资源的最佳实践-数据库还是POST端点?
在RESTAPI中对GET端点进行单元测试时,创建资源的最佳实践是什么 我是否应该直接在数据库中创建它们:Python 在单元测试中创建API资源的最佳实践-数据库还是POST端点?,python,flask,restapi,Python,Flask,Restapi,在RESTAPI中对GET端点进行单元测试时,创建资源的最佳实践是什么 我是否应该直接在数据库中创建它们: def test_can_get_todos_list(self): todo1 = Todo(text='todo1', user_id=self.user.id) todo2 = Todo(text='todo2', user_id=self.user.id) db.session.add_all([todo1, todo2])
def test_can_get_todos_list(self):
todo1 = Todo(text='todo1', user_id=self.user.id)
todo2 = Todo(text='todo2', user_id=self.user.id)
db.session.add_all([todo1, todo2]) # creating expected response todos directly in the database
db.session.commit()
response = self.client.get('api/todos')
result = [
{'text': 'todo1', 'id': 1},
{'text': 'todo2', 'id': 2},
]
self.assertEqual(response.status_code, 200)
self.assertEqual(result, response.json)
或者我应该利用我为创建这种类型的资源而构建的另一个API端点(POST)。因此,不要这样做:
db.session.add_all([todo1, todo2])
db.session.commit()
我可以这样做:
self.client.post(/api/todos, data='todos payload here')
当将API作为集成测试(即完全外部测试)进行测试时,请将API用于测试的每个部分。让某些部件使用API,而某些部件使用内部API将使测试更加脆弱(即,对任一功能的更改可能需要更新测试) 相反,测试应该使用与测试实现的功能具有相同抽象级别的API。如果您使用的是外部API,那么您应该将外部API用于测试的任何功能。这也将允许您从自己的代码外部运行测试,它们将作为如何使用API的文档和示例 以这种方式实施测试还将暴露API的任何缺陷;如果您发现了无法通过API实现但编写测试需要的功能,那么您已经找到了当前API未涵盖的用例 许多框架还具有为您设置测试环境的专用测试客户端,因此请求不必实际设置侦听套接字并运行http服务器。这会在测试外部API时加快测试速度