QnA Api返回响应代码200 OK,与KB

时间:2020-01-15 09:13:45

标签: c# botframework web-api-testing qnamaker http-response-codes

我一直在尝试为我的应用程序的QnA编写自动化测试代码。今天,在运行测试时,我注意到所有测试都通过了,无论我对QnA进行了错误输入。

当我检查时,我发现QnA Api返回的带有有效头(如身份验证密钥)的响应代码始终为200 Ok,而不管特定QnA的输入是对还是错。因此,自从确认响应代码为200 Ok的步骤始终通过后,我的所有测试均通过了。响应也采用正确的Json格式,因此格式化测试也一直通过。

我知道这是Api不断返回200 Ok状态代码的原因,但是我认为理想情况下,它应该使用响应代码来响应在响应正文中获得的响应。唯一的区别是,当向Api提供无效输入时,“答案”响应正文参数返回一条错误文本消息,例如:“在KB中找不到很好的匹配项”。可以在下面看到。

Error message Json response with 200 Ok status

在有效输入到BOT的情况下,获得以下响应。请注意,唯一的区别是响应正文中“ answer”响应参数的值。

Proper response Json with 200 Ok status

最后,我必须添加验证器以验证返回200 Ok的测试是否也没有在响应正文“ answer”参数中返回错误消息文本。但是现在,如果将来错误响应消息文本发生更改(由服务进行的更改),我的测试也将失败,因为它们已被设置为与特定的错误消息进行比较。

我认为,这只是QnA Apis自动化代码级测试的临时解决方案。无论如何,可以修改这些Apis返回的响应代码以在响应主体中反映实际响应。如果可以做到,那么只要响应代码不匹配,就可以停止测试,从而节省了时间,精力和性能。如果还有其他方法可以改善这项工作,我欢迎您提出建议。

注意:我正在使用POST调用方法来测试Apis。

1 个答案:

答案 0 :(得分:2)

HTTP状态代码就是这样。它们为您提供特定于HTTP请求的信息,因此,例如,如果请求无法到达服务器,您可能会期望输入不同的代码。对于您的QnA Maker应用程序,该应用程序的用途是搜索知识库并返回详细的响应,同时知道知识库可能不包含所提出的问题。如果QnA Maker应用程序搜索知识库,但未找到正确的答案,则该应用程序仍能完成其工作并正确执行,因此,如果它能够将无法找到答案的信息发送回去,则没有理由HTTP状态代码表示成功以外的任何内容。这不是错误。

如果要确定未找到匹配项,则不应使用HTTP状态代码来执行此操作。您说响应中的“唯一区别”是您得到的答案为“在KB中找不到很好的匹配项”,但又对该响应进行了另一番考察。只有一个答案,分数为0,但这可能不如您想要的可靠。真正的指标是ID为-1,源为null,问题数组为空,因此您可以轻松地执行以下操作:

if (results.First().Id < 0)
{
    // No good match was found
}

您还存在一个误解,即QnA Maker团队可能会通过修改某种共享服务来更改“不匹配”响应。您拥有自己的QnA Maker应用,正在为其调用终结点,并且在此定义消息。如herehere所述,唯一可以更改它的人是您。