作者:資訊 / 來源:PlatON
自動化測試泛指使用程序或工具來代替人工的測試方式。相比人工測試,自動化測試準確度更高,且具有高可復用性,對保障產品質量、縮短測試時間有極大作用。本文將分為兩部分介紹 PlatON 開展自動化測試的思路與技術實踐。
為什么做自動化測試
在 PlatON 的世界中,存在著各種狀態,如:質押狀態、鎖倉狀態、提案狀態等。其中,節點的質押狀態就分為猶豫期、鎖定期、凍結期三種,當某個賬戶對節點進行質押、解質押后,這些狀態就開始隨著 PlatON 塊高增長而發生自動變化。在人工測試時,測試人員很難把握好其變化的時間,一旦出現失誤,就會導致環境不符合測試要求,只能重新開始測試。
自動化測試把人工測試時難以把握的狀態變化,交給測試代碼來負責。測試人員編寫好自動化測試程序,這些程序按照代碼邏輯,可以方便、精確地完成整個測試驗證。這很好地解決了人工測試的困境,同時,我們也可以享受自動化高復用性帶來的測試工作上的便利。
自動化測試的要點
在我們進行自動化測試前,需要通過對測試需求的延展和細化,來梳理出自動化測試的要點。有了這些要點,才能讓我們在建立測試框架時,不至于出現設計上的偏差。
PlatON 自動化測試包括以下三個要點:
支持分布式請求與檢查 -區塊鏈的分布式特性,決定了我們在進行測試時,也要做到分布式請求和分布式檢查。這體現在自動化測試上,就是能夠在任意節點發送交易,在任意節點校驗交易結果。
支持自由組裝交易 -我們測試 PlatON 時,主要是通過發送交易對其程序邏輯進行驗證。交易的類型、交易包含的數據不同時,打包該交易的程序邏輯也完全不同。自動化測試必須具備自由組裝交易的能力,才能夠更完善地構造測試場景,尤其是在模擬異常、作惡的測試場景時,該能力不可或缺。
支持自動化、自定義的部署鏈 -區塊鏈有不同的網絡結構模式,有節點的接入、退出,測試這些場景時,需要自動化測試能夠自定義的部署鏈。除此之外,在進行測試場景恢復的時候(執行完某一個測試場景,將場景恢復為初始狀態),遇到需要長時間等待的情況時,重新部署鏈將是更好的選擇。
自動化測試框架介紹
PlatON 自動化測試框架使用 Python 語言開發,基于 Pytest、PlatON SDK 實現,主要分為 Case、Lib、SDK 三層。
代碼詳情見 Github 倉庫:
https://github.com/PlatONnetwork/PlatON-Tests
框架設計圖
_ 框架詳細介紹_
1. Case
基于 Pytest 框架規則編寫的自動化測試用例。
2. Fixture
基于 Pytest 框架開發的 Fixture,用于支持測試用例開發,實現了自定義測試運行參數、構造測試環境、判斷環境是否滿足用例運行條件、獲取測試對象、用例前后置動作、使用鉤子拉取異常日志等功能。
在使用 Fixture 來獲取測試對象時,我們會將每個節點抽象化為一個 Client 對象,并返回所有 Client 對象列表給予用例使用,使得用例可以根據測試場景需要,自由進行分布式的交易請求和檢查。
我們定義了一批檢查環境的 Fixture,用于檢查當前鏈是否滿足某一類測試場景的運行條件。能夠滿足則運行該測試場景,不能滿足,則將鏈進行重新部署,然后基于重新部署的鏈運行該測試場景。我們以這種方式,來保證自動化測試可以持續運行。
3. Lib
Lib 作為測試用例的支持層,對接 Fixture,封裝了一些公共方法、測試工具、計算公式、配置信息等。其中 Client 類為 Lib 層的主類,它組裝了整個 Lib 層的對象,方便自動化測試代碼開發,并加入了 Env SDK 和 PlatON SDK 的主對象,以實現鏈環境部署、自定義交易發送的能力。
4. Env
PlatON 鏈部署代碼,將測試環境抽象為 Env、Server、Node 等類,使用 Supervisor 來進行 PlatON 節點的進程、日志管理。Env 支持多線程的方式,對鏈、對節點進行部署、修改、查詢、清理等操作。
5. SDK
PlatON SDK,提供了自由組裝和發送交易能力,當我們需要構造特殊的交易時,我們會直接深入到 SDK 層再進行構造。