跟著 Google 學測試自動化——淺談 Telemetry 的測試框架設計

Telemetry(項目主頁)是 Google 為 Chromium 項目所編寫的一套性能測試自動化框架饲握。

從測試架構上以及實際使用中,Telemetry 均表現出極強的易用性和擴展性捐康,本文試圖探討的就是 Telemetry 的框架是如何設計以及為啥這樣設計的赂毯。

Telemetry 體現的出的易用性以及擴展性

為了體現 Telemetry 的易用性和擴展性懂算,首先我們得先來看看 Telemetry 的用法:

這是 Telemetry 官方文檔給出的 Telemetry 的一種基礎用法(引用至自 Telemetry: Run Benchmarks Locally):

$ telemetry/run_benchmark --browser=canary smoothness.top_25

以上命令將會讓 Telemetry 在名為 canary 的瀏覽器上執(zhí)行一段已經預定義好的 Benchmark策严。而且從所執(zhí)行的 Benchmark 的命名上我們可以看出,該Benchmark 的性能指標集合為 smoothness凑保,站點集合為 top_25冈爹。

  • 易用性

    由于以上命令已經非常接近業(yè)務側的描述語言,因此使用者無需關注于實現細節(jié)欧引,就能很好的使用 Telemetry 完成相關測試频伤。也正是由于這種特性,Telmetry 除了監(jiān)控 Chromium 和 Chrome 項目的核心性能芝此, 也可以被用作評估 Web 服務的性能憋肖。

  • 擴展性

    Telemetry 已經提供了100+ 項 Benchmark因痛,基本涵蓋性能測試的基本需求。但是如果想對其進行擴展也是及其方便的岸更,僅需三步:

    • Step 1. 在 page_sets 文件夾中依樣畫葫蘆的新建一個 your_new_pageset.py 文件鸵膏,添加上你所需的測試的站點。
    • Step 2. 在 measurements 文件夾中新建一個 your_new_measurement.py 文件怎炊,從預定義好的 metrics 中選擇你所需的指標谭企,依樣畫葫蘆的添加進去。
    • Step 3. 新增一個 benchmark评肆,指明其 pageset 為 your_new_pageset债查,其 measurement 為 your_new_measurement 即可。

    也即是說在 Telemetry 具備自動檢測變更并加載配置的能力瓜挽。這將大大降低維護工作的成本盹廷。

Telemetry 是如何設計的

"事要知其所以然",我們既然知道的 Telemetry 框架具有易用性強且擴張性強的特點,就應該費一點功夫弄清其框架的是如何設計和實現的久橙。

當然框架設計這個命題有點大俄占,因此我們重點從以下幾個方向來進行分析:

  • 測試對象:

    基于Chromium 和 Chrome 內核的所有瀏覽器,在 瀏覽頁面時 的性能數據剥汤。

  • 技術手段:

    被測對象驅動:以 Chrome DevTools 的 Remote Debugging Protocol 為主,輔助以平臺相關的控制命令
    性能數據來源:以 Inspector timeline and traces 為主排惨,輔助以平臺相關的性能數據

  • 測試理念:

    Telemetry 最小的可測試對象稱為一個基準(Benchmark)吭敢。測試所需的配置都被寫入到每個基準(Benchmark)中,來保證在不同機器上測試時的一致性暮芭。

    而一個基準(Benchmark)可以包含有多個測試(Page Test)鹿驼,而這具有由頁面集合( Page Set)和測量( Measurement)組成,其中:

    • 頁面集合( Page Set)定義了測試(Page Test)集合中將會分別測試哪些頁面
    • 測量( Measurement)定義了在一次測試(Page Test)中將會測試哪些指標(Metrics)
  • 測試框架設計方案

    下圖是筆者根據源碼結合自身理解所畫 Telemetry 測試框架的架構圖:

    Test Automation Framework of Telemetry

    這個設計方案中有幾個明顯的特點需要指出:

    1. 頁面集合( Page Set)和測量( Measurement)是 Telemetry 中最為重要的核心組件辕宏。兩者幾乎完全解耦畜晰,因此理論上可以做到任意組合以形成新的基準(Benchmark);

    2. 頁面集合( Page Set)不僅定義好了頁面的URL瑞筐,而且同時定義了對頁面的測試相關操作(Page Action)凄鼻。因此在測試某些特殊站點(如需要登錄賬號的站點)時,可以依賴統一的對外封裝接口聚假,很方便的進行特殊的內部控制块蚌。

    3. 測量( Measurement)僅僅決定用哪些指標(Metrics)以及怎么通過這些指標(Metrics)來表達最終的結果。

    4. 指標(Metrics)中絕大部分都是由 Telemetry 框架預定義好的膘格。

    5. 由于 Telemetry 對測試對象的高度抽象峭范,因此整個測試過程也能高度抽象為一個基類 Page Test,無論頁面集合( Page Set)中測試相關操作(Page Action)以及指標(Metrics)的具體實現都可以在 Page Test 所提供的接口中得以實現瘪贱。

    6. Telemetry 提供了測試所需的各種基礎類庫纱控,例如用于錄制回放的 wpr辆毡,用于 Android 設備控制的 devil,用于數據分析處理的 value 等等甜害。

Telemetry 為何要這樣設計

正所謂“沒有對比就沒有傷害”舶掖,要想領會 Telmetry 設計的優(yōu)秀,就先得縷一縷常見的自動化測試框架唾那。

常見的自動化測試基礎框架

根據文章《Choosing a test automation framework》(原文访锻、譯文)的總結,常見的自動化測試基礎框架有如下四種方案:

  • 1.測試腳本模塊化框架(The Test Script Modularity Framework)

    Example:The Test Script Modularity Framework

    特征

    通過創(chuàng)建獨立的闹获,零件化的小腳本期犬,并通過分級的方式將這些小腳本組成更大的腳本,最終來實現一個特定的測試用例避诽。

    特點

    • 結構清晰龟虎,容易實現
    • 在多人團隊中,較難實現團隊分工
  • 2.測試庫構架框架(The Test Library Architecture Framework)

    Example:The Test Library Architecture Framework

    特征

    與測試腳本模塊化框架的理念相同沙庐,區(qū)別在于創(chuàng)建的零件并非腳本而是各種庫函數以及函數以供上層調用鲤妥。兩者的區(qū)別特別像"面向過程"與"面向對象"。

    特點

    • 高度模塊化拱雏,提升了可維護性棉安,在多人團隊容易實現分工
    • 相對而言代碼量較高
  • 3.關鍵字驅動或表驅動測試框架(The Keyword-Driven or Table-Driven Testing Framework)

    Example:The Keyword-Driven or Table-Driven Testing Framework

    特征

    該框架的特點是,發(fā)明了一套獨立于應用程序的"語言"铸抑。其中的每個測試項贡耽,其測試步驟(或方法)以及測試數據都被寫在詳細指引里了。

    特點

    • 用例可讀性強鹊汛,用例可維護性強
    • 實現框架的抽象程度高蒲赂,難度大
  • 4.數據驅動測試框架(The Data-Driven Testing Framework)

    Example:The Data-Driven Testing Framework

    特征

    該框架與關鍵字驅動或表驅動測試框架的區(qū)別是,只有測試數據包含在數據文件中刁憋。

    優(yōu)缺點

    • 只需要非常少的代碼就可以產生大量的測試用例
    • 僅適用于測試場景可以高度抽象的情況

Telemetry 架構設計分析

上述四種框架是各有優(yōu)缺點的基礎架構滥嘴,在實際工程中最常見框架是上述技術的組合,抽取它們的優(yōu)點至耻,剔除其弱點若皱。而 Telmetry 很明顯也就是綜合運用上述基礎框架模型而形成的。

那么尘颓,為什么 Telemetry 要這樣設計呢是尖?我們可以簡單討論一下。

Q1: 為啥 Telemetry 沒有采用關鍵字驅動或表驅動測試框架(The Keyword-Driven or Table-Driven Testing Framework)泥耀?

A1: 因為 Telemetry 框架提供的是一種 Benchmark 型的測試饺汹。因此,需要的是一種可以在不同機器上保持測試一致性的能力痰催,而非靈活定制化的能力兜辞。而且實現關鍵字驅動或表驅動的代價很高迎瞧,所以沒有必要。但是為了保障其易用性逸吵,Telemetry 依然在調用命令上下了比較大的功夫凶硅,可以讓使用者直接從語義上明確當前測試的具體配置。

Q2: Telemetry 是如何使用測試庫構架框架(The Test Library Architecture Framework)以及測試腳本模塊化框架(The Test Script Modularity Framework)的扫皱?

A2: 由于 Telemetry 工程量較大足绅,為了方便多人協作開發(fā),整體上 Telemetry 是采用測試庫構架框架(The Test Library Architecture Framework)來設計的韩脑。但在具體的模塊內部氢妈,也有采用測試腳本模塊化框架(The Test Script Modularity Framework)。

Q3: 簡單分析一下 Telemetry 中數據驅動測試框架(The Data-Driven Testing Framework)的應用段多?

A3: 雖然前面提到靈活定制化的需求對于 Telemetry 而言并不那么重要首量,但是在 Page Set 中需要維護大量的站點,并可能存在更新維護的需求进苍。目前加缘,Telemetry 在 Page Set 內部簡單實現了一種類似數據驅動測試框架(The Data-Driven Testing Framework)的方式,方便我們從 List 中批量導入被測站點觉啊。但筆者認為從方便更新維護的角度考慮拣宏,需要針對 Page Set 設計一個可以支持從外部導入數據驅動測試的機制。

我們可以從 Google 身上學到的

由于筆者在工作中也從事瀏覽器相關的測試工作杠人,因此對比了 Telemetry 與自己開發(fā)的測試框架之后勋乾,可以總結了如下一些可以從 Telemetry 中學習的要點:

  • 高度抽象核心場景并實現充分解耦

    Telemetry 在 Page Set 和 Measurement 上的充分解耦是該項目成功的關鍵,而解耦的基礎在于能夠抽象出其測試場景是“測試 瀏覽頁面時 的性能數據”搜吧。特別是將 Page Action 納入 Page Set 一并管理市俊,而非將其歸屬于所謂的測試步驟中(筆者自己寫的腳本就是這么做的杨凑!囧B四巍),很有借鑒意義撩满。

  • 實現上以測試庫構架框架(The Test Library Architecture Framework)為主

    只要提供的不是 script蜒程,而是 framework ,理論上都應遵循這個設計伺帘。

  • 注重工具的用戶體驗

    本質上來講昭躺,關鍵字驅動或表驅動測試框架(The Keyword-Driven or Table-Driven Testing Framework)的本質就是為了降低用戶使用成本,從而提升用戶體驗伪嫁。因此领炫,我們的腳本在使用上一定得做到“看上去就知道是給人用的”。

  • 除非測試頻率高且變更快(對比 Chromium 的性能測試)张咳,不然暫時可以不用考慮關鍵字驅動或表驅動測試框架(The Keyword-Driven or Table-Driven Testing Framework)

    實現成本太高了帝洪,這對后期設計其他的框架應該極具參考意義似舵。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市葱峡,隨后出現的幾起案子砚哗,更是在濱河造成了極大的恐慌,老刑警劉巖砰奕,帶你破解...
    沈念sama閱讀 222,729評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蛛芥,死亡現場離奇詭異,居然都是意外死亡军援,警方通過查閱死者的電腦和手機仅淑,發(fā)現死者居然都...
    沈念sama閱讀 95,226評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來盖溺,“玉大人漓糙,你說我怎么就攤上這事『嬷觯” “怎么了昆禽?”我有些...
    開封第一講書人閱讀 169,461評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蝇庭。 經常有香客問我醉鳖,道長,這世上最難降的妖魔是什么哮内? 我笑而不...
    開封第一講書人閱讀 60,135評論 1 300
  • 正文 為了忘掉前任盗棵,我火速辦了婚禮,結果婚禮上北发,老公的妹妹穿的比我還像新娘纹因。我一直安慰自己,他們只是感情好琳拨,可當我...
    茶點故事閱讀 69,130評論 6 398
  • 文/花漫 我一把揭開白布瞭恰。 她就那樣靜靜地躺著,像睡著了一般狱庇。 火紅的嫁衣襯著肌膚如雪惊畏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,736評論 1 312
  • 那天密任,我揣著相機與錄音颜启,去河邊找鬼。 笑死浪讳,一個胖子當著我的面吹牛缰盏,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 41,179評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼口猜,長吁一口氣:“原來是場噩夢啊……” “哼形葬!你這毒婦竟也來了?” 一聲冷哼從身側響起暮的,我...
    開封第一講書人閱讀 40,124評論 0 277
  • 序言:老撾萬榮一對情侶失蹤笙以,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后冻辩,有當地人在樹林里發(fā)現了一具尸體猖腕,經...
    沈念sama閱讀 46,657評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,723評論 3 342
  • 正文 我和宋清朗相戀三年恨闪,在試婚紗的時候發(fā)現自己被綠了倘感。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,872評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡咙咽,死狀恐怖老玛,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情钧敞,我是刑警寧澤蜡豹,帶...
    沈念sama閱讀 36,533評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站溉苛,受9級特大地震影響镜廉,放射性物質發(fā)生泄漏。R本人自食惡果不足惜愚战,卻給世界環(huán)境...
    茶點故事閱讀 42,213評論 3 336
  • 文/蒙蒙 一娇唯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧寂玲,春花似錦塔插、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至彰檬,卻和暖如春伸刃,著一層夾襖步出監(jiān)牢的瞬間谎砾,已是汗流浹背逢倍。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留景图,地道東北人较雕。 一個月前我還...
    沈念sama閱讀 49,304評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親亮蒋。 傳聞我的和親對象是個殘疾皇子扣典,可洞房花燭夜當晚...
    茶點故事閱讀 45,876評論 2 361

推薦閱讀更多精彩內容