Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无论KB中是否存在匹配,QnA Api都会返回响应代码200 OK_C#_Botframework_Web Api Testing_Qnamaker_Http Response Codes - Fatal编程技术网

C# 无论KB中是否存在匹配,QnA Api都会返回响应代码200 OK

C# 无论KB中是否存在匹配,QnA Api都会返回响应代码200 OK,c#,botframework,web-api-testing,qnamaker,http-response-codes,C#,Botframework,Web Api Testing,Qnamaker,Http Response Codes,我一直在尝试为我的应用程序的QnA编写自动化测试代码。今天在运行测试时,我注意到所有的测试都通过了,不管我给几个QnA的输入是否错误 当我检查时,我发现QNAAPI返回的响应代码带有有效的头,比如身份验证密钥,不管输入到特定QnA的是正确的还是错误的,响应代码总是200 Ok。因此,我的所有测试都通过了,因为验证响应代码为200OK的步骤始终通过。响应也是正确的Json格式,因此格式化测试也一直通过 我理解这是Api不断返回200 Ok状态代码的原因,但我认为理想情况下,它应该使用响应体中获得的

我一直在尝试为我的应用程序的QnA编写自动化测试代码。今天在运行测试时,我注意到所有的测试都通过了,不管我给几个QnA的输入是否错误

当我检查时,我发现QNAAPI返回的响应代码带有有效的头,比如身份验证密钥,不管输入到特定QnA的是正确的还是错误的,响应代码总是200 Ok。因此,我的所有测试都通过了,因为验证响应代码为200OK的步骤始终通过。响应也是正确的Json格式,因此格式化测试也一直通过

我理解这是Api不断返回200 Ok状态代码的原因,但我认为理想情况下,它应该使用响应体中获得的响应的状态代码进行响应。唯一的区别是,当向Api提供无效输入时,“answer”响应主体参数返回一条错误文本消息,如:“在KB中找不到良好匹配。”如下所示

然而,如果机器人有有效的输入,则获得以下响应。请注意,唯一的区别在于响应主体中“应答”响应参数的值

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

在我看来,这只是QNAAPI自动化代码级测试的临时解决方案。是否仍然可以修改这些API返回的响应代码,以反映响应体中的实际响应。如果可以做到这一点,那么可以在响应代码不匹配时立即停止测试,从而节省时间、精力并提高性能。如果有任何其他方法来改进这项工作,我愿意接受建议


注意:我使用调用后方法来测试我的API。

HTTP状态代码就是这样。它们为您提供特定于HTTP请求的信息,因此,例如,如果请求未能到达服务器,您可能需要不同的代码。在您的QnA Maker应用程序中,该应用程序的目的是搜索知识库并返回详细的响应,知道知识库可能不包含所问的问题。如果QnA Maker应用程序搜索知识库并没有找到好的答案,那么该应用程序仍然完成了它的工作并正确执行,因此,如果它能够将无法找到答案的信息发送回,那么HTTP状态代码没有理由表示除成功之外的任何其他信息。这不是一个bug

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

if (results.First().Id < 0)
{
    // No good match was found
}
if(results.First().Id<0)
{
//没有找到合适的匹配项
}

您还误解了QnA Maker团队可能会通过修改某种共享服务来改变您的“不匹配”响应。您有自己的QnA Maker应用程序,您正在为其调用端点,这就是消息的定义。正如所解释的那样,唯一能改变它的人就是你。

我的回答可以接受吗?