API的自动化测试应该是稳定和简单的。
在为API编写自动化测试时,我们通常必须检查用实现该API的程序创建的数据是否持久。如果直接检查持久性层(例如:数据库),那么测试将与这个持久层的使用相关联,并且可能经常中断。
我们宁愿使用API来检查数据是否持久化,这样就可以在不中断测试的情况下更改实现。
假设我们正在测试一个API来添加用户"myfakeapi.com“。给定这个JSON文件"user.json":
{
"name": "Harry"
}
..。这个测试脚本是:
#!/bin/bash
# Deleting all the users
curl -X DELETE https://myfakeapi.com/users
# Adding the new user, returns {"id": 1, "name": "Harry"}
curl -X POST -H "Content-type: application/json" --data-binary "@user.json" https://myfakeapi.com/users
# Checking that the user was saved, returns {"id": 1, "name": "Harry"}
curl -X GET -H "Content-type: application/json" https://myfakeapi.com/users/1
我们可以说测试是成功的。此外,如果实现发生变化,它也不会中断。
问题是,没有任何证据证明myfakeapi.com将用户存储在数据库中。实际上,它可以通过将用户存储在内存中来通过测试。最后,直接检查持久层是正确的解决方案吗?
我不这么认为(编辑:我后来改变了主意)。
从API用户的角度来看,持久性只意味着如果程序重新启动,数据就不会丢失。这正是我想要测试的。
我的问题是:在测试会话期间重新启动实现API的程序可以检查持久性吗?
发布于 2020-04-22 12:02:23
作为一个API用户,我只关心写(POST/PUT/DELETE)具有公告的效果,并且读取(GET)给出预期的数据,其中各种请求之间的时间不是一个因素(除非明确记录为超时)。
API的提供者如何确保时间无关,我并不感兴趣。就我而言,如果他们能够确保可执行文件永远不会死,那么他们就可以将所有的数据保存在RAM中。
作为API的实现者,我可能需要一种更持久的方式来存储数据,而不仅仅是RAM。
从测试的角度来看,这意味着API测试应该检查API是否按预期工作,但它们不应该常规地执行生产中的API用户无法执行的操作,比如重新启动程序。
如果持久性策略工作正常,我希望在软件的单元测试、组件测试和集成测试中找到测试。
https://softwareengineering.stackexchange.com/questions/409141
复制相似问题