QnA Api возвращает код ответа 200 OK независимо от того, нет совпадений в КБ - PullRequest
2 голосов
/ 15 января 2020

Я пытался закодировать тест автоматизации для QnA моего приложения. Сегодня во время выполнения тестов я заметил, что все тесты проходили независимо от неправильных входных данных, которые я дал нескольким QnA.

Когда я проверил, я обнаружил, что код ответа, возвращаемый QnA Api с допустимыми заголовками, такими как ключ аутентификации, всегда был 200 Ok независимо от того, был ли ввод в конкретный QnA правильным или неправильным. Из-за этого все мои тесты проходили, так как шаг, который подтвердил, что код ответа 200 Ok, всегда проходил успешно. Ответ также был в правильном формате Json, поэтому тест на форматирование также проходил успешно.

Я понимаю, что это причина того, что Api продолжает возвращать код состояния 200 Ok, но я считаю, что в идеале он должен отвечать кодом состояния относительно ответа, полученного в теле ответа. Единственное отличие заключалось в том, что, когда в Api был передан неверный ввод, параметр тела ответа 'answer' возвращал текстовое сообщение об ошибке, например: «В КБ не найдено хорошего соответствия». Это можно увидеть ниже.

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 Ответ

2 голосов
/ 15 января 2020

Коды состояния HTTP - только это. Они дают вам информацию, указанную c для HTTP-запросов, поэтому, например, вы можете ожидать другой код, если запрос не достигнет сервера. В случае вашего приложения QnA Maker его целью является поиск в базе знаний и возврат подробного ответа, зная, что база знаний может не содержать заданный вопрос. Если приложение QnA Maker выполняет поиск в базе знаний и не находит хорошего ответа, то приложение все еще выполняет свою работу и работает правильно, и поэтому, если оно может отправить информацию обратно, что оно не может найти ответ, то нет никаких причин для кода состояния HTTP, чтобы указать что-либо кроме успеха. Это не ошибка.

Если вы хотите определить, что совпадений не найдено, вам не следует использовать код состояния HTTP для этого. Вы говорите, что «единственная разница» в ответе состоит в том, что вы получаете ответ типа «Не найдено подходящего соответствия в КБ», но по-другому смотрите на этот ответ. Там только один ответ и оценка 0, но это может быть не так надежно, как вы хотите. Настоящим показателем является то, что идентификатор равен -1, а источник равен нулю, а массив вопросов пуст, поэтому вы можете легко сделать что-то вроде этого:

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

У вас также есть неправильное понимание, что команда QnA Maker может изменить ваш ответ «не подходит», изменив какой-либо общий сервис. У вас есть собственное приложение QnA Maker, для которого вы вызываете конечную точку, и именно здесь определяется сообщение. Единственный человек, который может это изменить, это вы, как объяснено здесь и здесь .

...