構想篇
作為一名接口自動化測試工程師,日常面臨最多的工作就是編寫接口自動化測試腳本,那麼,在 coding 的過程中最讓你覺得枯燥和乏味事情有哪些?
痛點
- 每次拿到新接口,我們要手動參照文檔在腳本中生成一份接口類,參數越多花費時間越多
- 需求不同,但健壯性和部分業務用例重複性高
- 想重構腳本,接口資料和用例這塊純編寫的工作量就會讓人望而怯步
每天都要花上30%的時間去寫那些不太需要思考的腳本,這真不夠自動化!
解決方案
- 解析文檔
- 梳理适合自動生成的腳本
- 通過工具生成這部分腳本
預期目标
解放雙手,降低純手力勞動占比,進而給自己提供更多的時間去思考、了解産品和設計更多“聰明”的用例
實踐篇
自動化擷取接口資訊
分析接口自動化腳本結構和内容
自動化測試腳本結構圖
篩選工作量大又有規律可循的腳本
此處規律不宜太過于複雜,可先選邏輯簡單的部分,我們主要選取以下兩部分
- 接口類,工作時間占比30%~50%,特點:結構特定、資料來源于其它平台
接口類結構圖
- 用例部分,工作時間占比30%~50%,特點:重複度高于80%左右、生成邏輯可描述
用例結構圖
解析接口文檔
接口資訊來源于接口文檔,目前市場上比較主流的幾個接口文檔管理工具有Swagger、RAP、WIKI 或者其他普通文檔工具。
下面以解析接口檔案為目的分析比較下幾款工具的差別:
.
分類 | Swagger | RAP | WIKI |
描述 | 用于生成、描述、調用和可視化RESTful風格的Web服務的架構 | 可視化接口管理工具 | 可供多人協同創作的超文本系統 |
格式 | json | json | html |
規範 | 各個參數、傳回值的具體結構、類型有統一規範 | 同swagger | 需要自己約定規範 |
成本 | 直接嵌入項目中,通過開發時編寫注釋,自動生成接口文檔,成本較低 | 需要開發按照平台規則手動輸入,成本較高 | 需要按照約定規範,手動輸入,成本較高 |
如果有條件,大家可以根據開發成本和解析接口檔案的難易程度來綜合考慮,确定使用哪個平台管理接口
我們項目是 Swagger 和 WIKI 混合使用,由于日常測試看 WIKI 居多,是以早期采用 Python 爬蟲利器 BeautifulSoup 來解析WIKI html頁面
from bs4 import BeautifulSoup
使用下來發現通過wiki來擷取接口資訊的一些弊端
- 完全靠人工來限制書寫規則不靠譜
- 對于複雜的嵌套參數,稍有不按照規範來的,就會導緻腳本解析錯誤,很大程度上造成了解析的難度
- 在html上準确的定位資訊遠比在json上難度大,相容性差
于是,嘗試解析Swagger傳回的json來獲得接口資訊為後面生成腳本做準備
{
使用以下方式拿到json結果後,就可以直接按照處理字典的方式來擷取需要的内容。
graph LR
對于swagger.json的解析和代碼生成官方也提供了一些可供使用的庫swagger-codegen (java),由于程式設計語言的限制,我們使用了python自己解析
現在,我們已拿到生成代碼所需要的資訊
自動生成代碼
代碼生成工具
class CodeGeneratorBackend():
接口類部分腳本生成規則
由于我們接口屬于是存儲在類結構中,是以根據目前腳本的API Object接口進行周遊替換即可
接口用例部分代碼生成規則
特殊值用例
給每個參數生成為0、None、空字元串這樣特殊值的用例
定位參數類型
通過接口參數給出的類型,生成符合該類型的值,和一些不符合參數類型的值(健壯性),指派後生成用例,如下代碼示例
定位特定關鍵詞參數
- 遇到page相關參數可生成分頁用例,具體分頁測試用例細節就不贅述
- 遇到類似starttime,endtime參數,可生成兩個時間參數和目前時間前後比較的用例,兩個時間參數前後比較的用例
該生成規則需要和開發約定一些基本原則,另外也需要我們在日常測試中多歸納總結,找出那些有固定規律的用例,想辦法定位生成這類用例
定位接口類型
- 查詢類接口:可生單參數查詢、組合參數查詢、全參數查詢等用例
- 更新類接口:可生成單條更新每個參數,組合更新,全量更新等用例
自動生成測試腳本工具介紹
架構流程圖
工具擴充性
- 用例生成規則可擴充,從架構圖中可以看到,用例規則這快自成獨立模版,可單獨維護,便于後續新規則的加入
- 代碼模版可擴充,不同團隊對于代碼規範、基礎模版的樣式都不一樣,可自定義生成模版的樣式,增加了工具的靈活性
- 支援多種資料類型轉換,後續可擴充生成API對象、參數字典或其他資料模式
成果和後續行動
效率提升
以一個優惠券需求為例,大約新增/更新了10個接口(約150個參數請求參數,100個傳回參數),包含增删改查幾種類型,編寫加調試腳本在使用工具前後所花費時間對比,如下:
類型 | 工作量描述 | 不使用工具 | 使用工具 | 效率提升 |
接口類 | 約250個參數 | 2日/人 | 1小時内 | 94% |
健壯性用例 | 約1000條用例 | 2日/人 | 1日/人 | 50% |
平均 | --- | --- | --- | 74% |
從上例可以看出使用腳本後的效率提高了近一半,而從設計到編寫完第一版工具僅花費了2~3個工作日,還是非常值得一做的。
聚焦測試
- 腳本編寫工作量的減少,會增加産品測試思考的時間,完善用例,檢查覆寫面等
統一規範
- 統一了接口類輸寫規範,便于團隊内部維護和了解腳本
- 統一基本用例生成思路,規避測試工程師在設計基本用例設計時有所遺漏;統一用例輸出格式,便于他人了解和維護用例
重構利器
- 如果有計劃做腳本重構,使用工具後可以成倍的節省編寫接口資訊和用例部分腳本的時間
後續疊代優化點
- 目前用例的生成思路大多還局限在單參數上,多參數的生成思路還較少,後續會通過頭腦風暴等形式來擴充更多的用例的生成思路
- 通過實際調用接口,擷取結果,提高自動生成用例期望結果的準确性,繼而節省更多對部分期望結果做調整的時間投入
最後想說的是,這個小工具的設計思路遠比實作更重要,無論使哪種語言或庫都可以實作解析檔案和代碼的生成,重要得是按照怎樣的思路去生成腳本,在這部分上後續我們也有很多需要摸索的地方。
作者:玉婷
來源-微信公衆号:滬江技術
出處:https://mp.weixin.qq.com/s/H1VJ2x6YD9LNytpp4Mtf9A