測試之路 - 精準而優雅

引子

這幾年業內一直在做精準測試,大都使用工具 diff 代碼改動、分析代碼覆蓋率這些平臺集成的能力。

業務測試中,我們在技術設計和代碼實現的基礎上也做了一些精減和精準的測試實踐,通過深入測試有針對的設計 case,發現隱藏問題,保證質量。

接下來我將通過以下幾個場景,介紹一下在 toB 業務中應用精減和精準的思路和實踐。


場景一:上傳表格的驗證

需求點

業務同學需要在運營后臺使用表格模板上傳多組數據,上傳時需要校驗表頭和字段的格式。
很多數據

作為 QA,這不就來活了,上傳校驗 case 貼上來:

問題點

  • case 中校驗內容很多,每個字段的缺失、錯誤、格式正確性都需要驗證。

  • 怎么能更好更快的測試呢?

精準測試

  1. 找到對應的上傳功能代碼:

    os: 原來神神秘秘在那敲代碼的家伙們,也和我用一樣的 for i 和 String 工具類。

  2. 通過走查代碼發現問題:用 startWith 是幾個意思?需求是全匹配啊!

  3. 提個 BUG,問題修復(startWith 換成 equals):

  4. 發現本次純數字是用同樣的正則和 .length() > 判斷,實際測一個上傳數字校驗即可。

    這個正則(^-?\d+$)判斷純數字有問題,大家看出來了嗎?

精減結果

1. 正常數據的表格 ,上傳成功。
2. 非數字格式和長度大于30的表格,分別上傳失敗。
3. 剩下的case通過審閱代碼的方式驗證。
4. 測試通過。

結果:

  • 審閱代碼發現了【startWith】、【正則(^-?\d+$)】兩個問題。
  • 減少了 case 中 10 條上傳異常表格的數據準備和操作,節省了時間。

小結

  • 首先找到代碼位置,練習審閱代碼,可以通過接口名搜索/diff 代碼/開發提供找到代碼。

  • 同類重復的測試場景,結合代碼對 case 場景歸類,可以適當選取重復的內容通過審閱代碼進行測試。

  • 注意:當你通過審閱代碼測試時,需要特別關注如【正則】、【同類型代碼(復制)】和 【get 參數】和【需求文案】,這也是審閱而不實際驗證的弊端。

  • 沉淀總結 Code Review 經驗,關注【判斷條件】、【取值】、【公式】等經常出錯的邏輯點,挖掘代碼中隱藏的 BUG。

場景二:獲取可用規則

需求點

【獲取可用規則】是匹配規則的第一部分,要根據處置優先級和啟用狀態命中匹配到可用規則,如下圖所示:

先不展開直接本部分上 case:

問題點

匹配規則是很復雜的場景,規則本身、狀態(開關)和優先級(包含同優先級)的場景很多。

完整的規則如何測試?【獲取可用規則】部分就上面的兩條 case ,夠不夠全面?

精準測試

  1. 首先了解代碼獲取優先級的邏輯,實際就是一個排序 SQL(優先級字段和自增 ID 字段倒序):

  2. 拿到 SQL 返回的集合,取第一條(get0):

  3. 通過上面的了解,我們知道狀態和優先級是通過 SQL 倒序取第一條實現的,按上述 case 可以覆蓋【獲取可用規則】的場景:
    a. 前置在庫里手動插入三個規則;
    b. 構造一條可以命中規則的數據;
    c. 驗證排序規則的結果為對應期望結果。
    d. 測試完成。

  4. 保險一點,寫個 SQL 再查一遍:

    SQL 結果第一個(即表中 id 為 44 )規則命中,同第 3 步 case 執行的結果一致。

小結

  • 對自己的 case 或者測試的系統沒有把握,可以通過結合代碼進行測試以確保功能正確性,就不用擔心這部分測試不充分啦。

  • 在測試執行過程中,我是通過數據庫 insert 的數據,這里有一個前提: case 中已經保證了頁面創建的規則在庫里保存正確。

  • 當然排序和優先級還有其他的實現方式,比如【加載到內存處理】或者【給優先級的選項增加不同的權重系數】等,期望大家總結沉淀,以后遇到從容應對。

    ^ _ ^ :仔細的測試同學可能已經發現,這里把【獲取規則】和【規則匹配驗證】拆開驗證,這是拆解理順復雜邏輯的好方式。

場景三:規則組匹配驗證

需求點

【規則組匹配】為匹配規則的第二部分,每一行是一個規則組,規則組里可以選擇配置應用 4 條‘子基本規則’(條件為且),‘子基本規則’不命中則該規則組不命中。
還是這張原型圖_

再看一下技術設計的部分流程圖:

問題點

  • 規則匹配要測試到不同規則組命中的場景,也要測試 A1,A2,A3,A4 子規則本身的正確性。

  • 如果要對規則組進行測試,應該設計 A1+A3,A3+A4,A1+A2+A3,A2+A3+A4,A1+A2+A3+A4…笛卡爾積全量的規則組 case 進行驗證

這樣窮舉出來的 case 最全,但需要的測試時間也更多,有沒有更好的解決辦法?

精減結果

  1. 本場景中即有規則組又有子規則,先測試規則組的命中,然后對‘子規則’單獨測試(場景四)

  2. 測試規則組時,根據對設計方案的理解,既然是依次排除,那無需窮舉 case, 編寫 case 時排除不需要測試的場景:

  3. 通過審閱代碼,確認代碼實現是同技術設計一致的,上面的 case 可以覆蓋邏輯:

  4. 執行測試時先構造命中規則數據,然后構造排除規則的數據(圖中標記的數字為庫表的記錄 id),查詢日志進行驗證:

  5. 結合頁面的驗證結果,真實排除了規則不匹配的規則組,測試完成。

小結

  • 當遇到功能復雜的業務場景,拆分獨立的功能單獨測試,往往會讓測試思路更清晰,最后再做集成測試,保證功能完整性。

  • 在聽完技術評審后,結合技術設計有針對的編寫 case,即能避免冗余 case,又能避免覆蓋率不夠。

  • 在審閱代碼后,通過 log 關鍵字查詢日志和驗證,確保頁面結果和系統邏輯結果一致,防止黑盒測試不充分。

場景四:同類的規則條件

需求點:

【同類的規則條件】為匹配規則的第三部分,單個規則組內所有‘子基本規則’都命中這個規則組才命中,需要測試各‘子基本規則’的匹配邏輯。

問題:

case 初版設計(從最全匹配的 case,逐次減少一個參數,這樣保證每個參數都能測試到):

本場景問題同上一場景類似,case 設計應為笛卡爾積的子規則,但執行的場景多,有沒有更精減的方式呢?

精減思路:

  1. 了解代碼中獲取匹配數據的邏輯,實際就是一個多 where 條件的 sql:

  2. 所以需要保證的是:最細顆粒度條件參數可以傳入并查詢正確,部分條件參數可查詢正確,case 可以精減為:
    截取部分case

  3. 測試時,通過手寫 SQL 查詢對應數據:

    -- 手動打碼SQL
    SELECT * from dbzz_****.****_volume_count where
    **_id=99530 and ***_id = 999435 and **_type = 2 and
    ****_id in (9999623,9999624) and period =14 ORDER BY id desc ;
    

    通過對比頁面結果和 SQL 查詢的結果,兩個維度驗證數據準確性。

  4. 在此分享一個本場景發現的缺陷:標記且注釋置灰的位置為問題代碼

    缺陷: 獲取數據時以最細規則(最長匹配)取倒序最近一條(order by id desc limit 1)時沒有問題,但以粗粒度的寬泛條件也取倒序最近一條,則數據不全(因為表中每一條記錄都是以最細粒度存儲)。

    發現原因: 之前遇到一個類似的 SQL 邏輯沒有使用 sum,所以對此格外關注。

    修復: 條件寬泛情況下的數據應是同條件下多條記錄的合集,所以應去掉條數限制并改成 sum。
    原mapper是select num,修復后是select sum(num)

小結

  • 業務中復雜的參數匹配,轉化成代碼時實際上是個多條件 SQL,思路是只要保證最細條件和部分條件都能傳入并查詢正確即可。

  • 在審閱代碼時,關注 mapper 信息并結合對需求的理解,可以單獨寫 SQL 驗證取值邏輯。

  • 積累業務中同類型中的 BUG 經驗,如上面 SUM 的缺陷,在后續的測試中保持關注,提高警惕。

總結

通過分析技術設計和代碼實現,可以適當分類精減 case,通過 Code Review 減少復雜的錯誤驗證,轉為審閱代碼進行測試。

通過審閱代碼,從代碼層面確認邏輯是否正確,比如關注字段取值、匹配入參、查詢條件、判斷條件、公式計算等,發現隱藏的缺陷。

以上的內容舉例,在測試實踐中減少了重復的驗證投入,有針對的設計也更有效的發現問題,最后也會讓我們的測試結果更有信心。

關于作者

聶飛 測試開發工程師


轉轉研發中心及業界小伙伴們的技術學習交流平臺,定期分享一線的實戰經驗及業界前沿的技術話題。
關注公眾號「轉轉技術」(綜合性)、「大轉轉FE」(專注于FE)、「轉轉QA」(專注于QA),更多干貨實踐,歡迎交流分享~

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

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

相關文章

抖音小程序使用Vant

安裝 Vant 有針對小程序的版本,通過npm安裝: npm i vant/weapp -S --production構建 npm 安裝 Vant Weapp 后需要構建 NPM,在菜單的【工具】選項中選擇【構建 NPM】: 使用組件 抖音小程序和微信小程序還是有一些差別的&#x…

怎么把3d模型導出cad立面---模大獅模型網

在設計工作中,將3D模型導出到CAD軟件并生成立面圖是一項常見但關鍵的任務。這不僅有助于更好地展示設計方案,還能方便后續的工程制圖和施工。本文將介紹如何通過3ds Max軟件將3D模型導出到CAD軟件,并生成高質量的立面圖,為您提供實…

現貨正泰漏電小型斷路器NXB-32LE-C16 30MA1P+N原裝正品NXB-40L

品牌:CHNT/正泰 型號:NXBLE 額定電流:25A,16A,20A,40A,32A 漏電保護器類型:2P 產地:中國大陸 電壓:1000V及以下 極數:3P,4p,2P,1PN 電源方式:交流電 3C證書編號:…

大模型時代下的先行者:景聯文科技引領數據標注新時代

在大模型時代,數據標注不再是簡單的分類標注,而是一項融合了技術革新、專業技能、法律合規和精細化管理的綜合性任務,對推動AI技術的發展和落地應用具有重要意義。 景聯文科技作為AI基礎行業的數據供應商,可協助人工智能企業解決整…

easyx快速入門1

1.基本說明 EasyX 是針對 C 的圖形庫,可以幫助 C/C 初學者快速上手圖形和游戲編程。 比如,可以基于 EasyX 圖形庫很快的用幾何圖形畫一個房子,或者一輛移動的小車,可以編寫俄羅斯方塊、貪吃蛇、黑白棋等小游戲,可以練…

fl studio試用版文件保存無法打開??一個方法教你免費打開!

前言 當下,各款編曲軟件五花八門,而這其中最有聲譽的必為FL Studio莫屬 這個軟件呢國人習慣叫他水果,擁有強大的錄音、編曲、混音等功能,所以廣受音樂圈歡迎。如今,大部分水果一旦有編曲所需,一般都要使用…

【Python快速上手(二十三)】

目錄 Python快速上手(二十三)Python3 多線程1. 線程的創建2. 線程同步2.1 鎖(Lock)2.2 信號量(Semaphore)2.3 事件(Event)2.4 條件(Condition) 3. 線程優先級…

【Linux】Centos9設置ActiveMq開機自啟功能

配置流程: 1. 創建 Systemd 服務文件。這個文件通常存放在/usr/lib/systemd/system/目錄下,命名為 activemq.service。 #先創建文件,然后編輯: sudo touch /usr/lib/systemd/system/activemq.service sudo vim /usr/lib/systemd…

CSS 根據子元素選擇父元素,并設置父元素的樣式

場景舉例&#xff1a;當子元素有增加了一個class時&#xff0c;需要影響其父元素的樣式 可以使用":has"偽類來實現選擇父元素的效果 <style>.parent:has(.child){background-color: #eee;}p{width:100px;border:1px solid #000;} </style> <body>…

Python3 筆記:for語句和while語句的區別

一般來說&#xff0c;循環次數確定的問題使用for循環或者while循環都可以解決&#xff0c;而循環次數不確定的問題只能使用while循環解決。 for語句的格式&#xff1a; for 循環變量 in 遍歷對象: 語句 while語句的格式&#xff1a; while 條件表達式: 循環體 for…

人機協同中的比較、調整與反轉

人機協同是指人與機器之間的合作關系&#xff0c;通過共同努力實現特定任務的目標。在人機協同中&#xff0c;存在著比較與調整的過程&#xff0c;這是為了實現更好的合作效果和任務完成質量。 比較是指人與機器在任務執行過程中對彼此的表現進行評估和比較。這可以通過對機器的…

DB類的學習

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Data; //引用三個命名空間 using System.Data.SqlClient; using System.Configuration;/// <summary> /// DB 的摘要說明 /// </summary> public class DB {p…

vue+ts+vite+pinia+less+echarts 前端可視化 實戰項目

1.初始化前端 輸入 npm init vuelatest 命令 然后 選擇需要的插件2.構建完成后 在終端切換到vue-project文件夾下 npm install 下載依賴 3.下載 less樣式 npm install less less-loader -D 4.下載axios npm install axios 5.下載echarts npm install echarts -S 6.引入中國…

JAVA 的數據類型

Java 是一種靜態類型語言&#xff0c;這意味著在編譯時&#xff0c;變量必須聲明其數據類型。在 Java 中&#xff0c;數據類型可以分為兩大類&#xff1a;基本數據類型&#xff08;又稱原始數據類型&#xff09;和引用數據類型。本文將詳細介紹這兩種數據類型。 一、基本數據類…

戰網國際服加速器用哪個好 暴雪戰網好用加速器介紹

戰網國際版&#xff0c;又稱Battle.net環球版&#xff0c;是暴雪娛樂操盤的全球性游戲互動平臺&#xff0c;它跨越地理界限&#xff0c;服務于全球游戲愛好者。與地區限定版本相異&#xff0c;國際版賦予玩家自由進入暴雪旗下眾多經典游戲的權利&#xff0c;無論身處何方&#…

對比測評3款BI分析工具

前不久&#xff0c;一位準備入職阿里的學弟問我&#xff0c;他要做電商數據分析&#xff0c;電商有龐雜的標簽、模型、數據和業務邏輯&#xff0c;菜鳥應該要具備什么樣的分析能力啊&#xff1f; 我看了他的崗位職責&#xff0c;主要是負責經營決策支持、專題分析和數據看板搭…

leetcode-字符串變形-104

題目要求 思路 1.首先根據ASCII的規則&#xff0c;把字符串大小寫替換&#xff0c;空格保持不變 2.將整個字符串進行翻轉 3.以空格為區間&#xff0c;將區間內的字符串進行翻轉&#xff0c;其中翻轉的函數reverse() 代碼實現 class Solution { public:string trans(string s…

【C語言】通訊錄系統實現

目錄 1、通訊錄系統介紹 2、代碼分裝 3、代碼實現步驟 3.1制作菜單函數以及游戲運行邏輯流程 3.2、封裝人的信息PeoInfo以及通訊錄Contact結構體類型 3.3、初始化通訊錄InitContact函數 3.4、增加聯系人AddContact函數 3.5、顯示所有聯系人ShowContact函數 3.6、刪除聯系人D…

Shell之常用命令

目錄 1.排序工具--sort命令 1.1 快讀查找一個目錄中最大文件 2.去重工具--uniq命令 2.1 分析判斷遠程登錄錯誤次數&#xff0c;禁止該用戶遠程登錄 3.修改工具--tr命令 4.列截取工具--cut命令 5.分割文件工具--split命令 6.合并文件列--paste命令 7.掃描工具--eval命令…

OpenAI和互聯網行業的發展,有著異曲同工之處

當OpenAI首席技術官米拉穆拉提發布桌面版本的ChatGPT和新的旗艦模型—GPT-4o&#xff0c;OpenAI的發展&#xff0c;進入到了一個真正意義上的奇點時刻。 OpenAI的短短26分鐘的發布會&#xff0c;卻依然引發了不少波瀾。 無論是ChatGPT-4o的完全免費&#xff0c;抑或是推出PC桌…