亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營的一線實(shí)戰(zhàn)洞察。

Postman接口測(cè)試進(jìn)階:從腳本自動(dòng)化到CI/CD集成工作流

Postman接口測(cè)試進(jìn)階:從腳本自動(dòng)化到CI/CD集成工作流 做接口測(cè)試這件事越往后越會(huì)發(fā)現(xiàn)單條請(qǐng)求的點(diǎn)一點(diǎn)、看響應(yīng)根本撐不起真實(shí)項(xiàng)目的回歸需求。尤其是當(dāng)接口數(shù)量破百、環(huán)境從開發(fā)切到測(cè)試再切到生產(chǎn)、每次發(fā)版前要人工過二三十條核心鏈路的時(shí)候效率和安全完全靠當(dāng)時(shí)的專注度硬撐一次漏改參數(shù)、一次忘了更新token整個(gè)驗(yàn)證就廢了。Postman自動(dòng)化腳本進(jìn)階的核心價(jià)值就是把這種人肉回歸變成可重復(fù)、可追溯、可串聯(lián)的自動(dòng)化工作流——用Pre-request Script準(zhǔn)備前置數(shù)據(jù)、用Tests腳本寫斷言、用變量和環(huán)境串聯(lián)請(qǐng)求、用數(shù)據(jù)驅(qū)動(dòng)跑多組參數(shù)、最后用Newman把整套東西集成到持續(xù)集成流水線里。這篇內(nèi)容我會(huì)把完整的實(shí)現(xiàn)思路、腳本寫法、參數(shù)設(shè)計(jì)邏輯和踩過的坑全部整理出來適合已經(jīng)用過Postman基礎(chǔ)功能、但想把它真正變成團(tuán)隊(duì)可復(fù)用接口測(cè)試資產(chǎn)的測(cè)試工程師和前后端開發(fā)。不講花架子只聊能直接落到項(xiàng)目里的方案。1. 整體設(shè)計(jì)拆解為什么Postman能承載接口工作流1.1 從集合到工作流的轉(zhuǎn)變邏輯很多人用Postman核心操作就是建一個(gè)Collection然后把接口按模塊丟進(jìn)去運(yùn)行的時(shí)候一條一條點(diǎn)。這樣用其實(shí)只發(fā)揮了Postman三分之一的能力——它本質(zhì)是一個(gè)請(qǐng)求編排引擎而不是請(qǐng)求記事本。一個(gè)真正高效的接口測(cè)試工作流包含三個(gè)層次第一層是請(qǐng)求層URL、Header、Body、參數(shù)這些基礎(chǔ)信息第二層是邏輯層請(qǐng)求之間要做數(shù)據(jù)傳遞、前置準(zhǔn)備、后置斷言、甚至條件分支第三層是集成層腳本要能在無人值守的情況下被命令行工具跑起來輸出測(cè)試報(bào)告接入CI流程。Postman的Collection恰好把這三層全部覆蓋了。它自帶腳本執(zhí)行環(huán)境Pre-request Script和Tests兩個(gè)鉤子自帶變量層級(jí)體系Global、Environment、Collection、Local還通過Newman把GraphQL/REST接口測(cè)試能力抽出來成為純命令行工具。理解了這三層你就知道為什么不用JMeter也能搭出輕量但強(qiáng)大的接口測(cè)試工作流。我最初踩過一個(gè)大坑把所有接口按登錄、用戶、訂單、支付這種模塊建了五個(gè)Collection每個(gè)Collection里各寫各的斷言和數(shù)據(jù)準(zhǔn)備腳本。結(jié)果一跑起來登錄token在A集合里配置的環(huán)境變量B集合完全讀不到后來改成全部塞進(jìn)一個(gè)Collection里又發(fā)現(xiàn)用例和用例之間的數(shù)據(jù)耦合嚴(yán)重跑一條訂單接口會(huì)把整組用例全部觸發(fā)。最終的解法是按業(yè)務(wù)鏈路組織Collection按變量層級(jí)劃分?jǐn)?shù)據(jù)共享范圍。具體怎么組織下一小節(jié)分解。1.2 為什么不用其他工具而選Postman這套方案很多團(tuán)隊(duì)在選擇接口自動(dòng)化方案時(shí)會(huì)糾結(jié)JMeter、Apifox、PythonRequests自研框架還有Postman四選一。我的使用體會(huì)是這樣的JMeter側(cè)重高并發(fā)壓測(cè)腳本維護(hù)成本和二次開發(fā)門檻都偏高。日常接口功能回歸用JMeter屬于殺雞用牛刀可視化斷言不夠直觀。PythonRequests自研靈活度滿分但需要搭建框架、處理報(bào)告、維護(hù)CI腳本初期投入2~3周是常態(tài)。適合接口數(shù)量龐大、斷言邏輯復(fù)雜的長期項(xiàng)目但對(duì)中小團(tuán)隊(duì)來說太重了。Apifox在接口管理和Mock方面做得不錯(cuò)但自動(dòng)化能力的成熟度和社區(qū)資料量比Postman還差一截尤其涉及腳本進(jìn)階寫法時(shí)能搜到的參考有限。PostmanNewman學(xué)習(xí)曲線平緩腳本基于JavaScript前端/測(cè)試背景的人上手非??鞌嘌浴⒆兞?、數(shù)據(jù)驅(qū)動(dòng)、CI集成能力齊全。選型的關(guān)鍵不是哪個(gè)最強(qiáng)而是哪個(gè)最適合自己團(tuán)隊(duì)的現(xiàn)狀。Postman這套方案最大的優(yōu)勢(shì)在于不需要額外搭代碼框架能用最輕的代價(jià)把接口測(cè)試從手動(dòng)操作升級(jí)到自動(dòng)化工作流。如果你團(tuán)隊(duì)已經(jīng)有成熟的Python測(cè)試框架當(dāng)然可以不遷移但如果不具備那個(gè)條件從Postman起步是性價(jià)比最高的路徑。2. 核心腳本機(jī)制拆解變量層級(jí)、執(zhí)行順序與斷言體系2.1 變量層級(jí)與作用域環(huán)境變量怎么用才不會(huì)亂Postman里變量有四個(gè)層級(jí)優(yōu)先級(jí)從高到低依次是Local局部腳本變量 Data數(shù)據(jù)文件變量 Environment環(huán)境變量 Collection集合變量 Global全局變量。這個(gè)概念不搞清楚腳本寫多了必然出變量值為什么和預(yù)想不一致的詭異Bug。我的習(xí)慣是這么劃分存放規(guī)則變量類型適合存放的內(nèi)容典型示例Global全局跨環(huán)境的固定配置基礎(chǔ)URL的前綴標(biāo)識(shí)、公司公共域名Environment環(huán)境隨時(shí)間/環(huán)境變化的值baseUrl、測(cè)試賬號(hào)密碼、redis緩存開關(guān)Collection集合該業(yè)務(wù)鏈路固定不變的內(nèi)容支付回調(diào)地址、公共請(qǐng)求頭固定參數(shù)Local局部當(dāng)前腳本內(nèi)臨時(shí)數(shù)據(jù)循環(huán)計(jì)數(shù)的索引、臨時(shí)計(jì)算的簽名全局變量我?guī)缀醪挥靡驗(yàn)樗菀妆画h(huán)境切換時(shí)誤改而且調(diào)試時(shí)很難發(fā)現(xiàn)來源。環(huán)境變量是我最常用的層級(jí)——我會(huì)為開發(fā)、測(cè)試、生產(chǎn)各建一套環(huán)境里面放baseUrl、超時(shí)設(shè)置、需要切換的賬號(hào)信息。有一個(gè)細(xì)節(jié)千萬注意使用變量時(shí){{variableName}}的語法是引用如果在Tests腳本中用pm.environment.get(token)取出來再去pm.environment.set(token, newVal)這個(gè)是賦值。很多人混淆了引用和賦值導(dǎo)致腳本執(zhí)行了但下一個(gè)請(qǐng)求拿到的還是舊值。2.2 腳本執(zhí)行順序Pre-request Script與Tests的時(shí)序關(guān)系每個(gè)Postman請(qǐng)求的生命周期是固定的Pre-request Script → 發(fā)送請(qǐng)求 → 收到響應(yīng) → Tests ScriptPre-request Script在請(qǐng)求發(fā)出之前運(yùn)行適合做以下事情生成動(dòng)態(tài)簽名比如時(shí)間戳拼接、MD5/SHA加密從環(huán)境變量取舊token并判斷是否過期過期就重新登錄獲取準(zhǔn)備請(qǐng)求體里的隨機(jī)數(shù)據(jù)訂單號(hào)、手機(jī)號(hào)、郵箱等。Tests Script在接收響應(yīng)之后運(yùn)行適合做以下事情斷言狀態(tài)碼、響應(yīng)體字段、響應(yīng)時(shí)間提取動(dòng)態(tài)值token、id并存儲(chǔ)到環(huán)境變量供后續(xù)請(qǐng)求使用輸出調(diào)試日志輔助定位問題。這里有一個(gè)重要的坑Postman的腳本是同步執(zhí)行的但在Tests里發(fā)異步請(qǐng)求比如用pm.sendRequest時(shí)寫法直接決定了斷言能否正確執(zhí)行。很多人以為pm.sendRequest是同步的在它下面立刻寫斷言代碼結(jié)果發(fā)現(xiàn)拿到的body是undefined——因?yàn)檎?qǐng)求還沒回來。正確做法是把后續(xù)邏輯放在pm.sendRequest的回調(diào)函數(shù)里pm.sendRequest({ url: https://api.example.com/health, method: GET }, function (err, response) { // 這里才能拿到響應(yīng)數(shù)據(jù) pm.test(健康檢查接口通過, function () { pm.expect(response.code).to.equal(200); }); });2.3 斷言體系從pm.test到Chai斷言Postman內(nèi)置了Chai斷言庫pm.expect是它最常用的入口。基本的斷言寫法大家都會(huì)但實(shí)際項(xiàng)目里真正好用的斷言場(chǎng)景遠(yuǎn)不止?fàn)顟B(tài)碼等于200這一種。我常用的斷言模板有這么幾類// 1. 狀態(tài)碼業(yè)務(wù)碼雙重校驗(yàn) pm.test(接口返回正常, () { pm.response.to.have.status(200); const json pm.response.json(); pm.expect(json.code).to.equal(0); // 業(yè)務(wù)層code0表示成功 }); // 2. 響應(yīng)時(shí)間告警斷言 pm.test(響應(yīng)時(shí)間低于500ms, () { pm.expect(pm.response.responseTime).to.be.below(500); }); // 3. 數(shù)組長度與字段存在性 pm.test(列表數(shù)據(jù)存在且長度大于0, () { const list pm.response.json().data.list; pm.expect(list).to.be.an(array); pm.expect(list.length).to.be.greaterThan(0); }); // 4. 動(dòng)態(tài)字段的類型校驗(yàn)防止接口返回null引發(fā)前端白屏 pm.test(id字段為字符串, () { pm.expect(json.data.id).to.be.a(string); });到進(jìn)階階段我強(qiáng)烈建議把斷言從寫在每一條請(qǐng)求里提升為在Collection級(jí)別的Tests腳本中統(tǒng)一封裝。什么意思呢在Collection的編輯界面中有一個(gè)Tests標(biāo)簽頁那里寫的腳本會(huì)在這個(gè)Collection下的每一個(gè)請(qǐng)求執(zhí)行完成后都運(yùn)行一遍。我們可以利用這個(gè)機(jī)制統(tǒng)一做通用斷言——比如校驗(yàn)每個(gè)響應(yīng)都滿足 Content-Type為application/json、響應(yīng)體不是空、業(yè)務(wù)code存在// Collection級(jí)別Tests腳本每個(gè)請(qǐng)求都會(huì)執(zhí)行 const responseJson pm.response.json(); pm.test([通用斷言] 所有響應(yīng)均攜帶業(yè)務(wù)code字段, () { pm.expect(responseJson).to.have.property(code); });然后在單條請(qǐng)求自己的Tests腳本里只寫這條請(qǐng)求的業(yè)務(wù)斷言。這樣職責(zé)分離通用校驗(yàn)不用每條接口重復(fù)寫維護(hù)成本大幅降低。這個(gè)思路是從實(shí)際項(xiàng)目中總結(jié)出來的——我們當(dāng)時(shí)一百多個(gè)接口靠這個(gè)機(jī)制砍掉了將近一半的重復(fù)斷言代碼。3. 實(shí)操過程從零構(gòu)建一條完整的接口測(cè)試工作流3.1 明確需求與數(shù)據(jù)流設(shè)計(jì)我們以最常見的業(yè)務(wù)場(chǎng)景為例登錄 → 創(chuàng)建訂單 → 查詢訂單 → 取消訂單這是一個(gè)典型的帶狀態(tài)流轉(zhuǎn)的鏈路。手動(dòng)測(cè)的時(shí)候你要先登錄復(fù)制token然后創(chuàng)建訂單拿到orderId再把這個(gè)orderId粘到查詢和取消的接口參數(shù)里。自動(dòng)化工作流要解決的就是這些中間傳遞全部由腳本自動(dòng)完成。在設(shè)計(jì)階段先畫出這條鏈路的依賴關(guān)系登錄接口 ↓ 返回token 創(chuàng)建訂單接口Body中需要token ↓ 返回orderId 查詢訂單接口參數(shù)中需要orderId ↓ 取消訂單接口參數(shù)中需要orderId我在動(dòng)手寫腳本前一定會(huì)先把這個(gè)數(shù)據(jù)流畫出來在紙上或在文檔里不用畫得太復(fù)雜。因?yàn)榻涌跍y(cè)試工作流的本質(zhì)是數(shù)據(jù)流轉(zhuǎn)而不是請(qǐng)求的先后順序。很多初學(xué)者一上來就建4個(gè)請(qǐng)求然后在每個(gè)請(qǐng)求里寫死數(shù)據(jù)這樣跟手動(dòng)測(cè)試沒區(qū)別。3.2 步驟一創(chuàng)建環(huán)境與公共變量第一步是在Postman右上角的環(huán)境管理器中創(chuàng)建一套測(cè)試環(huán)境并定義好這些基礎(chǔ)變量變量名初始值說明baseUrlhttps://test-api.example.com測(cè)試環(huán)境baseURLaccounttester001測(cè)試賬號(hào)passwordabc123測(cè)試密碼token空登錄后自動(dòng)寫入orderId空創(chuàng)建訂單后自動(dòng)寫入注意token和orderId的初始值都留空它們是在腳本運(yùn)行時(shí)動(dòng)態(tài)寫入的。這里的一個(gè)經(jīng)驗(yàn)是凡是運(yùn)行時(shí)動(dòng)態(tài)產(chǎn)生的變量初始值不要亂填。填一個(gè)假token會(huì)讓你在調(diào)試時(shí)搞不清當(dāng)前用的到底是真的還是殘留的舊值。3.3 步驟二登錄接口與token的自動(dòng)提取在登錄請(qǐng)求的Tests腳本中寫如下代碼const response pm.response.json(); pm.test(登錄成功, () { pm.response.to.have.status(200); pm.expect(response.code).to.equal(0); }); if (response.code 0 response.data response.data.token) { pm.environment.set(token, response.data.token); }這里用了一個(gè)if守衛(wèi)只有登錄真正成功時(shí)才去更新token避免把錯(cuò)誤響應(yīng)里的空值寫進(jìn)環(huán)境變量。如果不加這個(gè)守衛(wèi)可能出現(xiàn)一種隱蔽問題——接口掛了token被覆蓋成空字符串后續(xù)所有請(qǐng)求都帶著空token跑一遍最后你看到的是一堆401/403錯(cuò)誤還得一個(gè)個(gè)查原因浪費(fèi)大量時(shí)間。登錄之后所有業(yè)務(wù)接口的請(qǐng)求頭中都要帶上token。你當(dāng)然可以在每個(gè)接口的Header里寫Authorization: Bearer {{token}}但更優(yōu)雅的做法是在Collection級(jí)別的Pre-request Script里統(tǒng)一注入// Collection級(jí)別Pre-request Script const token pm.environment.get(token); if (token) { pm.request.headers.add({ key: Authorization, value: Bearer token }); }這樣新加接口時(shí)根本不用記得加請(qǐng)求頭只要在Collection里header自動(dòng)帶上token。3.4 步驟三創(chuàng)建訂單與動(dòng)態(tài)參數(shù)傳遞創(chuàng)建訂單接口的請(qǐng)求體一般是JSON格式包含商品ID、數(shù)量、收貨地址等信息。實(shí)際項(xiàng)目中這些數(shù)據(jù)很少是固定寫死的我通常會(huì)在Pre-request Script里生成動(dòng)態(tài)數(shù)據(jù)避免重復(fù)數(shù)據(jù)導(dǎo)致業(yè)務(wù)異常// 創(chuàng)建訂單接口的Pre-request Script const timestamp Date.now(); const requestBody { productId: 1001, quantity: 2, orderNo: SO timestamp, // 每次跑都生成不同的訂單號(hào) remark: 自動(dòng)化測(cè)試訂單 }; pm.request.body.update(JSON.stringify(requestBody));注意使用了pm.request.body.update()來覆蓋原始請(qǐng)求體。這樣寫的好處是可調(diào)試性更強(qiáng)。你不用在UI上每次去改Body里的測(cè)試數(shù)據(jù)腳本自動(dòng)生成。創(chuàng)建訂單成功后需要在Tests腳本里提取orderIdconst response pm.response.json(); pm.test(創(chuàng)建訂單成功, () { pm.response.to.have.status(200); pm.expect(response.code).to.equal(0); pm.expect(response.data.orderId).to.exist; }); if (response.code 0 response.data.orderId) { pm.environment.set(orderId, response.data.orderId); }到這里環(huán)境變量orderId被自動(dòng)賦值。接下來的查詢接口和取消接口只需要在URL或Body中引用{{orderId}}Postman會(huì)自動(dòng)替換成真實(shí)值。3.5 步驟四循環(huán)執(zhí)行整個(gè)Collection在Collection Runner中按順序勾選登錄、創(chuàng)建訂單、查詢訂單、取消訂單這四個(gè)接口點(diǎn)擊運(yùn)行。你會(huì)看到整套流程按順序走完中間不需要任何人工干預(yù)。但這里有個(gè)關(guān)鍵的進(jìn)階點(diǎn)Collection Runner默認(rèn)按照Collection里的接口順序執(zhí)行但你可以用setNextRequest來控制順序。例如如果登錄失敗后面的接口全部沒有意義可以讓執(zhí)行流提前終止// 登錄請(qǐng)求的Tests腳本 if (response.code ! 0) { postman.setNextRequest(null); // 停止后續(xù)所有請(qǐng)求 }setNextRequest是控制流的核心工具。它不僅能終止流程還能實(shí)現(xiàn)循環(huán)、跳轉(zhuǎn)、跳過等復(fù)雜邏輯。比如你可以把查詢訂單設(shè)為創(chuàng)建訂單的下一個(gè)執(zhí)行目標(biāo)從而跳過某些中間接口。當(dāng)然這個(gè)命令要謹(jǐn)慎使用濫用會(huì)讓流程的可讀性變差。3.6 步驟五數(shù)據(jù)驅(qū)動(dòng)讓一條腳本跑多組數(shù)據(jù)現(xiàn)在工作流已經(jīng)能自動(dòng)跑了但它跑的還是固定的一組數(shù)據(jù)。真實(shí)項(xiàng)目中購買不同商品、不同用戶等級(jí)、不同庫存狀態(tài)下的接口行為都需要驗(yàn)證。這時(shí)候就要用到數(shù)據(jù)驅(qū)動(dòng)。準(zhǔn)備一個(gè)CSV文件或JSON文件字段如下productId,quantity,userLevel 1001,1,normal 1002,5,vip 1003,0,normal然后在Collection Runner或Newman運(yùn)行時(shí)選擇這個(gè)數(shù)據(jù)文件腳本中通過data對(duì)象讀取當(dāng)前行的數(shù)據(jù)// 創(chuàng)建訂單接口的Pre-request Script const requestBody { productId: parseInt(data.productId), quantity: parseInt(data.quantity), userLevel: data.userLevel || normal, }; pm.request.body.update(JSON.stringify(requestBody));這樣同一套創(chuàng)建訂單 → 查詢訂單 → 取消訂單的腳本會(huì)依次使用三組數(shù)據(jù)跑完三遍。第三組數(shù)據(jù)quantity0是故意設(shè)計(jì)的邊界值預(yù)期創(chuàng)建訂單會(huì)失敗這樣正好可以驗(yàn)證業(yè)務(wù)側(cè)的參數(shù)校驗(yàn)邏輯。關(guān)于CSV文件我要提醒一個(gè)高頻坑CSV的編碼必須是UTF-8且不要在Excel里直接另存為CSV然后帶BOM頭。BOM頭會(huì)導(dǎo)致第一行字段名變成\ufeffproductId腳本里讀取data.productId永遠(yuǎn)是undefined。我自己就踩過這個(gè)坑排查時(shí)發(fā)現(xiàn)數(shù)據(jù)沒解析進(jìn)去懷疑半天最后用VS Code重新保存成無BOM的UTF-8才解決。3.7 步驟六用Newman把工作流推向自動(dòng)化運(yùn)行到這一步工作流在Postman圖形界面里已經(jīng)跑通了。但能跑通和能自動(dòng)化運(yùn)行之間還差一步——必須把執(zhí)行過程脫離GUI變成一條命令行指令。安裝Newmannpm install -g newman然后導(dǎo)出你的Collection和環(huán)境變量文件在Collection的三個(gè)點(diǎn)菜單中選Export環(huán)境變量同理執(zhí)行newman run 接口測(cè)試工作流.postman_collection.json \ -e 測(cè)試環(huán)境.postman_environment.json \ -d 測(cè)試數(shù)據(jù).csv \ -r cli,htmlextra \ --reporter-htmlextra-export test-report.html這里我加了-r cli,htmlextracli是命令行輸出htmlextra會(huì)生成一份帶圖表和完整請(qǐng)求日志的HTML測(cè)試報(bào)告。跑完打開test-report.html每個(gè)接口的執(zhí)行時(shí)間、斷言結(jié)果、響應(yīng)詳情都清清楚楚。Newman最讓我滿意的一點(diǎn)是它的退出碼設(shè)計(jì)得很標(biāo)準(zhǔn)全部斷言通過返回0失敗返回1。這意味著你可以直接把它接進(jìn)GitLab CI或Jenkins流水線跑完自動(dòng)把退出碼映射成流水線成功/失敗狀態(tài)stages: - test api-test: stage: test script: - npm install -g newman - newman run 接口測(cè)試工作流.postman_collection.json -e 測(cè)試環(huán)境.postman_environment.json -d 測(cè)試數(shù)據(jù).csv -r cli,htmlextra artifacts: paths: - test-report.html至此這條接口測(cè)試工作流從手動(dòng)點(diǎn)升級(jí)成了提交代碼后自動(dòng)跑。研發(fā)每次合并MR流水線會(huì)拉起這套測(cè)試半小時(shí)后就能在測(cè)試報(bào)告里看到所有核心接口是否正常。4. 常見問題與排查技巧實(shí)錄4.1 變量值憑空消失或值不對(duì)的排查思路這類問題我遇到過太多次而且原因五花八門。最典型的幾個(gè)變量被環(huán)境切換覆蓋在環(huán)境A里設(shè)置的token切到環(huán)境B后讀不到。排查方法是在腳本里加上console.log(pm.environment.get(token))看輸出是undefined還是舊值。同名變量層級(jí)沖突Global和Environment里同時(shí)存在token而環(huán)境里的優(yōu)先級(jí)更高導(dǎo)致你明明在Global改了值腳本讀到的卻是環(huán)境里的舊值。建議用統(tǒng)一的命名前綴區(qū)分例如env_token、glb_userId。設(shè)置變量的代碼被跳過如果腳本里有過早return或if分支某些路徑下不會(huì)執(zhí)行pm.environment.set()。用斷點(diǎn)或者臨時(shí)多加幾個(gè)console.log能把控制流理清楚。4.2 斷言該失敗的沒失敗默認(rèn)只校驗(yàn)HTTP狀態(tài)碼很多新手寫斷言只寫pm.response.to.have.status(200)這在接口框架規(guī)范的項(xiàng)目里往往不夠。因?yàn)楹芏嗪蠖朔祷氐腍TTP狀態(tài)碼一律是200真正的業(yè)務(wù)錯(cuò)誤放在響應(yīng)體里的code字段中。如果你只校驗(yàn)200那么業(yè)務(wù)上的失敗比如庫存不足返回code50001也會(huì)被當(dāng)成執(zhí)行通過。我的做法是憑單一指標(biāo)不信任原則除了HTTP狀態(tài)碼至少再校驗(yàn)業(yè)務(wù)code。在關(guān)鍵鏈路上再加響應(yīng)時(shí)間斷言。寧可斷言多一點(diǎn)導(dǎo)致偶爾報(bào)紅也不要讓真實(shí)缺陷被綠色通過掩蓋。4.3 數(shù)據(jù)文件報(bào)錯(cuò)CSV解析與編碼問題速查癥狀常見原因解決辦法data.xxx全是undefinedCSV帶BOM頭 / 列名不匹配用VS Code另存為UTF-8無BOM檢查字段名大小寫數(shù)字字段被當(dāng)成字符串CSV里所有值都是字符串腳本中顯式轉(zhuǎn)換如parseInt(data.quantity)CSV含中文亂碼Excel另存CSV默認(rèn)GBK編碼改用文本編輯器或Python腳本生成UTF-8 CSVJSON數(shù)據(jù)文件讀取失敗JSON格式錯(cuò)誤末尾多一個(gè)逗號(hào)用JSON驗(yàn)證工具格式化后再導(dǎo)入4.4 流程提前終止或請(qǐng)求間依賴斷裂postman.setNextRequest(null)寫了之后整個(gè)Collection Runner會(huì)立即停止后續(xù)所有請(qǐng)求。有時(shí)候你只想跳過某個(gè)特定的請(qǐng)求不想整體終止那就要換一種寫法在條件滿足時(shí)用postman.setNextRequest(下一個(gè)請(qǐng)求名稱)指定跳到哪里。請(qǐng)求間依賴斷裂最常見的原因是上一個(gè)請(qǐng)求的Tests腳本還沒執(zhí)行完下一個(gè)請(qǐng)求就發(fā)了。在Postman里不會(huì)出現(xiàn)這個(gè)問題因?yàn)槟_本是同步阻塞的——但如果用了pm.sendRequest異步發(fā)送輔助請(qǐng)求一定要把后續(xù)邏輯放入回調(diào)函數(shù)否則就會(huì)出現(xiàn)腳本未執(zhí)行完畢、下一個(gè)請(qǐng)求已經(jīng)拿到空變量的情況。此外登錄token是有有效期的。如果你的工作流執(zhí)行時(shí)間較長比如數(shù)據(jù)文件有上千行中間token可能過期。這種情況下我建議在Collection級(jí)別的Pre-request Script里增加token過期預(yù)判邏輯const tokenExpireTime pm.environment.get(tokenExpireTime); if (tokenExpireTime Date.now() parseInt(tokenExpireTime)) { // 發(fā)一次登錄請(qǐng)求刷新token pm.sendRequest({ url: pm.environment.get(baseUrl) /auth/login, method: POST, body: {...} }, function (err, res) { const json res.json(); pm.environment.set(token, json.data.token); pm.environment.set(tokenExpireTime, Date.now() 3600000); }); }這段刷新邏輯執(zhí)行后當(dāng)前請(qǐng)求可以繼續(xù)用到新token后續(xù)所有請(qǐng)求也都受益。把token過期時(shí)間也存成環(huán)境變量一起管理是一個(gè)非常實(shí)用的工程化習(xí)慣。5. 進(jìn)階工作流的擴(kuò)展給團(tuán)隊(duì)沉淀可復(fù)用的測(cè)試資產(chǎn)5.1 公共腳本庫用Collection級(jí)別腳本做函數(shù)復(fù)用如果多個(gè)接口里都要做同樣的簽名計(jì)算、加密處理、時(shí)間戳格式化這段邏輯重復(fù)寫在每個(gè)請(qǐng)求里意味著每次改邏輯要改N個(gè)地方。更好的做法是把公共函數(shù)放在Collection級(jí)別的Pre-request Script中通過pm.collectionVariables來共享函數(shù)定義。舉個(gè)例子假設(shè)很多接口都需要在Header里加一個(gè)Sign簽名// Collection級(jí)別Pre-request Script function generateSign(timestamp, secret) { const rawString timestamp secret salt; // 這里就簡(jiǎn)單示意實(shí)際可能是hash等算法 return CryptoJS.MD5(rawString).toString(); } // 暴露到全局變量也可以在外部腳本直接訪問 pm.collectionVariables.set(__generateSign, generateSign);注意在這個(gè)級(jí)別定義的函數(shù)不能在單個(gè)請(qǐng)求的腳本中用全局名直接訪問除非掛到global上。一個(gè)更優(yōu)雅的方式是把它定義為一個(gè)輔助請(qǐng)求集合或?qū)懗梢粋€(gè)全局函數(shù)文件但這個(gè)路徑有點(diǎn)繞。實(shí)測(cè)下來最穩(wěn)妥的做法其實(shí)是公共邏輯力求簡(jiǎn)單如果邏輯復(fù)雜到需要完整封裝那就不應(yīng)該寫在Postman里而是該考慮自研框架了——Postman腳本環(huán)境的定位應(yīng)該是輕量邏輯而不是業(yè)務(wù)復(fù)雜算法。5.2 團(tuán)隊(duì)協(xié)作Postman的版本管理與共享機(jī)制接口測(cè)試資產(chǎn)要變成團(tuán)隊(duì)資產(chǎn)不可避免要解決用戶A改了腳本用戶B怎么同步的問題。Postman的Workspace機(jī)制可以支持多人協(xié)作編輯Collection但公共環(huán)境變量、測(cè)試數(shù)據(jù)文件這類東西是不同步的。所以實(shí)際項(xiàng)目中我推薦的核心協(xié)作流程是Collection統(tǒng)一放在Postman的共享Workspace中方便團(tuán)隊(duì)成員在線查看、在線運(yùn)行環(huán)境變量文件、CSV數(shù)據(jù)文件這些用版本庫Git/SVN管理不依賴Postman的云端同步每次運(yùn)行使用固定的從倉庫拉取的Collection 環(huán)境文件組合保證CI和本地結(jié)果一致。這樣做的好處是本地開發(fā)環(huán)境隨意調(diào)參不影響CI穩(wěn)定性。我在項(xiàng)目中經(jīng)常看到有人直接在共享Collection里改了參數(shù)結(jié)果其他人一跑就是一片紅其實(shí)根源就是環(huán)境文件沒有隨Collection一起接收版本控制。5.3 從自動(dòng)化測(cè)試到接口監(jiān)控當(dāng)工作流足夠穩(wěn)定后你可以把它再往前推一步——不止在發(fā)版時(shí)跑而是定時(shí)跑變成線上接口監(jiān)控。Newman cron或任何定時(shí)任務(wù)就能實(shí)現(xiàn)# 每天早上8點(diǎn)跑一遍全鏈路接口 0 8 * * * cd /path/to/api-tests newman run collection.json -e env.json -d data.csv -r cli,htmlextra如果某個(gè)接口掛了測(cè)試報(bào)告會(huì)生成同時(shí)Newman退出碼非0觸發(fā)告警腳本通知值班人員。這樣一套工作流從發(fā)版后驗(yàn)證延伸到了每日常規(guī)健康巡檢相當(dāng)于用很少的成本搭了一套自主可控的接口撥測(cè)方案不需要額外購買商業(yè)監(jiān)控工具就能覆蓋大部分核心接口的可用性驗(yàn)證。我個(gè)人的體會(huì)是Postman自動(dòng)化腳本進(jìn)階的核心不在于你掌握了多少API而在于你有沒有把腳本當(dāng)成工程資產(chǎn)去設(shè)計(jì)。怎么命名變量、怎么組織Collection、怎么統(tǒng)一斷言、怎么控制依賴、怎么納入版本管理——這些工程化習(xí)慣才決定這套工作流能用三個(gè)月還是一年。如果你踩過跟我類似的坑或者有更好的工作流組織方案歡迎交流。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
操国产逼| 操国产逼| 国产一区二区啪啪视频| 26uuu性物| 福利风月五月天影院| 天天亚洲| 日韩一级二级在线| 操高情无码| 91美女看B| 久久av成人无码免费| 欧美日韩亚洲国产中文永久天天看| 操操操日本的逼| 人妻在线大香蕉| 国产av强奸美女| 人妻熟女一区二区三区在线| 天天影视网综合少妇| 神马久久午夜| 98精品国产乱码久久久久久| 91丨九色丨国产打屁股| 日韩操逼性鲍| 99精品无码| 91 国产丝袜在线放观看| 亚洲欧美国产成人综合不卡| 久久精品店| 色拍偷亚洲| 日韩无码专区| 综合网~91综合网| 五月丁香啪啪| 91精品人妻偷情| 亚熟hd视频在线| 天天插天天操| 欧美性爱日韩性爱| 国产对白刺激视频| 亚洲天堂男人| 国产人妻精品一区二区三区秋霞 | 吖在线不卡一区二区国产剧情| 亚洲少妇综合| 亚洲福利中文字幕在线| 乱伦AVxx| 91精品女厕偷拍视频| 天天综合91| 欧美亚洲图片| 天天看天天在线精品| av天堂电影网| 精品国产99999| 九九拍拍精品视频在线播放| 99热成人| 精品国产乱码久久久久A| 91人妻最真实刺激绿帽| 欧美成人精品欧美一级乱黄一区二…| 99在线观看无大码| 亚州久久9| 天美av在线观看| 蜜乳Av成人片网站| 色婷久久| 麻豆AV短剧| 欧美激情亚洲情色| 安徽熟妇视频| 丝袜视频一区二区在线播放国产中文| 国产诱惑| 欧美草草高清日韩视频| 91网站18禁| 中文字幕第9页萱萱影音先锋| 女性91网站| 超碰吊日色| 男女无套 免费网站| 亚洲素人综合| 天天cao在线| 欧美精品宗合| 综合久久97| 国产成年女黄特黄| 免费的很黄很污的全部视频| 色香阁在线| 伊人991| 久久久久人| 99国产女人| 中文字幕精品探花视频| 福利社区午夜一区二区| 97福利视频| 亚洲色图20p| 91九九九吃| 啊啊啊啊啊好多水| 人人插人人摸人人| caopeng97| 996热| 国产综合久| A级片一区| 夜夜爽夜夜操| 久久性爱大全| av天天在线观看| 国产十八禁视频| 国产区在线| 精品亚洲| 97人人草| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 亚洲天堂性爱| 亚洲情色在线| 国产 日韩,欧美 自拍| 欧美极度丰满熟妇hd| 国产一区二区三区精品观看啪| 嗯嗯啊啊用力视频免费| 四虎884| 久操免费观看| 91综合在线| 色偷偷超碰亚洲| 偷拍 欧美 日韩| 中文久久爆乳| 啊啊啊啊好疼| 大香蕉操久久| 国产内射爽爽大片| 一色网男人的天堂| 男女啊啊啊啊啊| 欧日a| 加勒比综合九九99视频在线播放| 亚洲啪啪综合?v一区综合精品区| 精品超碰中文在线| 78精品在线| 亚洲国产无码精品首页久久久| 很黄很污的免费网站| 亚洲风情在线观看| 熟妇人妻精品一区二区视频色欲| 亚洲美女av无码| 婷婷五月天网| 美女久久久久久久久久久| 欧洲熟妇xxXx欧美老妇裸体| 九九九国产精品| 中文字幕 国产区| 亚洲人人夜夜澡人人爽| 无码人妻丰满热妇又大又粗| 精产国品一区二三产品| 国产精品999zyz| 中文幕97| 亚洲色 国产 欧美 日韩| 少妇色综合| 日本视频在线中文字幕| 有码人妻系列| 亚洲图片激情综合另类| 亚洲综合贴图91| 乱伦图av| 2017天天插| 在线综合色| 国产精品一区二区麻豆| 人妻熟女一区在| 性欧美| 99操逼| 欧美色图91| 五月天伊人| 天天澡天天爽日日AV| 欧美无圣光在线| 370p日韩欧美亚洲精品| 欧美不在线| 嗯嗯啊啊好疼| 水澄无码AV| 亚洲区 欧美区| 男人天堂一区二区| 不卡免费av在线播放| 久久久青青草| 蜜桃久久一区| 亚洲AO在线| 亚洲蜜乳av| 久久久久成人网| 亚洲一本色码中文字幕| 操操操操操操| 九九九午夜| 性色AV网站| 青操影院| 很黄很污的免费网站| 性久久| 97欧美资源| 99啪啪视频| 国产福利第一视频| 午夜福利无毒不卡| 中国AAAAAA黄色片| 中文字幕视频在线观看| 亚州国产成人精品女人久久 | 欧美色乱| 试看60秒 爽| 日韩av乱伦| 超碰欧美在线欧美| 色综合久久夜色精品国产天堂| 久久久久网站-538在线视频-欧美永久乱码 | 隔壁邻居波多野结衣中文字幕 | 美女天天干| 色妺妺在线视频| 国产女人和拘做爰视频 | 天天做天天爱| 嗯嗯嗯啊啊在线观看| 97这里只精品| 久久免费看高潮毛片韩国| 婷婷午夜| 久久 国产精品 一区| 96麻豆精品一区二区三区| 看大黄色大片原件| 91国精产品| 97超碰色色| 97人人夜夜精品视频| aⅴ日韩成人电影av在线免费看av大全| AV中亚| 国产诱惑| 麻豆精品天美| 老鸭窝黄色视频网站| 久草视频制服诱惑| 爱干爱射网啊啊啊| 中文字幕片| 国产黄a三级三级三级av在线看| 亚洲精品成人激情在线| 伊人黄色视频免费观看| 欧美日韩国内不卡| 国产精品大香蕉| 亚洲中文字母在线播放| 操操碰| 婷婷伊人綜合中文字幕| 91女神在线视频| 九月婷婷| 熟妇熟女视频一区二区三区| 丁香五月天堂网| 五月天婷婷基地| www网站黄| 可以看的av| 色色色综合| 性猛交| 青青草好吊色| 国产高清吃奶免费视频网站| 天美传媒AV在线| 国产在线激情| 人人做,人人操,人人摸| 欧美碰碰综合色| 蜜臀va69| 欧美性暴力| 久草在线| 人妻系列无码专区中文有码| 偷看洗澡一二三区美女| 色婷婷五月综合| 婷婷成人久久久精品| 黑人中出21连凳花野真衣| 欧美91网站| 亚洲se电影| 日韩精品影视| 亚洲综合影院| av资源在线观看少妇| 久久黄色网址| 国产999精品久久久| 国产精品精品系列在线观看| 丁香六月激情| 日本三级大片| 日本阿v天堂在线观看| 国产一级内射无挡观看| 人人爱操| 性色高清在线| 国产AV人人夜夜澡人人爽麻豆| av橘色网站| 日韩小电影| 高清一区AV无码| 99热这里是精品| 亚洲精品国产AV天美传媒| 夜夜免费视频| 偷拍偷窥与盗摄视频专区| 51一区二区三区| 蜜臀av在线播放一区二区三区| 躁躁日曰躁2020| 极品出轨视频网站| 超碰无码加勒比| 天天肏夜夜肏| 亚洲精品1区| 97亚洲中文| 草莓精品视频| 婷婷情色五月天| 91亚洲丝袜熟女| 亚洲中文字幕精品一区| 欧美亚洲玖玖玖| 国产av色网| 国产精品麻豆免费视频| 亚洲精品丝袜| 日逼97| 亚洲日韩美国人妻| 2019天天操天天爽天天拍| 国产精品诱惑| 2026国产精品视频| 97久久精品亚洲| 立川理惠加勒比无码| 色综合国产在线观看| 国产精品久久久鸭无码的功能| 欧美 综合| 无码人妻精品酒店| 久久97资源 网| 亚洲日韩国产精品| 好湿好紧好爽 视频| 蜜臀久久久99久久久久 | 免费视频97| 国产免费永久精品无码| 日韩人妻无码不卡网站| 欧美综合区| 日日夜夜骑| 久久久久久久久久8888| 色97欧美| 天天透伊人| 欧美性色网| 依人大香蕉| 成人小电影网站tex| 亚洲欧美精品福利在线| 日韩欧美女求操每天更新| 中国亚洲呦女专区| 蜜臀久久99精品久久久久电影| 亚洲天堂人妻熟妇视频| 亚洲色图自拍| 久操综合在线| 丁香婷婷五月| 超碰综合色| 极品尤物自安慰| 久久久神马影院| 久久久无码av精| 久草尤物| 啊灬啊灬啊灬啊灬高潮奶出了免费视 | 日本黄页视频在线观看| 亚洲精品成人激情在线| 色五月av| 美日韩在线不卡人妻| 丝袜剧情| 亚州综合色| AV天堂男人的天堂| 久久精品国产亚洲AV片多多 | 精品亚洲国产成人精品| 亚洲少妇综合| yirendaxiangjiashipin| 99久久国产精品免费高潮| 91精品成人| 亚洲免费人妻在| 久久精品区| 91美女视屏| 国产特级毛片AAAAAA高潮流水 | 欧美色爱综合| 天天日日舔舔| 爱我干综合| 男女啪啪网站免费视频| 国产精品国产| 中文字幕亚洲欧美在线不卡| 97国产成人精品免费视频| 97爱亚洲| 日韩无码服务区| 少妇国产不卡| 翔田千里av一区二区三区| 久久久久久九九九九| 亚洲www91| 素人播放一区| 亚洲综合婷婷| www.大香| 韩日色费| 中文字暮97| 少妇无码av专区线| 国产一区二区三区高清视频| 欧美韩国你懂得在线 | 亚洲码专区| 亚洲无码偷拍| 天天综合色图| 96精品一区| 第四色亚洲色图| www.五月天| 国产极品99热在线播放69| 国产女大学生AV| 国产在线激情| 亚洲干B| 啊啊啊啊啊好多水| 国产视频三区四区| 91 亚洲 欧美 日韩 国产 综合| 91天天综合网| 激情欧美97| 肉丝中文无码高清| 日韩资源网| 少妇一区二区三区在线观看| 无码人妻一区二区一牛影视| 欧美在线视频99| 中国亚洲呦女专区| 国产久久久久久久久一区二区| 国产日逼视频| 免费人成在线观看网站品爱网| 神马久久久久久| 超碰色97| 97在线视频免费观看| 欧美色交| 亚洲黑人在线| 神马麻豆福利院| 大香蕉人妻久久| 国产9熟妇视频网站| 男人天堂久久精品不卡| 手机av亚洲丝袜美腿日韩第一页二页| 国产成人主播| 久久久九| 操91| www色色com| 国产成人久久久精品免费AV| WWW黄片COM| 9999免费精彩视频| 黄污污污污| 七久久久| 久久AV无码1区2区3区| 欧美综合加勒比在线| 伊人大香蕉在线| 欧美大香蕉在线观看| 久久久久久中文字幕中文字幕最新| 激情丁香五月婷婷| 国产人伦精品一区二区三区| 欧美在线啊啊啊| 亚洲91网站| 久久9精品网站| 97ai亚洲| 一二三区操逼国产91| 婷婷av在线中文字幕| 老熟女乱伦一区| 欧美日韩黄片精品在线| 久久精视频美日韩在线视频| 狠狠色综合网| 亚洲一二三| 天堂亚洲欧美| 97资源视频| 国产一区二区三区精品观看啪| 亚洲高潮少妇| 欧美在线l亚洲| 成人草草视频| 久久日韩精品一区二区| 国产成人自拍视频在线| 在线观看十八禁| 色麻豆AV| 夜夜欢天天干| 超97在线精品视频| 99国产人成精品| 欧美 亚洲 大香| 在线小说视频一区| 秋霞一级鲁丝片A片| 午夜高清成人在线视频| 久草新免费| 老熟乱一区二区三区四区| 成人26uuu| 婷婷综合网站| 鸥美极品| 超碰在线人妻中文字幕| 99在线精品观看99| 1000午夜黄色| 欧美精品久久96人妻无码| 国产树林里野战在线看| 求求你操操我| 色婷婷一区二区三区久久| h无码动漫在线观看| 久久免费中文字幕在线观看| 国产乱码久久久| 亚洲小电影免费涩涩成人在线高清| 欧美九9 9 9| 四虎在线免费视频| 伊人黄色片| 素人播放一区| 国产999精品久久久| 最新的亚洲无吗| 色哟哟-国产专区| 丁香七月婷婷| 大香樵伊人网| 国产精品农村妇女| 日韩婷婷| 日逼97| 中文字幕av乱伦| 中文字幕人乱码中文字的预防方法| 亚洲91色| 欧美日韩资源在线| 欧美日韩国产一区二区小黄片大全| 狠狠干综合| 91女日逼| 五月天激情国产综合婷婷婷| 蜜桃av综合网发布| 亚洲大色鬼| 无套内射人妻在线播放| 欧美伦乱爱| 中国一级操逼视频| 使劲用力艹少妇视频一区二区| а√天堂资源官网在线资源| 国产超碰在线一区| 蜜乳AV一区| 日产123区精品免费观看| 约操熟妇| 久久久九九| 久久98| 精品日日人妻| 美女人妻色网站| 国产操逼网站亚洲一级黄色| 精品一久久久| 亚洲二区精品在线观看| 性欧美第一页| 麻豆人妻精品一区二区| 国产h小视频在线观看免费| 亚洲色堂免费视频| 韩三级a视频在线观看| 性生活无遮挡纯毛片在线看| 激情接吻视频久久久久久| 亚洲骚男同com| 日韩成人网址| 亚洲精品国产精品成人| 欧美日动态视频| 国产AV久久野战精品| 欧美图片校园春色| 久久免费中文字幕在线观看| 在线a v| 67914在线兔费成人视频| 男人夜色天堂ss| 成人无码在线视频网站| 日本天堂在线播放| 91色综| 乱伦av麻豆| 少妇精品| 中国熟女网站| 欧美性天天影视| 色欲Av人妻精品一区二| 国产怡红院在线| 在线 亚洲 网爆 自拍| 日韩卡一卡二卡三在线| 亚洲欧美洲综合| 亚洲影院小综合| JULIA一区二区三区在线播放| 久久中出| 热热色青青草| 97超碰亚洲| www.狠狠| 美女尤物人人操| 免费试看60秒| 97色操| 丝袜美女诱惑 91 视频| 欧美淫穴| 激情五月天视频| 中文字幕国产| 亚洲一区二区三区春色| 97操B| 亚欧洲一区二区视频| 高清不卡国产| 大香蕉啪啪啪| 亚洲情色中文字幕一区| 视频国产成人精品日本亚洲18| 一本色道久久综合狠狠操| 久久久久9999妇女| 美女高潮视频91| 91一区二区| 人人射人人操人人摸| 波多野结衣AV无码一区| 欧美色999| 婷婷8月天青娱乐| 后入式视频国产自| 99精品伊人| 99精品丰满人妻无| 盗摄 精品 另类 一区| 午夜国产成人福利视频| 久久久久亚洲Aⅴ无码| 日韩综合无码色欲vv| 欧美日韩在线视频网站| 五月亭亭六月丁香| 乱伦一二三| 欧美乱伦专区| 你懂的在线观看区国产| 亚洲影院无码在线| 性爱网站一区二区| 国产又黄又粗的视频| 日韩欧美福利视频看看| 99久久国产精品免费高潮| 偷拍亚洲| 26uuu最新| 69国产对白刺激| 超碰在线人人射| 亚洲图片另类| 国产精品人妻免费精品| 日本淫乱女一区二区三区视频| 97爱爱爱| 久久伊人亚洲AV无码网站| 亚洲婷婷综合网| 成人五月天丁香激情综合| A级片一区| 白丝被操91| 人人操人人操人人人操| 手机在线视频国内精品| 日本在线视频导航| 色噜噜综合在线| 欧美AB在线观看| 96免费视频在线| 中文一区在线日| 国产乱不卡| 天天爱天天操| 人人干黄色| 国产精品一区二区三区,亚洲综合 性开放中文AV高清无码免费看 | 午夜精品久久久久久久第一页按摩| 少妇熟女一区二区三区| 日韩国产精品人妻无码久久久| 思思热在线视频在线| 免费一级a毛片久久久久久鸭绿欲 国产精品亚洲天堂网址 | 超碰91在线| 国产最新AV| 久插不卡| 久9爱精品| 少妇一级无码精品| 自拍大香蕉乱插| 97WW精品| 亚洲综合 欧美| 欧美精品69性爱| 欧美亚洲美少妇一区二区| J?P?NESEHD熟女熟妇伦| 天天看人人操屄犊摸阴| 亚洲国产欧美另类自拍| 一区二区三区在线日韩影院观看| 亚洲骚逼少妇| 99这里有精品| 婷婷精品国产欧美精品亚洲人人爽| 中日韩免费看男女操逼大全| 人妻系列无码专区中文有码| 欧美美女自慰一区二区三区| 伊人久久亚洲色欲综合网站 | 抽插亚洲无码| 国产亚洲精品无码三区| 国产黄色av大片网站| 99自拍视频在线观看| 中文字幕精品丝袜| 国内精品99999| 日韩精品在线视频在线观看| 欧美综合站| q2午夜理论片夜色av| 中文AV制服乱伦| 日本人妻A片成人免费看片| 狠狠干精品一二三四五六2022| 欧美激情内射| 91精品啪在线观看国产城中村| 欧美性战999| 风韵犹存大大大大香蕉 | 91久久精品蜜臀| 日本 情色 1区2区3区| 欧美性爱日韩高清| 俺去久久| 九九av| 人人弄人人摸| 少妇二级| 大香蕉淫人网| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 国产60区。| 久久夜夜| 精品大全99999| 欧美gv在线观看| 欧美性特| 午夜男人的天堂| 国产精品久久久久av| 欧美亚洲宗合色性图| 免费a级毛片av无码久久精品中文字幕| 91neishe| 国产精品懂色tv影视免费观看 | 欧美综合自拍亚洲综合图| 日本操大逼| 欧美日韩国产人人| 一区二区影院| 中文字幕第95页| 爽 好舒服 无码刺激久久| 视频在线中文字幕| www网站黄| 天堂网亚洲区手机版| 色五月丁香五月| 拍拍拍拍大尺度黄色三级片拍拍拍拍拍照 | 天堂性色| 亚洲人妻一区二区三区| 欧美日日人人天天| 男人的天堂一区三区| 91黄射| 激情五月天网站| 色97干| 国产精品久久久视频| а√天堂资源官网在线资源| 啊啊啊啊啊好大好舒服想要| 人人操人人操草草| 人妻蜜桃臀| 亚洲色图欧美色图另类图片| 乱伦1色页| 91粉嫩萝控精品福利网站_精品影音先锋国| WWW.加勒比人妻一区不卡.com| 精品成人动漫一区二区| 夜夜 中文视频rt| 91成人精品在线播放| 九九九偷拍| 97综合在线观看| 眼镜人妻101.com| 大但人体久久久久| 女色视频社区| 黄色电影在线播放综合网站| 99热线麻豆| 国产久久久9999| 最新中文字幕精品在线| 国产精品自在线发布| 国产精品对白自产拍| 青青国产精品在线| 久热香蕉精品在线视频| 久久 精品| 亚州中文字幕超碰97| 免费观看啪视频| 夜夜草我| 农村少妇久久久久久久| 人人污日韩一区二区| 亚洲美女自拍偷拍视频| 1240青青草一区二区三区视频天爱| 中文字幕丝袜人妻| 综合网色| 国产成年免费大片黄在线观看| 亚洲av资源| 性爱欧美五月| 爱爱动态120秒| 一区二区三区四区免费视频| 中文字幕一区二区视频在线观看 | 干b网| 香港成人一级视频在线青青草| 熟女六十路| 在线亚洲 欧美 日本专区| 日韩综合第八区国产精品| 久久亚洲不卡一区二区三区| 色婷婷视频| japan日本高清乱xxxx| 91综合色噜噜| 国产精品乱码久久久| 91黑丝操| 天美传媒AV国产在线| 在线观看一卡二卡| 91干熟女| 国精精品无码一二三区水多多| 老司机午夜精品视频| 国产白丝网站| 91成人亚洲色图| 亚洲国产丝袜在线观看| 区一二区日韩亚洲乱码av电影| 大香蕉碰碰| 婷婷色网| 俺去也婷婷| 亚洲丁香花色| 精品国产肉丝袜在线拍国语| 伊人久久综合精品欧美| 思思视频免费看网站| 放黄片放3级黄片没穿衣服| 97在线免费看视频| 精品国产乱子伦一区二区三区,精品一| 91激情综合| 久久久久密臀视频| 后入式在线免费观看60秒| 黄总AV色图| 少妇500双飞99| 欧美精品偷拍| 欧美视频激情久久久久久| 日韩精品人妻中文字幕久久久| 色眯眯射| 久操网在线| 韩日精品福利视频一区不卡在线免 | 欧亚成人在线视频| 久久精品人妻一区二区| 丰满人妻一区| 成人AV在线网站| 亚洲中文字幕一区二区| 欧美综合第一页| 超碰97护士| 日韩成人高清一区二区| 国产av激情无码久久天堂| 在线综合 亚洲 欧美中文字幕| 精品人妻1区| 国产91精品福利在线| JIZZJIZZ国产精品喷水| 欧美婷婷| 免费看污网站| 综合天天网| 欧美最大综合网| 凹凸 69堂 在线播放| 99热销国产这里有精品| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 18禁美女裸体无遮挡啪啪| 日韩Va亚洲va欧美Ⅴa久久| 欧美一区二区观看在线| 91操人视频| 91亚洲不卡一区| h色99999| 天久久久噜噜噜久久国产精品爽爽 | 日韩精品资源| 国产成年女黄特黄| 黄页视频网站野外| 先锋精品av色鲁| 精品一区二区三区四区女| 欧美高清在线| 羞涩视频| 午夜福利免费福利视频| 99精品在线观看| 色综合加勒比四四季| 久草久日| 国产91影院| 亚洲精品日日夜夜52| 日本九九久久99播| 91操熟妇| wwwxxx日本爽| 女优免费一区二区永久| 97超碰亚洲| 久操免费观看| 综合操逼| 超碰在线974| 欧美日韩亚洲少妇寂寞影院正在播放 | 国产精品丝袜在线| 777AV电影| 亚洲图片欧美91N| 后入式五六区| 天天操人人操狠狠插| 东京日日夜夜| 久久久久96| 日韩无码a片| 亚州操操穴网| 蜜臀AV一区二区三区| 欧美黄色大片在线观看| 久久久久久97| 国产小u女在线观看| 日日A∨| 91网站18禁| 国产强奸超碰AV| 国产a级精品| 欧美精品激情| 亚洲综合中文字幕有码| 啊啊啊不要啊啊受不了了视频在线| 9久热这里只有精品| 久久国内| 亚洲伊人久久精品影院| 婷婷av在线中文字幕| 亚洲麻豆精品二区三区| 国产三级中文字幕粉嫩| 日韩一级特黄av毛片| 日韩精品人妻中文字幕久久久| 超碰97亚洲| 成人情色一区二区| 国产麻豆91欧美一区二区久久婷婷国产精品| 一个国产在线综合网站| 99999精品成人| 日韩欧美亚洲自拍偷拍| 麻豆天美久久91| 97免费视频在线| 成人在线日韩| 亚洲交性| 尹人大香蕉视频在线| 情色大香蕉| 柠檬AV导航| 色网亚洲人| 亚欧国产无码精品在线| 日韩有码回春沙龙第一页| 操逼操网| 青青草在线视频播放器| 蜜乳av首页| 久久婷婷一区| 性爱久久| 中文字幕99999| 中文字幕一区二区三区蜜臀| 26uuu最新| 青青草手机在线免费观看| 久久黄片国产一区二区| 欧美在线l亚洲| 亚欧无码在线| 欧美九九九| 久久久草成人网站久久久草成人久久久草久久久 | 美女十八禁| 五月丁香网站| 人人操欧美风骚| 哈哈操电影AV| 性影在线视频| 色九九九九九九| 青青草中文-久久青草精品一区二区三| 久久国产精品m码| 美女露胸露奶头| 久思思热视频在线观看| 人妻无码视频一区二区三区久久| 操逼网站地址| 色综合加勒比| 91AV天堂| 99热这里| 国产精品ⅴ无码大片在线看.| 美日韩一二三区| 中文字幕一区日韩精| 男人天堂网站| 97超碰超欧美。| 超碰免费在线| 九九精品99| 竹菊一区二区三区AV线| 国产九九久久久精品| 超碰国产精品久| 理论久久婷婷网8| 中文有码第五页| 亚洲aV性爱| 一级性爱视频免费在线| nuu12国产麻豆精品| 国产超碰国产97| 乱伦3P视频| 中文字幕丰满子伦无码专区在线视频最新| 免费久久9999| 九九热在线视频| 精品成人亚洲午夜电影| 97在线免费看视频| 色综合99999| 亚洲欧美一区二区三区在钱蜜桃 | 亚洲色天堂日韩中| 午夜男人av| 日韩欧美加勒比| 九热超碰| 久久精品72| 婷婷尹人大香蕉免费| 久久人人爽爽人人爽人人片αV| 狠狠躁伊人中文字幕| 亚洲 另类 丝袜 自拍 动漫| 97天天爽| 国产免费永久精品无码| 午夜激情成人在线观看| 东京热毛片177b2viP| 99后入| caopeng97人妻| renqi久久久久久久久久久久| 激情综合网五月婷婷五月天| 男女猛烈无遮掩视频免费软件| 亚洲精品91| 日日AAvv| 久久人体一区二区| 久操 高清| 熟女啪啪视频| 另类小说五月天| 最新日产中文在线麻豆| 熟妇的味道HD中文字幕| 色呦呦国产精品免费看| 久久国产乱子伦精品免费女,网站| 丝袜美女诱惑 91 视频| 中文字幕久久精视频久久大全| 看看小穴| 日韩国语字幕| 亚洲综合五月天婷婷丁香| 久久精品国产72国产精品福利 | 青青草亚洲一区| 欧美|91色综合| 亚洲天堂男人在线| 天天爱天天操| 六月婷婷五月丁香| 五月色综合| www久久久| 天天插天天射| 亚洲天堂电影精品一区| 九九亚洲视频| 人妻少妇色综合| 志村玲子视频一区二区| 成人五月香网在线| 懂色AV一区二区三区| 91一区二区| 你操综合| 麻豆av一区二区三区| 999狠狠综合| 一本道综合色图| 野狼激情网| 亚洲天天艹| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 超碰精品人妻狠狠干| 加勒比综合a∨| 欧美色爱综合| 天天拍夜夜| 波多野结衣之双飞调教在线播放| 精品无码欧美三级| 八戒无码国产午夜福利| a天堂视频| 影音先锋国产精品| 91亚州日韩高清| 大香蕉十区| 国产妇女精品视频青青草| 欧美天天在线| 97超碰9| 大屁股人妻女教师撅着屁股| 国产操逼视频在线观看| 日本国产高清色www视频在线| 亚洲 欧美 手机在线观看| 激情五月天视频| 澳门成人网站久国产日韩| 亚州综合AⅤ| 丝袜视频网国产90| 97香蕉网| 久久精品中文字幕观看| 国产精品秘 福利姬在线观看| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 亚洲五码一区二区三区| 99久re热视频精品98| 青青草日逼视频| 国产成人精品午夜福利| 日韩有码中文字幕女同性恋 | 国产精品91一样| 男人网站婷婷| 97超碰精品图片| 亚洲黄色视频在线观看视频| 日韩不卡毛片Av免费高清| 玖色AV| 射丝袜大香蕉| 婷婷爽人人婷婷爽视频| 中文字幕久热视频在线| AV中文在线| 伊人一区二区三区| 本道综合精品| 免费在线黄片视频| 久久精品人体| 久久精品99| 青娱乐福利99| 99久久久99久久91熟女| 精品中文日韩字幕视频| 亚洲日韩天堂| 天天精品| 精品176精品2| 天天综合~91| 国产午夜无码片在线观看影视| 欧美不卡在线美女| 香蕉大久久久| 亚洲电影中字一区二区| 99在线精品观看99| 五毛骚逼极品美女怕怕| 久久性爱视频99| 夂久色| 男人的天堂日韩| 午夜男女爽爽爽影院视频| 99色在线| 无码九九| 国产一级不卡在线观看| 三级片大波波| 中国91AV| 中文字幕亚韩| 精品九九九九九九九九九| jazzjazz国产精品麻豆| 欧美夜夜狠| 97久久超碰日韩精品| 久久久精品视频免费观看| 91l欧美在线| 人人干黄色| 亚洲最大的黄色电影网站。| 日韩十八禁| 亚洲综合五月天| 精品女同一区二区三区| 男女真人网18| 国产熟女高潮一区二区三区| 性开放中文AV高清无码免费看| 亚洲揄拍网| 日韩在线一区高清在线| 久久仑合| 中文字幕,人妻,日韩| 91色五月俺来也| av亚欧| 欧美大香蕉在线观看| 亚洲性网| 国产精品久久久久久夜夜夜| 亚洲色图图片| 熟女日韩| 久久精品国产亚洲5555| 色一射色一射| 久久久久久久强迫| 2025亚洲男人天堂| 国产 亚洲 一二三四| 啊嗯好大视频在线观看| 一本色道无码DVD中文字幕| 国产精品久久久视频| 襙一襙| 亚洲精品骚逼| 亚洲 自拍偷拍 欧美| 亚洲 综合 第一页| 国产精品无码在线| 后入式999| 五月天婷婷小说| 韩国一级做a久久久久| 一区二区三区四区五区高清无码永久视频 | 91色色综合| 人人考人人摸人人干| 日日97| 亚洲欧美激情另类色图| A 天堂| 午夜啊啊啊| 操逼视频免费日韩无码| 婷婷丁香人妻 | 欧美日韩啪啪电影| 人人爽人人精品乱人伦AV| 亚洲av影院在线观看| 亚洲双插| 中文字幕日产av人| 能在线播放的国产三级| 欧美色图99| 人妻久热在线| 伊人久久大香线蕉无码| 黄页网站成人免费| 人妻碰碰碰碰碰碰| 日韩熟女乱伦中出| 91天天综合在线| 天天日日本| 91 亚洲 欧美 日韩 国产 综合| 999久久久九九九九| 神马久久中文字幕| 日本精品成人无码| 成年人网站在线免费观看| 99后入| 男人下部插入女人下部| 国产操操日韩三级黄| 97神马久久| 麻豆伊人网| 99久久婷婷| 国产一级高跟丝袜| 一区二区影视| 国产情色在线| 精品久久久中文字幕不| 日韩激情啪啪| ji熟女.com| 啊啊啊啊好爽好舒服一区二区易域| 人妻大相焦在线| 中出91| 午夜影美女日鸡鸡天天视频国产 | 欧美性区| 九九香蕉网| 精品人妻一区二区视频| 中文字幕欧美丝袜07资源| 超碰视97中文| 中文在线久久字幕| 欧美亚洲丝袜人妻制服99| 中文字幕亚洲热播人妻| 中文?日韩?免费?精品| 久久亚洲日韩熟女精品| 狠色婷婷久久一区二区三区_| 青青草九九九九九| 99热最新网址| 国产1769在线| 亚洲人妻在线一区| 一级片视频啪啪| 亚洲 欧美综合| 日日97| 91青青在线视频| 久久久久久波多野吉衣高潮| 欧美极品女人的天堂| 亚洲熟女av日韩熟女| 欧美精品99久久久**| 国产辣妈在线视频福利| 精品人妻一区二区三区在| 国产麻豆91欧美一区二区久久婷婷国产精品| 香港日本韩国人妇99www.wccm20| 高清不卡视频| 亚洲有码 视频一区| 91美女中出| 夜夜操狠狠操| AV中文在线| a网站免费观看| 久草五月| 国产日韩欧美三级片| 综合影视国产无码| 3P乱轮视频| 亚欧成人综合影院| 日本成人A片免费看| 人人艹亚洲| 亚洲AV无码AV吞精久久久久| 国产女人与拘做受视频免费| 国内毛片无遮挡国产| 黑人美精品 A片| 无遮挡一级毛片视频免费的| 岛国福利在线精品播放| 久久久久久99AV无码免费网站| 久久在线观看免费视频| 91P0RNY大屁股人妻| 日本精品中文字幕视频| 十八禁视频一区二区| AA级电影三区| 亚洲伊人a线观看视频| 最好看的中文字幕在线2018| 黄色电影观看久久9| 无码av永久免费专区网站| 操逼操网| 亚洲色综合| 天综合网| 97色欧州| 在线亚洲丝袜视频网站|