自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

攜程機(jī)票跨端跨框架 UI 自動化測試方案 Flybirds

移動開發(fā) 移動應(yīng)用
我們到底需要一個怎樣的多端測試方案呢?從 Flybirds 的視角來說,我們希望多端測試不會成為研發(fā)流程中的障礙,特別是多端生態(tài)整體呈現(xiàn)欣欣向榮之時,自動化測試方案應(yīng)和開發(fā)方案共同成長。

作者 | Liang,攜程資深測開專家,開源項(xiàng)目作者,專注于DevOps,自動化框架、工具平臺等。

一、背景

多端研發(fā)對于當(dāng)今時代的前端開發(fā)來說是個繞不過去的話題,為了解決這些問題,行業(yè)內(nèi)推出了很多開發(fā)方案,但是跨端 UI 自動化測試的解決方案并不多。

Flybirds從2022年初開源至今已有3月有余,通過與社區(qū)內(nèi)活躍用戶的交流和反饋,推出了v0.2 版本的跨端跨框架測試方案,一套腳本多端運(yùn)行,插件化的架構(gòu)設(shè)計(jì),也方便社區(qū)開發(fā)者自由加入擴(kuò)展,一起共建成長。

二、v0.2 新增特性

  • 支持多端腳本復(fù)用
  • 支持多瀏覽器渲染引擎:Chromium、WebKit 和 Firefox
  • 支持多瀏覽器并發(fā)模式下的兼容性測試

三、我們需要一個怎么樣的多端測試方案

近幾年,每隔一段時間就會有很多新的開發(fā)框架出現(xiàn),帶來了更好的開發(fā)體驗(yàn)和性能的同時,也給自動化測試創(chuàng)造了很多難題。

我們到底需要一個怎樣的多端測試方案呢?從 Flybirds 的視角來說,我們希望多端測試不會成為研發(fā)流程中的障礙,特別是多端生態(tài)整體呈現(xiàn)欣欣向榮之時,自動化測試方案應(yīng)和開發(fā)方案共同成長。

不論是 Web 、React Native 端,還是Native端,理想的方案應(yīng)該進(jìn)行多端適配,保留良好擴(kuò)展,兼顧更多框架,由社區(qū)共同建設(shè),促進(jìn)整體生態(tài)繁榮,因此就有了Flybirds 向社區(qū)提供的跨端跨框架測試方案。

四、插件化架構(gòu)

插件化架構(gòu)幫助我們將每一個端的能力拆分開, 插件提供運(yùn)行時所需的組件、API 和配置,F(xiàn)lybirds 將它們分別注入對應(yīng)的生命周期。

4.1 文件結(jié)構(gòu)

├─ cli                         腳手架
├─ core
| ├─ config_manage.py 配置管理
| ├─ dsl
| ├─ globalization 國際化處理
| └─ step Step 列表
| ├─ global_resource.py 全局配置
| ├─ launch_cycle 生命周期管理
| └─ plugin
| ├─ event 事件管理
| ├─ plugin_manager.py 插件管理
| └─ plugins
| ├─ android Andriod 相關(guān)處理
| ├─ ios iOS 相關(guān)處理
| └─ web Web 相關(guān)處理
├─ report 報告
├─ template 模板處理
└─ utils

4.2 DSL step 列表

當(dāng)然在這個架構(gòu)中, 各端略有不同,主要是各端的平臺差異性導(dǎo)致,以下是各端具體支持的 DSL step 列表, 大部分step能夠適用于多端。

五、多端應(yīng)用例子

5.1 測試用例

功能: 乘機(jī)人模塊

@p1 @android @web
場景:外露乘機(jī)人_選擇列表頁乘機(jī)人
當(dāng) 跳轉(zhuǎn)頁面到[單程填寫頁]
那么 頁面渲染完成出現(xiàn)元素[已選乘機(jī)人姓名]
那么 [選擇乘機(jī)人文案]的文案為[選擇乘機(jī)人]
那么 [已選乘機(jī)人姓名]的文案為[李易峰]
那么 [已選乘機(jī)人證件類型]的文案為[護(hù)照]
那么 [已選乘機(jī)人證件號]的文案為[YHE77]
那么 存在[乘客類型標(biāo)簽兒童]的元素
那么 返回上一頁

5.2 頁面對象管理

多端項(xiàng)目中的頁面對象管理,是通過json文件進(jìn)行統(tǒng)一管理,通常存在以下兩種情況:

1)各端相同時,參考以下配置

// 元素定位配置 ele_locator.json
{
"選擇乘機(jī)人文案": “testid=passger_check”,
"已選乘機(jī)人姓名": “testid=passger_name_checked”,
"已選乘機(jī)人證件類型": “testid=passger_ct_checked”,
"已選乘機(jī)人證件號": “testid=passger_cn_checked”
}

2)各端不同時,通過android、ios、web區(qū)分

// scheme配置 schema_url.json  
{
"單程填寫頁": {
"android": "urlschemel://auth_activity",
"ios": "urlschemel://ios_auth_activity",
"web": "https://address"
}
}

// 元素定位配置 ele_locator.json
{
"乘客類型標(biāo)簽兒童": {
"android": "textid=passger_type_child",
"ios": "lableid=passger_type_child",
"web": "xpath=//html/body/div"
}
}

六、數(shù)據(jù)驅(qū)動參數(shù)化

實(shí)際項(xiàng)目中,大部分的自動化測試都是基于數(shù)據(jù)驅(qū)動參數(shù)化,因此還需要搭配「 場景大綱+例子」一起使用,這里我們對上面的例子進(jìn)行改造:

功能: 乘機(jī)人模塊

@p1 @android @web
場景大綱: 外露乘機(jī)人_選擇列表頁乘機(jī)人
當(dāng) 跳轉(zhuǎn)頁面到[單程填寫頁]
那么 頁面渲染完成出現(xiàn)元素[已選乘機(jī)人姓名]
那么 <element>的文案為<title>
那么 存在[乘客類型標(biāo)簽兒童]的元素
那么 返回上一頁

例子:
| element | title |
| 選擇乘機(jī)人文案 | 選擇乘機(jī)人 |
| 已選乘機(jī)人姓名 | 李易峰 |
| 已選乘機(jī)人證件類型 | 護(hù)照 |
| 已選乘機(jī)人證件號 | YHE77 |

七、多瀏覽器并發(fā)

依托PlayWright的跨瀏覽器能力,F(xiàn)lybirds支持所有的現(xiàn)代渲染引擎,包括 Chromium、WebKit 和 Firefox。

Flybirds支持多瀏覽器并發(fā)模式,方便高效的進(jìn)行瀏覽器兼容性測試。

7.1 配置參數(shù)

// browserType: 配置瀏覽器內(nèi)核
"web_info": {
"headless": true,
"browserType": ["firefox","chromium","webkit"],
"defaultTimeout": 30
},

7.2 執(zhí)行命令

# 可通過參數(shù)指定瀏覽器內(nèi)核
flybirds run -D browserType=webkit,firefox,chromium

八、運(yùn)行前檢查

接下來,開始運(yùn)行前,請先對運(yùn)行環(huán)境進(jìn)行檢查

8.1 Android、iOS

1)請確保配置的測試設(shè)備能夠正常連接

  • Android: 執(zhí)行命令 adb devices , 檢查設(shè)備列表中是否包含測試設(shè)備
  • iOS:以tidevice庫舉例,執(zhí)行命令 tidevice list,檢查設(shè)備列表中是否包含測試設(shè)備

2)下載安裝測試包

Android:框架會通過config中配置的packagePath自動下載測試包并安裝(請確保手機(jī)已經(jīng)打開”允許安裝未知來源“ ),也可手動下載安裝。

iOS:

  • 請手動下載演示APP進(jìn)行安裝
  • 開啟wdaproxy shell tidevice --udid $udid wdaproxy -B $web_driver_angnt_bundle_id -p $port

8.2 Web

Web項(xiàng)目執(zhí)行前,先檢查瀏覽器環(huán)境是否已安裝

# 查看支持安裝的瀏覽器
playwright install --help

# 不帶參數(shù)的運(yùn)行,將安裝默認(rèn)所有的瀏覽器
playwright install

# 通過提供一個參數(shù)來安裝特定的瀏覽器
playwright install webkit

九、運(yùn)行

你可以很方便的通過 cli 切換執(zhí)行環(huán)境, 篩選case和控制并發(fā)數(shù)量,下面列出了一些常用命令。

# 查看運(yùn)行項(xiàng)目時支持的操作
flybirds run --help

# 執(zhí)行features目錄下所有的feature文件
cd {PATH_TO_PROJECT_FOLDER}
flybirds run

# 指定需要執(zhí)行的feature集合,可以是目錄,也可以指定到具體feature文件
flybirds run -P ./features/test/demo.feature

# 運(yùn)行有特定tag的場景,多個用逗號隔開,‘-’開頭表示不運(yùn)行包含此tag的場景
flybirds run -T tag1,tag2,-tag3,tag4

# 切換到Web環(huán)境執(zhí)行用例
flybirds run -D platform=web

# 切換到Android環(huán)境執(zhí)行用例
flybirds run -D platform=Android

# 切換到iOS環(huán)境執(zhí)行用例
flybirds run -D platform=iOS

# 執(zhí)行tag為android的用例
flybirds run -T android -D platform=Android

# 指定并發(fā)執(zhí)行時開啟進(jìn)程的最大數(shù)量。默認(rèn)是4,只在web環(huán)境生效
flybirds run --path features -p 5

十、配置

以下是各端運(yùn)行前必須的配置項(xiàng)

  • Android配置項(xiàng):deviceId、packageName
  • IOS配置項(xiàng):platform、deviceId、packageName、webDriverAgent、
  • Web配置項(xiàng):platform、browserType、headless

十一、自定義框架擴(kuò)展

Flybirds的插件式設(shè)計(jì)模式,保留了良好的擴(kuò)展,未來我們會開放更多。

11.1 修改擴(kuò)展

如果你希望在項(xiàng)目中修改當(dāng)前擴(kuò)展,你可以用本地文件替換plugin下面的(app,device,element,app,step,screen,screen_record),并在 "plugin_info.json" 中做相應(yīng)配置。

比如你希望修改web中screen.py文件:

  • 在本地創(chuàng)建一個py文件命名為 screen.py
  • 在plugin_info.json 的web中添加如下配置:
 "screen": {
"path": "{local_path}/screen.py",
"ns": "screen.plugin.myextend"
}

{local_path} 為本地路徑,"ns"為包名,注意包名的唯一性(以上包名只是例子不做強(qiáng)制限制)

十二、內(nèi)部增強(qiáng)包

對于團(tuán)隊(duì)內(nèi)部通用的自定義功能,可以考慮創(chuàng)建一個extend package,F(xiàn)lybirds支持動態(tài)加載,package命名包含“-flybirds-plugin”即可。攜程機(jī)票內(nèi)部,針對DevOps的各類工具,增強(qiáng)包中都進(jìn)行了對接,安裝后就可以使用。

十三、持續(xù)集成

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

以Jenkins為例:

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

十四、發(fā)版計(jì)劃

我們將按照 SemVer 版本控制規(guī)范進(jìn)行發(fā)版。逐步新增功能和代碼優(yōu)化,非常歡迎您加入到我們的共建計(jì)劃中,在 GitHub 上提出您的寶貴建議,以及在使用時遇到的一切問題,我們也會對此每周進(jìn)行一次小版本的迭代。您也可以在這里給我們精神支持,點(diǎn)上一顆 Star。

責(zé)任編輯:未麗燕 來源: 攜程技術(shù)
相關(guān)推薦

2023-01-04 12:17:07

開源攜程

2022-06-17 09:42:20

開源MMKV攜程機(jī)票

2022-08-12 08:38:08

攜程小程序Taro跨端解決方案

2020-08-03 15:40:57

Web自動化工具測試

2023-06-06 16:01:00

Web優(yōu)化

2022-05-13 09:27:55

Widget機(jī)票業(yè)務(wù)App

2017-04-11 15:11:52

ABtestABT變量法

2011-10-11 09:56:59

PhoneGapSelenium

2024-04-18 09:41:53

2022-06-03 09:21:47

Svelte前端攜程

2018-03-21 08:47:18

網(wǎng)易Google開源

2009-12-23 16:33:34

WPF UI自動化測試

2020-12-04 14:32:33

AndroidJetpackKotlin

2021-06-26 07:40:21

前端自動化測試Jest

2009-08-19 09:00:48

單元測試框架自動化測試

2022-08-06 08:27:41

Trace系統(tǒng)機(jī)票前臺微服務(wù)架構(gòu)

2023-05-12 10:14:38

APP開發(fā)

2021-09-17 12:54:05

AI 數(shù)據(jù)人工智能

2017-12-24 21:00:10

自動化測試測試框架敏捷

2023-11-13 11:27:58

攜程可視化
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號