Скрипты и тесты
Скрипты пишутся на JavaScript и совместимы с Postman. Pre-request выполняется до отправки, post-response — после ответа. Уровни: коллекция → папка → запрос (в этом порядке).
Тесты
pm.test("status 200", () => pm.response.to.have.status(200));
pm.test("user", () => {
const user = pm.response.json();
pm.expect(user).to.have.property("id");
pm.expect(user.email).to.match(/@/);
pm.expect(user.roles).to.be.an("array").that.includes("admin");
});
pm.test("быстро", () => pm.expect(pm.response.responseTime).to.be.below(500));
Результаты — на вкладке Tests ответа, в Runner и в отчёте CLI.
pm.expect
equal, eql (глубокое сравнение), above/below/least/most/within, a/an("string"|"array"|…),
include/contain, property(name[, value]), lengthOf, match, oneOf, keys, members,
satisfy, ok/true/false/null/undefined/exist/empty, отрицание not, цепочки to.be.and.that.has….
pm.response
code, status, headers.get(name), responseTime, json(), text(),
to.have.status(n), to.have.header(name[, value]), to.be.ok, to.be.json,
to.have.jsonBody(path, value).
Переменные
pm.environment.set("token", pm.response.json().token); // текущее значение, не в Git
pm.collectionVariables.get("baseUrl");
pm.variables.set("ts", Date.now()); // до конца запроса / прогона
pm.iterationData.get("user"); // строка data-файла Runner
pm.variables.replaceIn("{{baseUrl}}/users");
Изменение запроса (pre-request)
pm.request.headers.upsert({ key: "X-Request-Id", value: pm.variables.replaceIn("{{$guid}}") });
pm.request.url = pm.variables.replaceIn("{{baseUrl}}/v2/users");
pm.request.body.raw = JSON.stringify({ ts: Date.now() });
Дополнительные запросы и подписи
const CryptoJS = require("crypto-js");
const sig = CryptoJS.HmacSHA256(pm.request.body.raw, pm.environment.get("secret")).toString();
pm.request.headers.upsert({ key: "X-Signature", value: sig });
const res = await pm.sendRequest({ url: "{{baseUrl}}/token", method: "POST" });
pm.variables.set("token", res.json().token);
Доступны require("crypto-js" | "uuid" | "chai"), atob, btoa, console.log (вкладка Console),
pm.cookies.get(name) и pm.cookies.jar().
Совместимость
- Postman:
pm.*, старый APIpostman.setEnvironmentVariable,tests["…"] = …,responseBody. - Bruno:
bru.setVar/getVar/setEnvVar,req.setHeader/getBody,res.status/body/getHeader,test(), блокиassert,vars:pre-request/post-responseпри импорте превращаются в скрипты.
Скрипт выполняется не дольше 10 секунд. Если pre-request скрипт упал, запрос не отправляется.
Runner
Кнопка ▶ в шапке коллекции или «Запустить» на папке: окружение, число итераций, пауза, data-файл
(CSV или JSON — значения доступны через pm.iterationData), «Остановить при первой ошибке».