Параметризованные тесты Postman с фактическими значениями и ожидаемыми ошибками для одного и того же запроса

У меня есть запрос с количеством тестовых случаев, одной и той же конечной точкой, разными фактическими значениями, разными ожидаемыми сообщениями об ошибках. Я хотел бы создать параметризованный запрос, отправляющий определенное значение, и проверить конкретное сообщение об ошибке из списка со всеми случаями. Тело запроса:

{
"username": "{{username}}",
"password": "{{password}}",
 ...

}

Ответ:

{
"error_message": "{{error_message}}",
"error_code": "{{error_code}}"
}

Сообщение об ошибке изменяется в зависимости от различных случаев:

  1. Пропущенное имя пользователя
  2. Пропущенный пароль
  3. Неверный пароль или имя пользователя
  4. и т.д

Теперь у меня есть отдельный запрос на каждый случай. Вопрос:

Есть ли способ иметь 1 запрос с набором разных значений, проверяя определенные сообщения об ошибках/коды?


person Vova    schedule 18.03.2021    source источник
comment
Вот как вы проводите тестирование на основе данных, используете csv или r json и запускаете свой скрипт.   -  person PDHide    schedule 18.03.2021
comment
Я позволю @PDHide оставить полный ответ на этот вопрос, но это именно так, как он упомянул. По сути, создайте файл CSV с именами переменных в качестве заголовков и значениями для каждого из тестов в новых строках под заголовками. Используйте этот файл данных в бегуне коллекции.   -  person Danny Dainton    schedule 18.03.2021
comment
@DannyDainton, конечно, спасибо, Дэнни ждал, чтобы узнать, было ли это тем, чего хотели оперативники, поскольку это прямой вариант использования. Как Дэнни упомянул, у почтальона действительно обширная документация, которую вы можете использовать learning.postman.com/docs/running-collections/   -  person PDHide    schedule 18.03.2021


Ответы (2)


Добавление еще одного ответа о том, как запускать данные, полученные из того же запроса:

Создайте переменную среды с именем csv, скопируйте приведенное ниже содержимое и вставьте его как значение:

username,password,error_message,error_code
username1,password1,errormessage1,errorcode1
username1,password1,errormessage1,errorcode1

введите здесь описание изображения

Теперь в pr-запрос добавляем:

if (!pm.variables.get("index")) {

    const parse = require('csv-parse/lib/sync')
    //Environmental variable where we copy-pasted the csv content
    const input = pm.environment.get("csv");
    const records = parse(input, {
        columns: true,
        skip_empty_lines: true
    })

    pm.variables.set("index", 0)
    pm.variables.set("records", records)
}

records = pm.variables.get("records")
index = pm.variables.get("index")
if (index !== records.length) {
    for (let i of Object.entries(records[index])) {
        pm.variables.set(i[0], i[1])
    }
    pm.variables.set("index", ++index)
    pm.variables.get("index")===records.length?null:postman.setNextRequest(pm.info.requestName)
}

Теперь вы можете запустить данные, управляемые для этого конкретного запроса:

Например, коллекция:

https://www.getpostman.com/collections/eb144d613b7becb22482

используйте те же данные, что и содержимое переменной среды, теперь запустите коллекцию, используя бегун коллекции или newman

Вывод

введите здесь описание изображения

person PDHide    schedule 18.03.2021
comment
когда мы повторно запускаем этот запрос, не должна ли строка: pm.variables.set(index, 0) запускаться каждый раз в предварительном условии nextRequest? - person Vova; 19.03.2021
comment
pm.variable создает локальную переменную, время ее жизни — это полная коллекция или запуск Newman. Итак, когда вы начнете выполнение, у вас будет неопределенное значение индекса, и оно будет установлено на 0, а затем продолжит увеличиваться. - person PDHide; 19.03.2021
comment
когда ваш запуск завершится, все переменные будут уничтожены. Для следующего запуска снова значение начинается с неопределенного - person PDHide; 19.03.2021
comment
@Vova смотрите обновленный ответ, который он устанавливал для следующего запроса даже для последней итерации, я добавил шаг, чтобы проверить, была ли его последняя итерация, а затем не отправлять следующий запрос - person PDHide; 19.03.2021

Создайте CSV-файл:

username,password,error_message,error_code
username1,password1,errormessage1,errorcode1
username1,password1,errormessage1,errorcode1

Теперь используйте это как файл данных в бегуне коллекции или в Newman.

имя переменной совпадает с именем столбца, и для каждой итерации у вас будет соответствующее значение столбца строки в качестве значения переменной. Например, для iteration1 имя пользователя будет username1.

. Как упомянул Дэнни, почтальон имеет действительно богатую документацию, которую вы можете использовать.

https://learning.postman.com/docs/running-collections/working-with-data-files/

person PDHide    schedule 18.03.2021
comment
это действительно выглядит великолепно. Но мне нужно хранить дополнительный файл с моей коллекцией и env. Есть ли возможность разрешить это внутри тестового запроса? - person Vova; 19.03.2021
comment
Не могли бы вы сделать это более ясным. я не мог понять комментарий - person PDHide; 19.03.2021
comment
Я имею в виду, есть ли способ реализовать это без дополнительных файлов? просто сбор и env - person Vova; 19.03.2021
comment
Пожалуйста, смотрите добавленный ответ - person PDHide; 19.03.2021
comment
что, если мне нужно запустить мою коллекцию почтальонов в CI через общую рабочую область без возможности экспортировать файл csv? локально кажется, что это решает мой вопрос - person Vova; 19.03.2021
comment
Посмотрите недавно добавленный ответ, вместо этого вы можете сохранить значение csv как переменную среды. - person PDHide; 19.03.2021
comment
Для ci\cd мы также в идеальных случаях должны отправить файл csv, это то, что мы делаем во всех фреймворках, включая селен. - person PDHide; 19.03.2021