С таким мощным инструментом, как Postman, как мы можем не написать простую запись в блоге о применении инструмента В этой статье рассказывается об использовании сценариев предварительного запроса, которые представляют собой расширенную версию базового использования.
1. Предпосылки
Когда мы тестируем API, во многих случаях в параметрах запроса участвуют некоторые зашифрованные параметры, например подписи.
Когда мы используем Postman для тестирования, мы надеемся, что когда мы определим алгоритм шифрования для подписи, Postman сможет автоматически вычислить его для нас и передать в качестве параметра.
В этой статье в качестве примера рассматривается автоматическое создание подписей с использованием кодировки Base64 и шифрования MD5.
2. Используйте
1. Описание заполнителя
Начнем с каштана, запрашивающего адрес:http://localhost:9090/apps/task/inWorkList/{{token}}?signed={{signed}}
Обратите внимание, что заполнители токена и подписи в адресе заключены в две пары фигурных скобок, а затем мы заменим параметры здесь после расчета и генерации в других местах,
Замененный адрес:http://localhost:9090/apps/task/inWorkList/1qaz2wsx?signed=1qaz2wsx
Примечание. То же самое написание заполнителя мы можем применить к URI, заголовкам, телу.
2. Введение в переменные
Представленные выше заполнители на самом деле получены из переменных Postman.
В Postman переменные различаются между глобальными переменными (global) и переменными среды (environment), и все они представлены в виде пар ключ-значение k-v.
Примечание. Значение обычно имеет строковый формат, и нам нужно использовать JSON.stringify() и JSON.parse() для сериализации и десериализации при его использовании.
Как следует из названия, глобальные переменные можно использовать где угодно, а переменные окружения используются только в текущем окружении.Конечно, если один и тот же ключ определен в двух местах, например, kv of signed: 1qaz2wsx определен в обоих местах ключ пары значений, переменные окружения имеют более высокий приоритет.
3. Управление переменными
Есть два способа, один из которых заключается в работе непосредственно с клиентом, как показано на рисунке:
Во-вторых, используйте код для получения и установки в области предварительного запроса, вы можете увидеть с первого взгляда:
// 清除全局变量
pm.globals.unset("variable_key");
// 清除环境变量
pm.environment.unset("variable_key");
// 获取全局变量
pm.globals.get("variable_key");
// 获取变量
pm.variables.get("variable_key");
// 获取环境变量
pm.environment.get("variable_key");
// 设置全局变量
pm.globals.set("variable_key", "variable_value");
// 设置环境变量
pm.environment.set("variable_key", "variable_value");
На самом деле, есть подсказки для общих операций на стороне клиента:
4. Подробное объяснение кода
Вставьте код напрямую, указав, что генерация токена и подписи здесь зависит от метки времени (аналогично: 20181225224000), которая медленно соединяется с помощью JS Date().
токен кодируется base64.
подписано шифрование MD5.
// 变量
// uid
var uid = '7777'
var api_sig_str = pm.variables.get("api_signed_str");
// 时间
var d = new Date()
var year = d.getFullYear().toString()
var month = (d.getMonth() + 1).toString()
month = dateLengtgInit(month)
var day = d.getDate().toString()
day = dateLengtgInit(day)
var hour = d.getHours().toString()
hour = dateLengtgInit(hour)
var minute = d.getMinutes().toString()
minute = dateLengtgInit(minute)
var second = d.getSeconds().toString()
second = dateLengtgInit(second)
var time = year + month + day + hour + minute + second
console.log(time)
// token(base64)
var token = CryptoJS.enc.Base64.stringify(uid + time)
console.log(token)
// postman.setGlobalVariable("token",token)
pm.environment.set("token",token)
//signed (md5加密)
var signed = api_sig_str + '_' + uid + '_' + time
console.log(signed)
var signedMd5 = CryptoJS.MD5(signed).toString()
console.log(signedMd5)
// pm.globals.set("signed",signedMd5)
pm.environment.set("signed",signedMd5)
// 方法定义
function dateLengtgInit(num){
if (num.length==1){
return "0"+num;
} else {
return num
}
}
5. Наступить на яму
На этом этапе он сообщит об ошибке при выполнении:
There was an error in evaluating the Pre-request Script: TypeError: r.clamp is not a function
Медленная отладка обнаружила, что на самом деле была ошибка в кодировке base64, нам нужно сначала выполнить кодировку Utf8,
Следующий код собирается:var token = CryptoJS.enc.Base64.stringify(uid + time)
Изменить на:var token = CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(uid + time))
3. Ссылка
Официальная документация:адрес ссылки
Оригинальный адрес:ву ву ву Джет Чен талант/почтальон-боится жары…