一、前言
2019年攜程酒店團隊開發了比對自動化平臺,極大地提高了測試效率,但在使用過程中慢慢也發現了以下一些問題:
1)爲了能夠覆蓋更多的場景,每次拉取很多流量運行,運行數據量比較大;
2)運行數據量大導致運行時間長,等待運行的場景積壓多,運行不穩定;
3)每次運行的流量都是隨機性拉取,導致流量場景覆蓋不穩定;
4)每次拉取的流量沒有一個具體數據度量,代碼覆蓋率是多少;
5)不能自動發現流量覆蓋新的場景,而是通過人工偶然發現,手動標識;
根據以上問題,我們設計開發了精準流量篩選。在使用過程中提高了測試精準性和測試效率,並在此基礎上根據業務人員需求相繼開發了手動流量篩選,自動流量篩選,用例智能推薦等。
本文將從比對平臺如何和流量篩選結合以及手動流量篩選,自動流量篩選,用例智能推薦的方面,分享精準流量篩選,希望能給遇到同樣問題的小夥伴帶來一些啓發和借鑑。
二、整體介紹
2.1 手動流量篩選流程圖
2.2 自動流量篩選流程圖
2.3 用例智能推薦流程圖
2.4 相關技術
流量篩選我們主要採用和公司內部的代碼覆蓋率平臺(採用開源代碼覆蓋Jacoco開發的內部系統)結合獲取流量的代碼覆蓋率數據,以及分佈式多線程運行,篩選流量使用傑卡德相似度算法。
通過該方式可以解決:
1)獲取流量的代碼覆蓋率數據問題;
2)流量篩選速度比較慢的問題;
3)流量篩選不精確的問題;
關於傑卡德相似度算法:兩個集合A和B交集元素的個數在A、B並集中所佔的比例,稱爲這兩個集合的傑卡德係數,流量相似度越高傑卡德係數近於1。
相關公式:
2.5 模塊關係圖
精準流量篩選由三個模塊組成:手動流量篩選模塊,自動流量篩選模塊,用例智能推薦模塊。
手動流量篩選模塊,自動流量篩選模塊是兩個相對獨立的模塊。手動篩選可以指定具體哪些流量進行篩選,更具有針對性;自動化流量篩選是在機器空閒的時候(通常是晚上),根據用戶配置隨機獲取流量數據,然後對流量進行篩選,更具隨機性,用戶可以根據業務需求選擇篩選方式。
用例智能推薦模塊,推薦的用例是手動流量篩選模塊和自動流量篩選模塊篩選的流量用例,在篩選的過程中標識出新發現的場景流量用例,把這些新發現的流量用例推薦給用戶,方便用戶精確地寫接口自動化用例。
三、模塊介紹
3.1 手動流量篩選
篩選原理:比對自動化平臺和公司的代碼覆蓋率平臺打通,通過回放場景流量用例,獲取流量用例的代碼覆蓋率信息,對流量用例的代碼覆蓋率數據進行相似度計算,剔除覆蓋率數據相似的流量用例,留下代碼覆蓋率數據不同的流量用例。
回放的流量來源:
- 手動配置
- ES保留
- ES手動拉取
- Clog手動拉取
- CK手動拉取
流量篩選詳情頁配置
- 流量請求地址
- 請求的header信息
- 流量篩選塊數量
運行方式
- 手動執行
執行方式
- 分佈式
- 多線程
運行結果查看頁
- 查看去除的相似的流量用例
- 查看流量用例的行覆蓋率信息
- 查看流量用例的方法覆蓋率信息
- 查看整體流量用例的覆蓋率趨勢圖
- 查看實時流量篩選運行步驟信息
3.2 自動流量篩選
篩選原理:每天凌晨開始,自動到配置的數據源拉取配置數量的流量,對流量進行回放,獲取流量用例的代碼覆蓋率信息,對流量用例的代碼覆蓋率數據進行相似度計算,剔除覆蓋率數據相似的流量用例,留下代碼覆蓋率數據不同的流量用例。
回放的流量來源:
- 手動配置
- ES保留
- ES實時拉取
- Clog實時拉取
- CK實時拉取
流量篩選詳情頁配置
- 流量請求地址
- 請求的header信息
- 流量篩選塊數量
運行方式
- 晚上自動執行
執行方式
- 分佈式
- 多線程
運行結果查看頁
- 查看去除的相似的流量用例
- 查看流量用例的行覆蓋率信息
- 查看流量用例的方法覆蓋率信息
- 查看整體流量用例的覆蓋率趨勢圖
- 查看實時流量篩選運行步驟信息
3.3 用例智能推薦
推薦原理:手動流量篩選和自動流量篩選在篩選用例的時候,標識出新發現的場景流量用例(覆蓋了新的方法或者新的代碼行),把這些新發現的流量用例推薦給用戶,方便用戶精確地寫用例。
推薦用例數據來源:
- 手動流量篩選的用例
- 自動流量篩選的用例
運行結果查看頁
- 根據時間查詢推薦的用例
- 根據方法查詢推薦的用例
四、使用效果
以某一使用流量篩選的場景爲例:
- 從目前4萬多的流量中挑選出1000個新場景,後續還在自動流量篩選中;
- 代碼覆蓋率從23%提升到41%(流量篩選發現新場景該覆蓋率還會繼續提升);
五、總結
目前流量篩選已穩定運行半年,相比之前有以下變化:
- 比對場景用例覆蓋率穩步提升
- 比對場景運行效率更高
- 比對場景運行穩定性增加
- 流量篩選過程中發現很多新的場景流量
- 智能推薦了很多有效的新場景流量用例
爲了更好的滿足用戶需求,對於流量篩選,後續我們將持續迭代。
作者介紹:
文傑,攜程高級測試經理,主要從事測試框架和平臺的研發,現負責自動化與工具平臺,熱衷於研究技術提升測試工作效率。
本文轉載自公衆號攜程技術(ID:ctriptech)。
原文鏈接: