我正在寻找测试REST服务的指南/最佳实践。例如,如果我在REST请求中有以下JSON有效负载:
{
"maxActiveBadges": "1",
"photoUrl": "https://someurl/?employeeId=12345",
"employeeId": "12345"
}
我接近测试的方式显然是测试快乐路径场景的第1位,以确保我获得200响应代码。然后我可以涵盖许多负面情况:
缺少输入字段,拼写错误的输入字段,输入字段格式不正确(例如字符串而不是int),无效的json和超出字段输入长度。
我的问题是负面测试应该有多广泛?我是否应合理地假设该服务将通过在响应正文中返回适当的错误状态代码和消息来优雅地处理任何输入?
第二个问题 - 是否存在服务不应接受的某些字符,例如\?<>
出于安全原因?
答案 0 :(得分:0)
我是否应合理地假设该服务将通过在响应正文中返回适当的错误状态代码和消息来优雅地处理任何输入?
这取决于您使用的框架以及它们在手册中编写的内容。它还取决于您是否正确设置并正确指定了所有验证规则
我的问题是负面测试应该有多广泛?
它应该和您一样广泛,您的团队认为值得。测试的目的是让你睡得更好。如果微服务是一个免费服务,它在指定的时区内返回时间,作为宠物项目来学习新技术 - 如果用户传递错误的数据和服务崩溃,可能什么都不会发生。如果这是一个飞行控制系统,我会测试是否通过错误的参数不会导致数百人死亡
所以,事实上,你和你的团队是唯一能够回答这个问题的人
通常在实际系统上,您使用一个公开其他端点的框架。测试其中一个端点以检查所有格式错误的输入(错误的json,错误的方法等),检查框架的验证是否正确连接,然后测试每个端点以检查验证特定于该端点。参数化测试和请求构建器通常允许添加诸如单行的测试
第二个问题 - 是否存在服务不应接受的某些字符,例如\&LT;?&GT;出于安全原因?
依赖。你将如何使用这些数据?如果它是用户密码你肯定应该接受它 - 它是一个有效的密码,对吧?但如果它是一个你要显示为纯HTML的电话号码,那么你应该使用一些白名单