Postman xmysql不切換環(huán)境緩存數(shù)據到本地
背景
公司內部有個標準產品(對外開發(fā)API接口),該產品迭代過程中會產生很多版本,多環(huán)境。開發(fā)及聯(lián)調過程中,代碼經常要在不同版本,不同環(huán)境中進行切換。
聯(lián)調過程中,需要使用不同環(huán)境配合Postman進行調試。其中大部分傳參需要用到客戶的ID或者企業(yè)的ID。
痛點
常規(guī)獲取ID的的方法:
1. 連接對應的環(huán)境
2. 找到對應的數(shù)據庫
3. 找到對應的表名
4. 輸入sql查詢語句并執(zhí)行,查詢到對應的id
5. 復制id到postman中
假設需要找3個id,則至少需要操作3倍以上的步驟才能完成接口發(fā)起?;谶@種重復性動作比較多,考慮通過其他方法來解決該問題。
1. 想法1--后臺提供接口
后臺開發(fā)接口,提供查詢對應的id接口。
1. 后臺不愿意增加工作量
2. 產品一直在迭代。就算新版本有新增接口,但老版本(部署的老環(huán)境)并不具備新增接口的功能。
從實際情況出發(fā)考慮可行性,走不通。
2. 想法2--nodejs搭服務
利用nodejs啟用服務,編寫服務鏈接,通過postman調用接口,根據傳參,連接不同的環(huán)境數(shù)據庫,返回對應數(shù)據。
1. 用nodejs編寫服務比較簡單(可行)
2. 通過postman去調用接口,需要傳參,意味著需要手動輸入環(huán)境,或者配置不同的環(huán)境。(增加很多配置工作量)
3. node服務需要在調用接口前執(zhí)行。(對于開發(fā)者來說比較簡單,但對于測試組的小伙伴就不友好,增加工作量)
綜合評估之后,想法2可行,但不友好?;灸軡M足開發(fā)的可行性,但對于測試同學來說,可能會有些配置的工作量,并不友好。
3. 想法3--自定義執(zhí)行腳本
通過xmysql庫,執(zhí)行連接命令,可以連接不同的環(huán)境,并返回對應的數(shù)據。
連接方法如下:
// 啟動
xmysql -h host_name -o port -u user_name -p user_password -d database_name// 通過瀏覽器訪問account表
http://localhost:3000/api/account?_size=100&_p=0
注意:xmysql
請求列表數(shù)據時,每次最多返回100條
需求是在每個業(yè)務請求能夠獲取任意客戶id, 想法是把account表數(shù)據全部緩存到本地postman中,在業(yè)務代碼中,通過全局方法,從緩存數(shù)據找到對應的客戶id。(聯(lián)調過程中,基本數(shù)據沒什么大變化,account表只需同步一次),postman全局方法請參考另外一篇文章:《Postman全局注冊方法及對返回數(shù)據可視化處理》, 在postman開啟一個請求業(yè)務,并在pre-request script
中編寫同步數(shù)據代碼
/* 獲取個人數(shù)據 */ const personsObj = {} const getPersonData = (page) => { pm.sendRequest(`http://localhost:3000/api/account?_where=(status,eq,2)and(remove_flag,eq,0)&_size=100&_p=${page}`, (err, response) => { var data = response.json(); // 獲取賬戶對應的id const psersonAccountMap = data.reduce((total, currentValue) => { const _account = currentValue.account.replace('+86-','') total[_account] = currentValue return total }, personsObj) if (data.length == 100) { getPersonData(++page) } else { pm.environment.set("psersonAccountMap", psersonAccountMap); // 數(shù)據緩存到環(huán)境變量中 } }) } getPersonData(0)
在每個業(yè)務中,獲取客戶的id的方法
const utils = eval(globals.loadUtils); // 全局方法引入 // 獲取默認個人ID;不傳參,取默認值,可傳參:utils.getPerson('賬號') let personSignerId = utils.getPerson()
啟動xmysql服務雖然簡單,就一條語句xmysql -h host_name -o port -u user_name -p user_password -d database_name
, 但每次都輸入上面的執(zhí)行語句, 每次都需要更改參數(shù),也不是辦法;此時想到用批量執(zhí)行bat腳本來替代人工操作。
第一版:滿足基本功能
創(chuàng)建linkDB.bat文件
注意:編碼格式ANSI,否則中文會出現(xiàn)亂碼
代碼如下:
# @set database=database1 # @set database=database2 # @set database=database3 @set database=database4 @set host=xx.xx.xx.xx @set port=3306 @set user=xxx @set pwd=xxxxxxx start cmd /k "xmysql -h %host% -o %port% -u %user% -p %pwd% -d %database%"
通過解開注釋,設置不同的環(huán)境。win系統(tǒng)下,直接執(zhí)行bat文件即可鏈接。但每次通過修改注釋也不是很直觀,需要點開文件去編輯,繁瑣的步驟也多。
第二版:參數(shù)預先設置
改進linkDB.bat文件
通過預設環(huán)境參數(shù)、數(shù)據庫表,等信息到代碼中,執(zhí)行腳本后,通過命令行輸入對應的環(huán)境和數(shù)據庫表,最后執(zhí)行xmysql
語句連接數(shù)據庫
@echo off @set database='' @set host='' @set port='' @set user='' @set pwd='' Title DataBase Color 0A :setep1 echo. echo 【第一步:選擇環(huán)境】 echo 1. 測試環(huán)境 echo 2. UAT環(huán)境 echo. set /p env=選擇環(huán)境: if "%env%"=="1" call :env1 if "%env%"=="2" call :env2 :env1 set host=168.168.168.168 set port=3308 set user=xxxx set pwd=xxxxxxx goto :setep2 :env2 set host=178.178.178.178 set port=8808 set user=xxxx set pwd=xxxxxxx goto :setep2 :setep2 echo. echo 【第二步:選擇數(shù)據庫】 echo 0. 手動設置數(shù)據庫名 echo 1. dev-seal echo 2. dev-cert echo. set /p n=選擇數(shù)據庫: if "%n%"=="" cls&goto :setep2 if "%n%"=="0" call :goDB0 if "%n%"=="1" call :goDB1 pause goto :eof :goDB0 set /p manualDB=輸入數(shù)據庫名: set database=%manualDB% goto :confirm :goDB1 set database=dev_seal_database1 goto :confirm :confirm cls echo ═══════════════════════════════════════ echo 鏈接數(shù)據庫 echo 目標: %host%:%port% echo 數(shù)據庫: %database% echo 用戶密碼: %user% %pwd% echo ═══════════════════════════════════════ set /p lastConfirm=是否正確(y/n): if "%lastConfirm%"=="y" goto :connect if "%lastConfirm%"=="n" cls&goto :setep1 :connect start cmd /k "xmysql -h %host% -o %port% -u %user% -p %pwd% -d %database%" exit
到這一步的時候,已經實現(xiàn)了win系統(tǒng)下的用戶需求了。但回首一看,測試小姐姐用的是蘋果mac系統(tǒng),辛辛苦苦編寫的bat文件,在mac系統(tǒng)下,直接抓瞎。只能另辟蹊徑
電三版:兼容win/mac系統(tǒng)(最終版)
win/mac一鍵啟動腳本
考慮到mac系統(tǒng)不能兼容bat文件,改用shell
執(zhí)行腳本能兼容win/mac
系統(tǒng), 前提是win系統(tǒng)需要安裝git bash之類的執(zhí)行環(huán)境?;诠臼褂胓it代碼管理工具,剛好有條件滿足。
代碼擼起來,最終代碼共有3個文件:
linkDB.sh 為最終執(zhí)行腳本
mac.command 蘋果mac系統(tǒng)下的啟動腳本
win.bat 微軟window系統(tǒng)下的啟動腳本
mac.command
代碼如下:
#!/bin/bash cd $(dirname $0) exec ./linkDB.sh
語法很簡單,就是進入執(zhí)行腳本的文件夾路徑,然后執(zhí)行linkDb.sh
文件
win.bat
代碼如下:
@echo off set port=3000 # set /p port="請輸入要關閉的端口,默認3000:" echo 開始搜索'netstat -ano^|findstr ":%port%" ' for /f "delims=" %%i in ( 'netstat -ano^|findstr :%port%' ) do set pid_line=%%i rem set pid=%pid_line:~-6% if "%pid_line%" == "" ( echo 沒有找到! goto flag_exit ) else ( echo 已查找到: %pid_line% for %%a in (%pid_line%) do (set pid=%%a) ) echo 占用端口%port%的進程pid:%pid%;現(xiàn)在開始結束它 TASKKILL /PID %pid% /F :flag_exit start C:\Program" "Files\Git\git-bash.exe "linkDB.sh"
win系統(tǒng)下代碼相對復雜一點,原因是第一次連接數(shù)據庫,關閉窗口后3000端口可能會一直在占用,進程沒有被結束。所以中間插入了結束3000端口進程的方法,然后啟動git-bash
執(zhí)行linkDb.sh
文件
linkDb.sh
代碼如下:
#!/bin/bash # 環(huán)境配置,規(guī)則:自定義環(huán)境名,ip,port,用戶,密碼 evnList=( '測試環(huán)境,30.31.16.11,3308,user1,password1' 'UAT環(huán)境,30.31.16.12,3301,user2,password2' ) # 可配置常用數(shù)據庫名 database1='dev-seal' database2='dev_cert' database3='uat_seal' devDBList=($database1 $database2 $database3) # 以下為主程序代碼,無須修改 host='' port='' user='' pwd='' databaseCn='' database='' setep3() { clear echo ═════════════【連接數(shù)據庫】════════════ echo 目標: $databaseCn echo 地址: $host:$port echo 庫名: $database echo 用戶: $user echo 密碼: $pwd echo ═══════════════════════════════════════ echo read -p "正確(y), 錯誤重來(n):" lastConfirm if [[ $lastConfirm == 'y' ]]; then clear echo '開始連接數(shù)據庫...' xmysql -h $host -o $port -u $user -p $pwd -d $database # exit else setep1; fi } setep2() { clear echo '【第二步:選擇數(shù)據庫】' echo ' ' 0. 手動輸入 for i in "${!devDBList[@]}" do index=`expr $i + 1` echo ' ' $index. ${devDBList[i]} done echo read -p "選擇數(shù)據庫編號:" targetDB if [[ $targetDB -eq 0 ]]; then read -p "輸入數(shù)據庫名:" target if [[ $target == '' ]]; then setep2 else database=$target fi else database=${devDBList[$targetDB-1]} fi echo $database setep3; } setep1(){ clear echo '【第一步:選擇環(huán)境】' for i in "${!evnList[@]}" do string=${evnList[$i]} stringList=(${string//,/ }) envName=${stringList[0]} index=`expr $i + 1` echo ' ' $index. ${envName} done echo read -p "選擇環(huán)境:" env if [[ $env == '' ]]; then setep1 fi targetEnv=${evnList[$env-1]} params=(${targetEnv//,/ }) databaseCn=${params[0]} # 目標數(shù)據庫名 host=${params[1]} # 數(shù)據庫ip port=${params[2]} # 數(shù)據庫端口 user=${params[3]} # 用戶 pwd=${params[4]} # 密碼 setep2; }; setep1;
最終版使用須知
============= 必讀 =============
1. 安裝node.js
下載地址: https://nodejs.org/zh-cn/
2. 安裝xmysql
執(zhí)行: npm install -g xmysql
參考地址:https://www.npmjs.com/package/xmysql#xjoin
========== mac 系統(tǒng)必讀 ==========
1、首次使用,啟動命令行
1.1、cd 進入當前文件夾
1.2、執(zhí)行 chmod +x mac.command
1.3、執(zhí)行 chmod +x linkDB.sh
2、后期使用,一鍵啟動mac.command文件
========== win 系統(tǒng)必讀 ==========
1. 首次使用,需要根據GIT BASH的安裝位置,修改win.bat文件中的路徑
2. 后期使用,一鍵啟動win.bat文件
總結
經過這樣折騰以后,基本滿足傻瓜式啟動方式,減少繁瑣的操作,如有環(huán)境、數(shù)據庫名的變更,只需要在linkDB.sh
中進行添加環(huán)境、添加數(shù)據庫名即可,一次編寫,多次使用。
以上就是Postman xmysql不切換環(huán)境緩存數(shù)據到本地的詳細內容,更多關于Postman xmysql本地數(shù)據緩存的資料請關注腳本之家其它相關文章!
相關文章
詳解Node.js amqplib 連接 Rabbit MQ最佳實踐
這篇文章主要介紹了詳解Node.js amqplib 連接 Rabbit MQ最佳實踐,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-01-01Node.js實現(xiàn)兼容IE789的文件上傳進度條
這篇文章給大家介紹了如何實現(xiàn)兼容IE789的文件上傳進度條,如果你的工作用過上傳圖片或上傳大文件啥的,一般在IE低版本瀏覽器里,會切換到用flash解決,可是有些人肯定不會為了老舊IE的進度條而去學flash,那么下面來一起看看吧。2016-09-09node 使用 nodemailer工具發(fā)送驗證碼到郵箱
最近閑著沒事,我就在練習使用node和mysql編寫接口,計劃寫一個完整的vue系統(tǒng),這篇文章主要介紹了node 使用 nodemailer工具發(fā)送驗證碼到郵箱,需要的朋友可以參考下2023-10-10Node.js 使用遞歸實現(xiàn)遍歷文件夾中所有文件
這篇文章主要介紹了Node.js使用遞歸實現(xiàn)遍歷文件夾中所有文件,需要的朋友可以參考下2017-09-09