vs 啟動調用的目標發生異常_如何解決不可測、異常場景的問題?

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

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

a68cd475020818efbabdbfc48da5d5bf.png

痛點小結:

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

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

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

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

  • 線上質量,實時核對腳本,由于線下“異常數據”難以構造,往往沒有驗證直接上線;

  • 線上質量,日志監控,由于“異常日志”難以構造,監控配置后無法驗證。

簡單來說,質量保障過程中存在非常多的“不可測”場景,而此類場景如果被忽視往往會帶來非常嚴重的故障。以下游超時場景為例,在電商下單過程中如果出現了支付超時,需要非常謹慎的處理,一旦出現邏輯漏洞就會導致用戶資損。更多關于異常場景的分析,可以翻閱本文附錄--異常場景分析。

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

驗證平臺(VIP)Verification??Platform


目標:

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

架構設計

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

d4c976639fdb99714d48e77a2c86d902.png

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

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

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

工作原理

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

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

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

工作流程示意圖:

a424f24c5a9fd644f8f1a30ffe992e1f.png

簡要流程說明:

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

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

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

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

規則定義

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

b0d313685d61c17ea3512a2c7e9669aa.png

規則狀態機:

4043cbba0431fcdf970e63ed643b49ee.png

平臺使用


極速使用說明

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

  2. 通過頁面創建規則;

  3. 通過頁面啟、停規則。

一個案例

一、部署vip-agent

3d5c6f5b4f1ebba2ee60e0d12a427567.png

二、創建規則

  1. 選擇場景;

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

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

b9da3864e0a3951cd5b96072cc42a3c5.png

三、啟、停規則

f15b2d761033175b040b94e2f77cc592.png

方案拓展


構造并發場景

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

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

0532ff33da10652edce308b374062d24.png

提前驗證實時巡檢

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

難點:

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

  2. 精準污染核心字段;

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

解法:

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

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

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

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

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

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

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

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

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

21e3c2cb0e99f89cd6b270037c30b153.png

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

vip還支持非常多的其它場景,不再一一贅述。

異常場景分析


系統調用抽象

如果把系統中的一次核心的邏輯處理看作一個“業務操作”,那么一次服務系統被調用的過程大致可以劃分為三個部分:業務處理前,業務處理中,業務處理后。

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

業務處理中,SUT(被測系統)具體處理業務邏輯的過程,可以歸類為:業務校驗、業務處理、數據持久化。業務校驗是基于業務層面的校驗,例如付款時,需要校驗用戶余額是否充足等;業務處理是程序中正式處理數據和計算的部分,例如從用戶余額中扣除資金并增加到商家賬戶中等;數據持久化就是將數據落到數據庫。

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

fb6ac3e5ccafc70a96f78269e9581623.png

異常用例設計

主要的異常場景分類:

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

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

  • 業務處理后:返回異常。?? ? ?

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

6de16d05ecc656a61cdf9ddc6bbec88f.png

說明:“異常用例設計模版”已獲國家發明專利授權(注意:可以借鑒但不要隨意使用~):CN109240908B


b6d59198ac83c72ab395b12350b2f1c7.png

點個“在看”支持一下?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/446117.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/446117.shtml
英文地址,請注明出處:http://en.pswp.cn/news/446117.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux內核 scatterlist介紹

scatterlist 物理內存的散列表。通俗講,就是把一些分散的物理內存,以列表的形式組織起來 誕生背景 假設有三個模塊可以訪問memory:CPU、DMA控制器和某個外設。CPU通過MMU以虛擬地址(VA)的形式訪問memory;…

www.python123.org_python爬蟲-requests

Requests庫是目前常用且效率較高的爬取網頁的庫1.一個簡單的例子import requests #引入requests庫r requests.get("http://www.baidu.com")  #調用get方法獲取界面print(r.status_code)    #輸出狀態碼print(r.text)    #輸出頁面信息通過以下代碼&#x…

Linux內核 crypto文件夾 密碼學知識學習

密碼算法分類 對稱算法非對稱算法消息摘要(單向哈希)算法這些算法作為加密函數框架的最底層,提供加密和解密的實際操作。這些函數可以在內核crypto文件夾下,相應的文件中找到。不過內核模塊不能直接調用這些函數,因為…

python隨機出100道加法題_自動出題隨機100題-20以內加減法全部算式

班 級:姓 名:12-819-411-1114-1018-111417-261215-113-417-819-1914-341516-31269619-161159312817-014-1414-1112-501414-017-616-111-012-211520-711113051019-1810619-691118-1220-519-818018114-1416-712-1015-1319-916-714-920-717-118-1611-815-416-1014-919-416-1413-…

Linux crypto相關知識的匯總 Linux加密框架crypto中的算法和算法模式(一)

Linux加密框架中的算法和算法模式 Linux加密框架中的算法和算法模式(一)_家有一希的博客-CSDN博客 加密框架支持的密碼算法主要是對稱密碼算法和哈希算法,暫時不支持非對稱密碼算法。除密碼算法外,加密框架還包括偽隨機數生成算法…

python3.5.2安裝pygame_【閑來無事,py寫game】Mac-Python3.5安裝pygame 1.9.2 小計

13正文之前沒錯,我就是這么不學無術,C實在學的雞兒疼,所以干脆搞點娛樂措施,昨天趕上了京東圖書做大活動,所以屯了一批書,好久沒碰python了。所以就整本玩玩!今天這不就上手了么!自己…

Linux crypto相關知識的匯總 Linux加密框架crypto對稱算法和哈希算法加密模式

參考鏈接 Linux加密框架中的算法和算法模式(二)_家有一希的博客-CSDN博客 對稱算法 分組算法模式 ECB模式 ECB模式下,明文數據被分為大小合適的分組,然后對每個分組獨立進行加密或解密如下圖所示如果兩個明文塊相同&#xff0c…

物化視圖和視圖的最大區別_基于catalyst的物化視圖改寫引擎的實現

更新日志:1. 2020/06/16 group by 視圖的部分描述錯誤,已修正。什么是物化視圖我先用我的話解釋一下什么是物化視圖。假設我們已經有A,B兩張表,現在我創建了一張表C,C是由A,B兩張表經過一條SQL處理得到的,這個時候我們…

Linux加密框架中的算法和算法模式

參考鏈接 Linux加密框架中的算法和算法模式(三)_家有一希的博客-CSDN博客 對稱算法 14 如上所示,在arc4.c中定義了兩個與RC4算法相關的算法實現,分別為arc4和ecb(arc4),其中arc4是RC算法的算法實現,而ecb…

python學籍管理系統 flask_taskday05-Python之flask學習 web開發最基本的需要(特別詳細且適用)...

1.首先一個Flask的Web項目的創建需求一(文章概述):一:必須實現命令工具管理App,用于在命令行輸入命令對項目進行管理,對后期多多益善二:必須實現“藍圖”管理,用于將app啟動函數與路由分開管理,…

Linux加密框架crypto AES代碼相關

例子 aes_generic.c - crypto/aes_generic.c - Linux source code (v5.15.11) - Bootlin static struct crypto_alg aes_alg {.cra_name "aes",.cra_driver_name "aes-generic",.cra_priority 100,.cra_flags CRYPTO_ALG_TYPE_CIPHER,.cra_blocks…

python語言print函數_Python 的 print 函數

Python 2.x 系列已經停止維護了, python 3.x 系列正在成為主流,盡管有些項目還是python2.x 的,之后寫Python 代碼為了保持兼容性,還是盡量和Python 3 標準保持一致作為一個Python newbee 而言, python 2.x 和 3.x 的 …

Linux加密框架crypto crypto_alg|cipher_alg數據結構|AES例子

加密框架將算法的屬性抽象為算法說明數據結構struct crypto_alg,加密框架中的每一個算法(基礎算法和衍生算法)都表示為一個算法說明數據結構的實例,因此將struct crypto_alg稱為通用算法說明數據結構。后續章節中如無特殊說明&…

python如何運用ols_使用OLS回歸(Python,StatsModels,Pandas)預測未來值

我目前正試圖在Python中實現一個MLR,我不知道如何去應用我發現的未來值的系數。使用OLS回歸(Python,StatsModels,Pandas)預測未來值import pandas as pdimport statsmodels.formula.api as smimport statsmodels.api as sm2TV [230.1, 44.5,…

Linux加密框架 crypto RC4

參考鏈接 arc4.h Linux加密框架中的主要數據結構(一)_家有一希的博客-CSDN博客 頭文件 arc4.h - include/crypto/arc4.h - Linux source code (v5.15.11) - Bootlin實現代碼 arc4.c arc4.c - crypto/arc4.c - Linux source code (v5.15.11) - Bootlin…

python讀txt轉array_python將txt文件讀入為np.array的方法

原文件:7.8094,1.0804,5.7632,0.012269,0.008994,-0.003469,-0.79279,-0.064686,0.11635,0.68827,5.7169,7.9329,0.010264,0.003557,-0.011691,-0.57559,-0.56121,原文件數據比較多,是一個125行,45類float數字。代碼:# -*- coding…

Linux加密框架 crypto 哈希算法說明 同步哈希shash_alg | 異步哈希 ahash_alg | 通用部分抽象 hash_alg_common

參考鏈接 Linux加密框架中的主要數據結構(二)_家有一希的博客-CSDN博客 定義 通用算法說明數據結構crypto_alg的聯合體成員變量cra_u中包含多種算法的個性化屬性,如分組算法、塊加密算法、壓縮算法、偽隨機數算法等,但不包含哈希…

python 列表間隔取值_python list數據等間隔抽取并新建list存儲的例子

原始數據如下:[e3cd, e547, e63d, 0ffd, e39b, e539, e5be, 0dd2, e3d6, e52e, e5f8, 0000, e404, e52b, e63d, 0312, e38b]將其分割為4路數據,分別存儲在fetal1、fetal2、mother1、ECG的列表中,各列表對齊,不能整除于4的數據舍去…

Linux加密框架 crypto 哈希算法舉例 MD5

參考鏈接 Linux加密框架 crypto 哈希算法說明 同步哈希shash_alg | 異步哈希 ahash_alg | 通用部分抽象 hash_alg_common_CHYabc123456hh的博客-CSDN博客Linux加密框架中的主要數據結構(二)_家有一希的博客-CSDN博客 MD5 md5.h - include/crypto/md5.h …

事務沒提交的數據查的出來嗎?_“金三銀四”面試官:說說事務的ACID,什么是臟讀、幻讀?...

一、事務事務是數據庫管理系統執行過程中的一個邏輯單位,由一個有限的數據庫操作序列構成。--摘自百科在MySQL里,事務是在引擎層面實現,比如MyIsam不支持,InnoDB支持面試清單(Java崗):JavaJVM數…