如何解決不可測、異常場景的問題?

阿里QA導讀:在軟件研發過程當中,發佈前跨多個系統的聯調測試是不可或缺的一環,而在聯調過程當中,常常會遇到一些比較棘手的困難,阻塞整個聯調進程。其中比較典型的有:第三方的研發節奏不一致,致使沒法聯調;下游的業務異常難以構造,待測系統的處理邏輯沒法驗證;其它的一些異常場景,例以下游超時等。這些問題如何解決呢?阿里巴巴高級測試開發專家雨清帶來了他的解決方案。web

以上的具體場景都發生在應用發佈前的聯調階段,其實在發佈後,線上質量保障部分也一樣存在一些難以驗證的場景,例如:覈對腳本無驗證直接上線,日誌監控無驗證等。數據庫


痛點小結:
服務器

  • 請求異常場景難以構造:消息亂序、併發場景等;微信

  • 下游超時場景難以構造:超時成功、超時失敗等;網絡

  • 研發節奏不一致,下游應用沒有開發完畢,沒法聯調;架構

  • 下游的業務異常難以模擬;併發

  • 線上質量,實時覈對腳本,因爲線下「異常數據」難以構造,每每沒有驗證直接上線;app

  • 線上質量,日誌監控,因爲「異常日誌」難以構造,監控配置後沒法驗證。運維


簡單來講,質量保障過程當中存在很是多的「不可測」場景,而此類場景若是被忽視每每會帶來很是嚴重的故障。如下游超時場景爲例,在電商下單過程當中若是出現了支付超時,須要很是謹慎的處理,一旦出現邏輯漏洞就會致使用戶資損。更多關於異常場景的分析,能夠翻閱本文附錄--異常場景分析。jvm


驗證平臺的出現,就是爲了解決上述「不可測」場景,下降聯調成本、擴展測試邊界。

驗證平臺(VIP)Verification  Platform



目標:

一個簡單通用的提供異常場景測試、mock能力的輔助測試平臺。

架構設計

驗證平臺由兩部分組成,server和agent。其中agent部署到應用服務器上,並經過jvm attach的方式關聯上應用進程,從而實現基於函數+精準流量粒度的字節碼加強;server 獨立部署,管控了agent、服務器、規則等核心實體,提供操做頁面和hsf接口服務,支撐手工聯調以及自動化。

  • vip-server核心能力:應用入駐、服務器管理、規則管理、agent管理等。

  • vip-agent核心能力:規則解析、規則啓停、服務器信息採集、心跳、加強報告等。

  • 支持的場景:超時異常、請求異常、污染數據、mock。

工做原理

vip-server端,負責建立和維護規則,同時經過應用維度來管理相關的線下、預發服務器,監聽agent的心跳和加強報告。

vip-agent不持久化規則,實時監聽server的指令,並定時(默認30秒)上報心跳,以及命中規則後上報加強報告。

以此來確保服務端的規則全局惟一,不會產生串擾,同時規則能夠靈活的複用。同時服務端經過心跳來監控全部的agent狀態,確保有一個全局的視野,方便用戶進行應用維度的管控。


工做流程示意圖:


簡要流程說明:

  1. server提供了一鍵式入駐的功能,給應用下發vip-agent並啓動。不會阻斷應用運行;

  2. 在server上建立規則,規則的定義見下一小節;

  3. server下發規則到應用B(待測系統),並控制啓停狀態;

  4. 應用A發起請求到應用B(待測系統),規則生效,對特定流量進行加強:構造亂序、併發,構造超時場景,污染DB、日誌,mock下游返回等等。

規則定義

規則:一個原子化的加強能力,包含了定位和處理兩部分。

規則狀態機:

平臺使用


極速使用說明

  1. 確認服務器地址,一鍵安裝並啓動agent;

  2. 經過頁面建立規則;

  3. 經過頁面啓、停規則。

一個案例

1、部署vip-agent


2、建立規則

  1. 選擇場景;

  2. 填寫基礎信息:對應的應用名、規則名稱、描述;

  3. 填寫定位信息:類名(實現類)、方法名、方法入參(默認所有)、匹配請求(默認所有);


3、啓、停規則

方案拓展


構造併發場景

平臺提供了延遲執行的能力,在特定的請求達到指定的函數後,會暫停指定的時間(延遲執行規則中的延遲時間),在這個時間段內,另外一個請求打到應用中,以此來構造併發的場景。


圖中的請求1和請求2不必定是相同的業務類型,例如在電子憑證系統中,能夠是一個核銷的請求和一個退款的請求同時到來,產生併發。

提早驗證明時巡檢

實時巡檢是經過編寫比對腳本,在生產環境進行應用間的數據一致性校驗,用以保障生產環境的數據正確性。腳本的觸發、運行、結果觸達、異常報警等每每由巡檢平臺提供。巡檢腳本每每沒法在測試環境進行驗證,難點以下。


難點:

  1. 構造測試環境全鏈路的真實數據;

  2. 精準污染核心字段;

  3. 觸發測試環境的待測實時覈對腳本。

 

解法:

  1. vip建立規則,篡改DAL層寫入DB的數據;

  2. 跑全鏈路自動化用例,落全鏈路真實數據;

  3. 經過實時覈對平臺接口觸發,運行待測的核對腳本。


下圖是一個使用案例,其中關鍵的幾個平臺、工具說明以下:

  • 鏈路級自動化平臺:一個自動化開發、運維平臺,本案中用於構造測試環境的全鏈路真實數據;

  • 一鍵校驗工具:觸發測試環境的待測實時覈對腳本的工具;

  • 實時覈對平臺:巡檢腳本的運行容器;

  • 交易中心:真實應用,控制交易的業務流程;

  • 憑證中心:真實應用,用戶購買虛擬商品(券),最終落成用戶名下的電子憑證。



如圖所示,虛擬商品交易場景下,交易中心和憑證中心的數據應該是一致的,例如:用戶、商戶、商品、金額、訂單狀態機和憑證狀態機等。本案的作法爲,第一步經過vip建立污染DB數據的規則,並使之生效;第二步,經過自動化平臺發起購買流程,在憑證中心往DB寫用戶名下的電子憑證時,vip-agent會篡改部分數據,致使憑證中心和交易中心的數據不一致;第三步,運行「待測的巡檢腳本」,經過腳本是否校驗出數據的不一致,來檢驗腳本自己是否符合預期。


vip還支持很是多的其它場景,再也不一一贅述。

異常場景分析


系統調用抽象

若是把系統中的一次核心的邏輯處理看做一個「業務操做」,那麼一次服務系統被調用的過程大體能夠劃分爲三個部分:業務處理前,業務處理中,業務處理後。


業務處理前,系統主要的過程能夠劃分爲:參數校驗和冪等校驗。參數校驗,驗證服務調用方傳入的參數是否符合要求,類型是否正確、必填的參數是否都填了、非0校驗等;冪等校驗,驗證請求是不是合法的,例如因爲網絡抖動等緣由引發的重發,可能調用方發起了一次服務調用,而SUT(被測系統)卻收到了兩次同樣的請求。


業務處理中,SUT(被測系統)具體處理業務邏輯的過程,能夠歸類爲:業務校驗、業務處理、數據持久化。業務校驗是基於業務層面的校驗,例如付款時,須要校驗用戶餘額是否充足等;業務處理是程序中正式處理數據和計算的部分,例如從用戶餘額中扣除資金並增長到商家帳戶中等;數據持久化就是將數據落到數據庫。


業務處理後,SUT在完成業務處理後,根據處理的狀況:是否成功,失敗的緣由等,組裝結果,返回給服務調用方。

異經常使用例設計

主要的異常場景分類:

  • 業務處理前:入參異常、冪等異常;

  • 業務處理中:業務異常、下游異常、DB異常;

  • 業務處理後:返回異常。      


下圖所示模板從左向右依次細化異常場景,直至到一個具體的案例,所以每一個葉子節點對應了一個用例。該模板方便使用者有體系化的進行異常場景測試用例設計。



說明:「異經常使用例設計模版」已獲國家發明專利受權(注意:能夠借鑑但不要隨意使用~):CN109240908B



點個「在看」支持一下👇

本文分享自微信公衆號 - 測試開發社區(TestDevHome)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索