温控器Test Suite测试失败求助:API自行调用正常但测试不通过
问题核心
运行温控器Test Suite时,「将温控器设置为20度」测试用例执行失败,但手动调用同API端点能得到正确结果,无法复现测试中的异常。
关键细节
- 测试失败错误信息:
预期状态包含
{"thermostatTemperatureSetpoint":{"xRange":[19,21]}},实际状态为{"online":true, "thermostatMode":"heat","ThermostatTemperatureSetpoint":15,"thermostatTemperatureAmbient":19.5},预期false为true。 - 手动调用API的请求:
{"requestId":"c3085ea8-a42b-443f-8cbf-823808a8c8a4","inputs":[{"intent":"action.devices.EXECUTE","payload":{"commands":[{"devices":[{"id":"2","customData":{}}],"execution":[{"command":"action.devices.commands.ThermostatTemperatureSetpoint","params":{"thermostatTemperatureSetpoint":"20"}}]}]}}]} - 手动调用的响应结果:
{"requestId":"c3085ea8-a42b-443f-8cbf-823808a8c8a4","payload":{"commands":[{"ids":["2"],"status":"SUCCESS","states":{"thermostatMode":"heat","thermostatTemperatureSetpoint":20.0,"thermostatTemperatureAmbient":24.5}}]}}
排查方向
字段大小写不一致问题:
错误信息里的实际状态字段是ThermostatTemperatureSetpoint(首字母大写),而预期和手动响应里是thermostatTemperatureSetpoint(驼峰式首字母小写)。测试断言可能严格匹配字段名,导致识别不到正确的温度值,误判为15(可能是设备初始值或旧状态)。测试环境与手动环境的状态差异:
检查测试用例执行前的设备初始状态,是否测试时温控器初始温度就是15,且测试用例未正确执行设置操作(比如请求参数格式、设备ID不匹配);手动测试时设备初始状态不同,所以能得到正确结果。测试套件的请求细节差异:
对比测试套件实际发送的请求与手动请求,是否存在customData内容不同、请求参数类型差异(比如手动用字符串"20",测试用数字20)、设备ID不一致等情况。可通过抓包工具获取测试套件的真实请求。状态同步延迟:
测试套件可能在执行设置命令后立即查询状态,此时设备状态尚未更新完成,导致获取到旧的温度值15。手动测试时可能有自然延迟,状态已同步。可检查测试用例是否添加了足够的等待时间。测试断言逻辑问题:
确认测试断言的逻辑是否正确,比如是否误将false的预期值写为true,或者断言条件存在逻辑错误(比如同时检查多个状态时其他条件不满足)。
内容的提问来源于stack exchange,提问作者Cloud Schneider

