攜程機票 BDD UI Testing 框架 - Flybirds

作者簡介

 

Liang,攜程研發總監,關注工程效能、DevOps、自動化框架等。

一、背景

攜程機票從 2018 年年中正式引入 BDD,至今已 3 年多,成爲內部首選的敏捷開發技術。

Flybirds 是一套基於 BDD 模式的前端 UI 自動化測試框架,提供了一系列開箱即用的工具和完善的文檔,現在逐步穩定,成爲機票內部首選的 BDD-UI-Testing 測試框架。

二、爲什麼開源

本文將從特性介紹、環境搭建、使用幫助、自定義擴展、持續集成、發版計劃這幾個方面對框架進行介紹。

三、Flybirds

四、特性

使用 Flybirds 你能夠完成大部分的手機端自動化操作,以下是一些幫助入門的特性描述:

五、環境搭建

5.1 使用 pip 安裝 flybirds 框架,過程中會自動安裝所需的依賴包

pip3 install flybirds

在 Mac/Linux 系統下,需要手動賦予 adb 可執行權限

cd {your_python_path}/site-packages/airtest/core/android/static/adb/mac
chmod +x adb
cd {your_python_path}/site-packages/airtest/core/android/static/adb/linux
chmod +x adb

5.2 使用腳手架創建項目

flybirds create

六、快速上手

6.1 運行演示

爲了幫助使用,項目創建時,會生成中英文的 Android、iOS 演示 feature,方便用戶參考。

features/test/
features/test/android
features/test/android/cn/everything.feature
features/test/android/en/everything.feature
features/test/ios
features/test/ios/cn/everything.feature
features/test/ios/en/everything.feature

以 “Android” 爲例:

cd {PATH_TO_PROJECT_FOLDER}
flybirds run -P features/test/android

框架會通過 flybirds_config 中配置的 packagePath 自動下載測試包並安裝(請確保手機已經打開” 允許安裝未知來源 “ )。

運行結果如下:

11 features passed, 0 failed, 0 skipped, 0 untested
23 scenarios passed, 0 failed, 0 skipped, 0 untested
117 steps passed, 0 failed, 0 skipped, 0 undefined, 0 untested
Took 5m21.300s
=====================================================================================
    Multiple Cucumber HTML report generated in:
    /Users/test/my_first_project/report/7eb9162a-9d42-4fde-a5d7-d8d4bca7a8d8/index.html
=====================================================================================

接下來,瞭解下更多項目細節。

6.2 項目結構

6.3 features 目錄

基礎目錄結構如下:

features/
features/test/
features/test/everything.feature
features/steps/
features/steps/steps.py

複雜些的目錄結構參考如下:

features/
features/test/
features/test/list.feature
features/test/buy.feature
features/test/detail.feature
features/steps/
features/steps/steps.py

6.4 feature 文件

feature 文件包含用戶動作,行爲特徵描述及預期結果的文本,行爲特徵部分使用 Gherkin 語言編寫。

feature 文件,也稱爲功能文件,有兩個目的:文檔和自動化測試。

以關鍵字開頭(“功能”、“場景”、“場景大綱”、“當”、“而且”、“那麼”……), 文件中的任何位置都允許使用註釋行。

以下是中文 feature 例子:

以下是英文 feature 例子:

6.5 step 語句模板

以下列出了部分模版 | 更多模版查閱

6.6 Hooks

用戶可在以下文件中定義 hooks:

pscript/dsl/step/hook.py

        在每個步驟 (step) 之前和之後運行

在每個場景 (senario) 之前和之後運行

在每個功能文件 (feature) 之前和之後運行

在用給定名稱標記 (tag) 的部分之前和之後運行

在所有執行之前和之後運行

6.7 標籤 (Tags)

可以使用 tag 標記不同的場景,方便有選擇性的運行。

下面是一個例子:

運行有特定 tag 的場景,多個用逗號隔開:

flybirds run -T tag1,tag2

‘-’開頭表示運行不包含某 tag 的場景:

flybirds run -T -tag

七、運行前檢查

7.1 請確保配置的測試設備能夠正常連接

Android 設備連接 Q&A

iOS 設備連接 Q&A

7.2 下載安裝測試包

a. 請手動下載演示 APP 進行安裝:下載地址

b. 開啓 wdaproxy:shell tidevice --udid 

$udid wdaproxy -B $web_driver_angnt_bundle_id -p $port

八、運行參數

在終端輸入以下內容來查看 flybirds 運行項目時支持的操作

flybirds run --help

執行 features 目錄下所有的 feature 文件

指定需要執行的 feature 集合,可以是目錄,也可以指定到具體 feature 文件,默認是 ‘features’ 目錄.

示例:

flybirds run -P ./features/test/demo.feature

運行有特定 tag 的場景,多個用逗號隔開,‘-’開頭表示不運行包含此 tag 的場景

flybirds run -T tag1,tag2,-tag3,tag4

指定生成測試結果的格式,默認是 json.

示例:

#默認
flybirds run --format=json

九、配置參數

提供了豐富的配置項 | 幫助文檔

必須配置項:deviceId packageName。

連接 iOS 設備時,需要額外配置 webDriverAgent、platform。

十、報告 (report)

報告包含彙總 Summary 和功能 (feature) 、場景 (senario) 的執行結果,對於失敗的場景 (senario),報告中會展示當時的屏幕圖像和視頻,下面是一個例子。

十一、自定義 step 語句模板

在編寫 Feature 的過程中,可能會遇到提供的公共語句不能滿足自身項目的需求,需要自定義語句。比如:需要對接某個內部工具 API,此時需要用到自定義語句功能。

自定義語句功能會用到 python,如果你不瞭解這門編程語言,也不必要太擔心,因爲只會使用到最基礎的 python 語法,這並不會太難。

使用方法

示例代碼如下:

對於團隊內部通用的自定義功能,可以考慮創建一個 extend package,flybirds 支持動態加載,package 命名包含 “-flybirds-plugin” 即可。

十二、自定義框架擴展

理論上 BDD-UI-Testing 可以適用在所有端,比如:APP、Web、小程序。

框架的插件式設計模式,保留了良好的擴展,當前版本只開放了 APP 端支持,未來會逐步開放更多,下面是兩個例子供大家參考。

增加 web 端擴展

修改當前 APP 端擴展

a. 可以在本地創建一個自己 app.py

b. 在 plugin_info.json 對應平臺中添加如下配置:

"app": {
   "path""{local_path}/app.py",
   "ns""app.plugin"
}

{local_path} 爲本地路徑,"ns" 爲包名,注意包名的唯一性。

十三、其他語種支持

flybirds 可以支持 40 幾種語言,在以下文件中增加公共方法的語言配置即可。

flybirds/core/dsl/globalization/i18n.py

示例代碼如下:

十四、持續集成

cli 提供的命令行執行模式,可以非常方便加入各種持續集成工具。

以 Jenkins 爲例:

# Inside the jenkins shell command
cd {PATH_TO_PROJECT_FOLDER}
# Run
flybirds run -P ./features/test/everything.feature
cp -R reports $WORKSPACE

十五、發版計劃

我們將按照 SemVer 版本控制規範進行發版。逐步新增功能和代碼優化,非常歡迎加入到我們的共建計劃中,在 Github 上提出寶貴建議,以及在使用時遇到的一切問題,我們也會對此每週進行一次小版本的迭代。你也可以在這裏給我們精神支持,點上一顆 Star。

1)Fork 倉庫

2)創建分支 (git checkout -b my-new-feature)

3)提交修改 (git commit -am 'Add some feature')

4)推送 (git push origin my-new-feature)

5)創建 PR

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/YEJ920vswzvVgLFCyt0K2Q