国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

移動端自動化測試實(shí)戰(zhàn)

這篇具有很好參考價(jià)值的文章主要介紹了移動端自動化測試實(shí)戰(zhàn)。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

UI自動化測試的價(jià)值


1、提升回歸測試的效率
2、可以進(jìn)行兼容性測試

UI 自動化測試應(yīng)用場景

? 冒煙測試自動化:提測之前自動斷言提測質(zhì)量,提供準(zhǔn)入?yún)⒖肌?/p>

? 功能測試自動化:輔助 QA 與測試工程師的快速驗(yàn)證。

? 驗(yàn)收測試自動化:兼容性測試等。

? 移動端性能專項(xiàng)測試自動化:性能、卡頓、健壯性測試、競品分析。

測試框架

? 阿里 Macaca

? 騰訊開源微信小程序自動化測試工具

? 百度內(nèi)部的 Cafe 框架

自動化測試常見誤區(qū)

強(qiáng)調(diào)自動化測試不代表手工測試無用

? 手工測試非常有用,僅有手工測試是不夠的。

? 手工測試 + 自動化測試才是企業(yè)快速迭代的根基

UI 自動化測試的“瓶頸”

? 技術(shù)成本高:

? 人力成本高:優(yōu)秀測試開發(fā)工程師難招

? 技術(shù)門檻高:80%的自動化測試工程師在自動化能力上都不及格

? 維護(hù)成本高

? 復(fù)用率不高:UI 和業(yè)務(wù)流程變更是最主要變更

? 穩(wěn)定性不足:容易被干擾,執(zhí)行慢

? 常見行業(yè)錯(cuò)誤觀點(diǎn)

? 錯(cuò)誤觀點(diǎn)一:UI 自動化測試無用論

? 錯(cuò)誤觀點(diǎn)二:UI 自動化測試只能模擬人工

合理地使用 UI 自動化

? 使用分層測試策略,控制 UI 自動化測試規(guī)模:

? 少數(shù)核心用例交給自動化測試

? 大部分的基礎(chǔ)回歸測試交給自動遍歷

? 新功能測試交給人工測試

? 技術(shù)改進(jìn)方案:

? 良好的維護(hù)模型:PageObject、數(shù)據(jù)驅(qū)動

? 更好的框架支持:增加 Watch,智能等待,失敗重試等機(jī)制

自動化測試就是機(jī)器點(diǎn)點(diǎn)點(diǎn)?

? 傳統(tǒng)自動化測試

? 自動探索測試 自動化對新功能進(jìn)行測試?

? codeless 方向的自動化測試? 不需要寫代碼就可以完成自動化測試

? 自動化測試用例智能生成?

如何高效實(shí)用的落地自動化

? 學(xué)習(xí)方向

? 了解待測產(chǎn)品和平臺:Android、iOS、App

? 精通最好的測試框架:Appium、UI Automator、WebDriverAgent

? 掌握自動化測試落地經(jīng)驗(yàn):PageObject、穩(wěn)定性提升、數(shù)據(jù)驅(qū)動……

? 達(dá)到的結(jié)果

? 一天搞定一款 app 的自動化測試腳手架

? 一天完成單個(gè)功能的業(yè)務(wù)測試自動化用例集合

? N 周內(nèi)搞定公司的 app 自動化測試

移動自動化測試的技術(shù)體系

UI 自動化分類

? Web 自動化:Selenium

? App 自動化:Appium

? GUI 自動化:Windows、Mac

? 微信小程序自動化:App + Web 測試技術(shù)的外延形態(tài)

? 更多平臺:智能設(shè)備、機(jī)器人、工業(yè) app

UI 自動化測試方面的成就

? Google:Espresso、UI Automator

? Facebook:WebDriverAgent

? 焰焮ibaba:Macaca

? Ebay:Selendroid

? Walmart:Robotium

? Sauce Labs:Appium

? ThoughtWorks:Selenium

Appium

Appium 的設(shè)計(jì)理念

移動端自動化測試實(shí)戰(zhàn),# APP移動端自動化-appium,自動化

Appium client:對應(yīng)語言的client包和腳本,如python的Appium-Python-Client并編寫腳本

Appium server:啟動服務(wù)開放端口,接收appium client客戶端的http請求

driver:appium需要driver來驅(qū)動移動端,Appium team目前維護(hù)了很多driver,需要根據(jù)平臺來選擇driver。Android平臺一般使用Uiautomator2 driver。。IOS使用XCUITest driver

?移動端自動化測試實(shí)戰(zhàn),# APP移動端自動化-appium,自動化

自動化測試框架選擇

? 推薦 Appium

? 跨語言:Java、Python、Node.js 等

? 跨平臺:Andoid、iOS、Windows、Mac

? 底層多引擎可切換

? 生態(tài)豐富,社區(qū)強(qiáng)大

? iOS:KIF、WDA、XCTest

? Android:Robotium、UI Automator

? 特色框架:calabash、Macaca、ATX

Appium 引擎列表

? Android

? Selendroid、Espresso [推薦]

? UI Automator、UI Automator2 [推薦]

? iOS

? UI Automation [已廢棄]

? XCUITest [推薦]

? 更多平臺:Mac、Windows、游戲引擎等

Appium 多端架構(gòu)與自動化

UI 分層測試體系

移動 App 分層測試

移動端自動化測試實(shí)戰(zhàn),# APP移動端自動化-appium,自動化

?移動 App 快速迭代模型

移動端自動化測試實(shí)戰(zhàn),# APP移動端自動化-appium,自動化

自動遍歷測試與其價(jià)值

? 定義:以自動化的方式對 app 進(jìn)行充分的功能遍歷以探索 bug

? 價(jià)值

? 降低自動化維護(hù)成本,可替代 80% 的自動化測試

? 實(shí)現(xiàn)新功能的探索

? 實(shí)現(xiàn)老功能的回歸

? 用途:多設(shè)備兼容測試、自動化專項(xiàng)測試

常見遍歷工具與技術(shù)

? Android 原生 Monkey

? 百度 SmartMonkey

? 騰訊 New Monkey

? 阿里 Macaca 的 NoSmoke

? TesterHome 社區(qū) vigossjjj smart_monkey

? TesterHome 社區(qū) zhangzhao Maxim

? TesterHome 社區(qū) seveniruby AppCrawler

? Google 出品的 App Crawler

合理的使用 UI 自動化

? 單元測試:使用 App 分層測試策略,增加單測規(guī)模,控制 UI 自動化測試規(guī)模。

? 移動 App 自動化測試:核心集成與驗(yàn)收測試用例交給自動化測試。

? 自動遍歷測試:大部分的基礎(chǔ)回歸測試交給自動遍歷。

? 人工測試:測試團(tuán)隊(duì)主負(fù)責(zé),整個(gè)產(chǎn)品團(tuán)隊(duì)參與。

Android?app 的常見概念

Android 自動化前提依賴

? Android SDK:Android Studio 可輔助安裝

? 模擬器

? Android Studio 自帶 Emulator [推薦]

? Genymotion、網(wǎng)易 MuMu、BlueStacks

? 真機(jī)

獲取 App 的信息

? App 信息

? 獲取當(dāng)前界面元素:adb shell dumpsys activity top

移動端自動化測試實(shí)戰(zhàn),# APP移動端自動化-appium,自動化

? 獲取任務(wù)列表:adb shell dumpsys activity activities

移動端自動化測試實(shí)戰(zhàn),# APP移動端自動化-appium,自動化

? App 入口

? adb logcat |grep -i displayed

adb logcat | findstr Displayed? (windows cmd用這個(gè))

移動端自動化測試實(shí)戰(zhàn),# APP移動端自動化-appium,自動化

? aapt dump badging mobike.apk | grep launchable-activity

? apkanalyzer 最新版本的 SDK 中才有

? 啟動應(yīng)用

?Android 調(diào)試橋 adb 命令詳解

環(huán)境準(zhǔn)備

? 真機(jī) or 模擬器

? 下載 Android SDK

? 設(shè)置 PATH 變量加入 SDK 的工具目錄

Android 常用命令

? adb:Android Debug Bridge

? adb devices:查看設(shè)備

? adb kill-server:關(guān)閉 adb 的后臺進(jìn)程

? adb tcpip:讓 Android 脫離 USB 線的 TCP 連接方式

? adb connect:連接開啟了 TCP 連接方式的手機(jī)

? adb logcat:Android 日志查看

? adb bugreport:收集日志數(shù)據(jù),用于后續(xù)的分析,比如耗電量

adb shell

? adb shell 本身就是一個(gè) Linux 的 shell,可以調(diào)用 Android 內(nèi)置命令

? adb shell

? adb shell dumpsys

? adb shell pm

adb shell pm clear com.android.contacts

?移動端自動化測試實(shí)戰(zhàn),# APP移動端自動化-appium,自動化

?清除包的緩存數(shù)據(jù)和權(quán)限,獲得一個(gè)比較新的環(huán)境。

? adb shell am

?? adb shell am start -W -n ?com.android.contacts/.activities.PeopleActivity -S

移動端自動化測試實(shí)戰(zhàn),# APP移動端自動化-appium,自動化

? adb shell ps

? adb shell monkey

常用命令列表

? adb

? pm 包管理工具

? am? 啟動一個(gè)APP

? dumpsys 獲取整個(gè)系統(tǒng)的性能數(shù)據(jù)

? uiautomator? 獲取APP的界面結(jié)構(gòu),執(zhí)行自動化測試?

? input 完成簡單的自動化指令

Android 性能統(tǒng)計(jì) dumpsys

? 獲取所有的 dumpsys 子命令 dumpsys | grep -i DUMP

? 獲取當(dāng)前 activity adb shell dumpsys activity top

? 獲取 activities 的記錄,可以獲取到 appium 依賴的原始 activity dumpsys activity activities

? 獲取特定包基本信息 adb shell dumpsys package com.xueqiu.android

? 獲取系統(tǒng)通知 adb shell dumpsys noti?cation

? 獲得內(nèi)存信息 adb shell dumpsys meminfo com.android.settings

? 獲取 cpu 信息 adb shell dumpsys cpuinfo

? 獲取 gpu 繪制分析 adb shell dumpsys gfxinfo com.android.settings

? 獲取短信 adb shell dumpsys activity broadcasts | grep senderName=

uiautomator

? adb shell uiautomator runtest ...

運(yùn)行自動化測試用例

? adb shell uiautomator dump

adb shell uiautomator dump

移動端自動化測試實(shí)戰(zhàn),# APP移動端自動化-appium,自動化

?把Android APP控件生成xml文件

UiAutomator是測試Android原生態(tài)APP的功能測試工具。Android 4.1發(fā)布時(shí)包含了這種新的測試工具—UiAutomator。UiAutomator用來做UI功能測試的。

uiautomator2是uiautomator的升級版,uiautomator是Google開發(fā)的一款用來做安卓自動化測試的Java庫。適用于Android4.4+

簡單的自動化工具 input 命令

? text (Default: touchscreen)

? keyevent [--longpress] ... (Default: keyboard)

? tap (Default: touchscreen)

adb shell input tap 529 1176

點(diǎn)擊屏幕上該坐標(biāo)??

? swipe [duration(ms)] (Default: touchscreen)

? draganddrop [duration(ms)] (Default: touchscreen)

? press (Default: trackball)

? roll (Default: trackbal

Appium 架構(gòu)介紹

文檔:The Context API - Appium Documentation

Appium 生態(tài)工具

? adb:Android 的控制工具,用于獲取 Android 的各種數(shù)據(jù)和控制

? Appium Desktop:內(nèi)嵌了 Appium Server 和 Inspector 的綜合工具

? Appium Server:Appium 的核心工具,命令行工具

? Appium Clients:各種語言的客戶端封裝庫,用于連接 appium server

? Java、Python、Ruby、robotframework-appium

? AppCrawler 自動遍歷工具

Desktop 主要功能

? UI 分析

? 錄制用例

? 元素查找測試

? Attach 已有的 session

? 云測試

python 客戶端安裝

? 客戶端安裝:pip install Appium-Python-Client

? IDE:PyCharm

? Python 多版本隔離工具:venv

? 國內(nèi)依賴源:http://pypi.douban.com/simple/

? 測試框架:unittest、pytest、nose,推薦 pytest

APP自動化

控件定位方法

常用定位手段

? id

? Accessibility ID

? XPath

元素定位

? 測試步驟三要素:

? 定位、交互、斷言

? 定位

? ID (重要)

? XPath(重要)

? Accessibility ID: content-desc(重要)

? 不推薦:Class -iOS -Android

常用自動化 API

常見自動化動作支持

? click

? sendKeys

? swipe

? touch action

手勢操作 TouchAction

? press release longPress

? tap wait

? moveTo

? perform

移動端自動化測試實(shí)戰(zhàn),# APP移動端自動化-appium,自動化

capabilities 設(shè)置

Capabilities - Appium Documentation

Capabilities是appium啟動server會話時(shí)設(shè)置的參數(shù),告訴server需要啟動的APP入口,android版本等信息。

? App APK 地址 appPackage 包名 appActivity Activity 名字

? automationName 默認(rèn)使? uiautomator2

? noReset fullReset 是否在測試前后重置相關(guān)環(huán)境

? autoGrantPermissions ?動賦予 App 權(quán)限

? unicodeKeyBoard resetKeyBoard 是否需要輸??英?之外的語?并在測試完成后重置輸?法

移動端自動化測試實(shí)戰(zhàn),# APP移動端自動化-appium,自動化

?Appium 設(shè)備交互 API

可見Appium Python Client 文檔Welcome to Appium python client’s documentation! — Python client 1.0 1.0 documentation

常用的設(shè)備交付命令

? 模擬電話、短信

用下面的命令模擬 GSM 電話和短信,注意:只能在模擬器上使用!

self.driver.make_gsm_call("5551234567", GsmCallActions.CALL);
?
self.driver.send_sms('555-123-4567', 'Hey lol')
?

Original error: gsmCall method is only available for emulators?這里在夜神模擬器上執(zhí)行是失敗的。

? 橫豎屏切換

? App 處理

# 實(shí)現(xiàn) APP 的安裝
self.driver.install_app('/Users/johndoe/path/to/app.apk')?
?
# 檢測 APP 是否被安裝
self.driver.is_app_installed('com.example.AppName');
?
# 啟動 APP
self.driver.launch_app()
?

? 鍵盤、粘貼板

設(shè)置系統(tǒng)剪貼板的內(nèi)容:

self.driver.set_clipboard('happy testing')
self.driver.set_clipboard_text('happy testing')
?
獲取到剪貼板的內(nèi)容:

self.driver.get_clipboard()
self.driver.get_clipboard_text()

? 錄屏

顯式等待

? 功能差別

? 顯式等待的條件非常靈活

? 隱式等待只用于元素定位

? 執(zhí)行差別

? 顯式等待本地輪詢條件

? 隱式等待通過 appium server 輪詢條件

移動端自動化測試實(shí)戰(zhàn),# APP移動端自動化-appium,自動化

def assert_exist_element(self,loc):
    try:
        WebDriverWait(self.driver, 10).until(EC.visibility_of_element_located(loc))
        return True
    except:
        print("元素{}不存在".format(loc))
        return False

XPath 介紹

? 絕對定位:根據(jù)嚴(yán)格的父子關(guān)系定位

? 相對定位:根據(jù)條件匹配定位

? 慢的原因:XPath 定位比其他定位慢,因?yàn)樾枰f歸解析每個(gè)元素的屬性

? 慢的不明顯的原因:有 Cache 機(jī)制

常用 XPath 相對定位表達(dá)式

? 查找:

? //*[@text='登錄’]

? //*[contains(@resource-id, 'login’)]

? 條件匹配:

? //*[contains(@resource-id, ‘login’) and contains(@text, ‘登錄’)]]

? //*[contains(@text, ‘登錄’) or contains(@label, '登錄’)]]

? 尋找所有元素://*

Toast 識別方法

? automationName:uiautomator2

? getPageSource 是無法找到的

? 必須使用 xpath 查找

? 推薦 //*[@class= ‘a(chǎn)ndroid.widget.Toast']

? 或者 //*[contains(@text, "xxxxx")]

斷言體系

元素是否存在:?nd_elements

assert len(self.driver.find_elements(by=AppiumBy.XPATH, value='//*[@text="Battery"]'))>=1 #斷言存在該元素
assert "哈哈" in self.driver.find_element(by=AppiumBy.XPATH, value='//*[@text="Battery"]').text

? 元素屬性正確性:get_attribute

xUint常用斷言

傳統(tǒng)的xUnit風(fēng)格的assertXXX()系列

Hamcrest斷言,基于更靈活的Matchers斷言方式 --推薦?https://github.com/hamcrest/PyHamcrest

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

參數(shù)化

? 參數(shù)化:根據(jù)傳入的數(shù)據(jù),對測試用例進(jìn)行迭代調(diào)用 如pytest的pytest.mark.parametrize

? 數(shù)據(jù)驅(qū)動:基于數(shù)據(jù)完成流程調(diào)度,通常數(shù)據(jù)來源自外部數(shù)據(jù)文件

? 參數(shù)化是數(shù)據(jù)驅(qū)動的基礎(chǔ)和特例

移動端自動化測試實(shí)戰(zhàn),# APP移動端自動化-appium,自動化

數(shù)據(jù)驅(qū)動

? 參數(shù)化數(shù)據(jù)讀取自外部文件:使用 YAML、JSON 讀取

? 測試步驟讀取自外部文件:定制執(zhí)行引擎

移動端自動化測試實(shí)戰(zhàn),# APP移動端自動化-appium,自動化

? 斷言步驟讀取自外部文件:定制執(zhí)行引擎

? 整個(gè)用例讀取自外部文件:動態(tài)創(chuàng)建用例

APP分類

Native 原生 App 的自動化測試

多種架構(gòu)支持

移動端自動化測試實(shí)戰(zhàn),# APP移動端自動化-appium,自動化

Native 原生應(yīng)用的分類

? Android 標(biāo)準(zhǔn)組件

Activity組件、service組件、content provider組件、broadcase receiver組件

? 非標(biāo)準(zhǔn)組件:

-Flutter:閑魚

-React Native:Facebook

- Weex:極客時(shí)間

也可以使用appium進(jìn)行測試?

? 游戲

非標(biāo)準(zhǔn)組件APP的特征

如極客時(shí)間APP,非標(biāo)準(zhǔn)控件會被解析

? 不是WebView 組件

? 原生控件可識別,非原生的被解析

? HTML 控件被編譯為 Native 控件如view

? HTML 的文本屬性被解析為 Native 屬性

? text 還是 content-desc 取決于 API 版本

常見 Native 自動化測試方式

? Android 原生組件:Appium 默認(rèn)支持

? Native非標(biāo)準(zhǔn)組件:Appium默認(rèn)支持

? 自定義 View 識別:

1)使用相對定位,父控件加百分比偏移

2)OCR、圖像識別、AI

? 游戲控件識別:使用游戲引擎特定技術(shù)

游戲自動化測試支持

? Appium 提供了簡單的游戲自動化測試支持

?1)圖像識別

?2)AI 識別

?游戲測試的推薦做法

1)提高可測性:編碼輸出游戲引擎下的控件布局信息,與 Appium 對接

2) 使用成熟的 airtest 框架

Hybrid 混合 App 的自動化測試

WebView 控件在 Appium 中的抽象

? Native 層面支持

1) uiautomator 解析 WebView 中的內(nèi)容并映射為原生控件

?2)getPageSource 為 DOM 結(jié)構(gòu)可發(fā)現(xiàn) WebView 組件和控件

? 切換為 WebView 上下文

1)切換后才是正規(guī)的 Web

2)getPageSource 為 HTML

3)可以使用 CSS 定位等

Hybrid 測試流程

? 首先進(jìn)去帶有 WebView 的頁面

? 使用 Contexts API 尋找 WebView

? 使用 Context 切換到 WebView

? 使用 CSS 等 Web 定位方式

? 使用 Context 重回 Native

真機(jī)進(jìn)行 WebView 測試的前提

? 模擬器默認(rèn)支持解析webview控件

? 物理機(jī)需要打開 app 內(nèi)開關(guān)(需要開發(fā)人員修改配置)

? 檢測是否打開:反編譯檢查對應(yīng)的 API 調(diào)用

移動端自動化測試實(shí)戰(zhàn),# APP移動端自動化-appium,自動化

?WebView 測試 - Python

移動端自動化測試實(shí)戰(zhàn),# APP移動端自動化-appium,自動化

找對 ChromeDriver 的版本

? Android 默認(rèn)瀏覽器:

? 老版本 Android 用 Browser,新版本 Android 用 Chrome

? adb shell dumpsys package com.android.webview | grep versionName

? adb shell dumpsys package com.android.chrome | grep versionName

? App 自帶 WebView 組件:每個(gè) App 自帶的 WebView 的版本也都不相同

Android WebView進(jìn)程信息

? getContextHandles

? 查看所有的 WebView 進(jìn)程

? adb shell cat /proc/net/unix | grep webview

? Context 切換

? 把 domain socket 映射為本地的 socket 端口

? adb forward tcp:$port localabstract:webview_devtools_remote_$pid

? 獲取對應(yīng)的 WebView 組件版本 http://localhost:$port/json/version

? ChromeDriver 協(xié)議交互

設(shè)置 ChromeDriver

? ChromeDriver 安裝

? 提前下載所有的 ChromeDriver 版本備用

? 運(yùn)行時(shí)指定

? 隱式選擇:1.8版本以后支持自動選擇 ChromeDriver

? 顯式指定:chromedriverExecutableDir 設(shè)置

? 調(diào)試開關(guān):

? showChromedriverLog

純 H5 站自動化測試

瀏覽器自動化技術(shù)原理

移動端自動化測試實(shí)戰(zhàn),# APP移動端自動化-appium,自動化

瀏覽器調(diào)試工具 DevTools

移動端自動化測試實(shí)戰(zhàn),# APP移動端自動化-appium,自動化

?對網(wǎng)站進(jìn)行分析

移動端自動化測試實(shí)戰(zhàn),# APP移動端自動化-appium,自動化

?移動瀏覽器測試 - Python

?移動端自動化測試實(shí)戰(zhàn),# APP移動端自動化-appium,自動化

?小程序自動化測試

小程序自動化的三個(gè)方法

? 利用 Uiautomator 的原生定位

? 利用微信提供的小程序自動化 SDK

? 基于WebView的測試方法

基于原生定位的方法

? Appium 使用 Uiautomator2 定位可以識別內(nèi)部 WebView 組件

? 缺點(diǎn):元素定位符不夠精確,content-desc、resource-id 多數(shù)都沒有

? NoReset 默認(rèn)為 false,會默認(rèn)清空微信聊天記錄,所以請使用測試機(jī)測試帳號

基于微信提供的小程序自動化 SDK

? 使用 Node.js 體系

? 微信小程序自動化 SDK + 標(biāo)準(zhǔn)的測試框架

? 支持真機(jī)與 Web 模擬器

移動端自動化測試實(shí)戰(zhàn),# APP移動端自動化-appium,自動化

微信小程序自動化 SDK 的缺點(diǎn)

? 從官網(wǎng)提供的代碼示例來看,微信的這套體系主要用于研發(fā)自測

? 微信的研發(fā)對自動化測試?yán)斫獠坏轿?,大量?wait,實(shí)用性不高

? 需要在已有的 WebSocket 體系上做二次封裝對接 Appium

? 希望微信可以重視這塊的測試支持改進(jìn)

基于 WebView 的測試方法

? 微信6.x版本支持基于 WebView 自動化測試

? 7.x改版后默認(rèn)已經(jīng)無法使用基于 WebView 的自動化

? 7.x + root強(qiáng)行開啟 WebView debug + Appium hack

? 曾經(jīng)這個(gè)方案是最好用的,Appium 默認(rèn)支持

? 但是當(dāng)前微信版本里這個(gè)方法已經(jīng)被破壞,繞過條件比較苛刻,暫時(shí)不可用了

iOS 測試工具體系

主流移動測試框架

? Appium

? Calabash iOS

? KIF

? XCTest

? WebDriverAgent

? UIAutomation(在 Xcode8 后廢棄)

基礎(chǔ)工具

? Xcode??Xcode?是蘋果公司向開發(fā)人員提供的集成開發(fā)環(huán)境(非開源),用于開發(fā) Mac OS X 的應(yīng)用程序。

Xcode

? 演練 example:https://github.com/appium/ios-uicatalog

? Xcode 編譯

? 觀察 build 過程提取編譯文件

? 導(dǎo)出文件和 dSYM 文件

? xcodebuild??xcodebuild是一個(gè)命令行工具,允許你從命令行對Xcode項(xiàng)目和工作區(qū)執(zhí)行編譯、查詢、分析、測試和歸檔操作。它對項(xiàng)目中包含的一個(gè)或多個(gè)目標(biāo)或項(xiàng)目或工作區(qū)中包含的方案進(jìn)行操作

? instruments工具包-專項(xiàng)工具包

? libimobiledevice??libimobiledevice又稱libiphone,是一個(gè)開源包,可以讓Linux支持連接iPhone/iPod Touch等iOS設(shè)備

常用測試輔助工具

? 依賴工具包安裝:

? brew install --HEAD ideviceinstaller

? brew install --HEAD libimobiledevice

? brew install ios-deploy

? 查看模擬器列表:instruments -s devices

查看真機(jī)列表:idevice_id -l

? 安裝 app: ideviceinstaller -i demo.app 高版本使用:ios-deploy

? 命令行編譯:

? xcodebuild -scheme UICatalog -target iOS clean build

? xcodebuild -scheme UICatalog -target iOS archive

WDA 與 Appium 的關(guān)系

? WDA 本身也是一個(gè)完整的基于 WebDriver 協(xié)議的框架

? Appium 使用 WDA 作為底層的 iOS 自動化框架

iOS 模擬器自動化測試

常用控件定位方式

? name:ID 定位

? label:AccessibilityID 定位

? value:XPath 定位

移動端自動化測試實(shí)戰(zhàn),# APP移動端自動化-appium,自動化

用例演練

? 打開 UiCatalog

? 點(diǎn)擊 Buttons

? 斷言是否存在“More Info”按鈕

Page Object 模式

做法

? 以頁面為單位獨(dú)立建模

? 隱藏實(shí)現(xiàn)細(xì)節(jié)

? 本質(zhì)是面向接口編程

? 優(yōu)點(diǎn)

? 減少重復(fù) ?nd click 樣板代碼

? 易讀性提高

? 頁面修改不影響測試用例

Page?Object 六大設(shè)計(jì)原則

移動端自動化測試實(shí)戰(zhàn),# APP移動端自動化-appium,自動化

方法意義

? 用公共方法代表 UI 所提供的功能

? 方法應(yīng)該返回其他的 Page Object 或者返回用于斷言的數(shù)據(jù)

? 同樣的行為不同的結(jié)果可以建模為不同的方法

? 不要在方法內(nèi)加斷言

?字段意義

? 不要暴露頁面內(nèi)部的元素給外部

? 不需要建模 UI 內(nèi)的所有元素

登錄場景

? 登陸頁面提供 login ?ndPassword 功能

? Login 類 + login ?ndPassword 方法

? 登錄頁面內(nèi)的元素有多少并不關(guān)心,隱藏內(nèi)部界面控件

? 登錄成功和失敗會分別返回不同的頁面

? ?ndPassword

? loginSuccess

? loginFail

? 通過方法返回值判斷登錄是否符合預(yù)期

編寫用例順序

? 編寫用例

移動端自動化測試實(shí)戰(zhàn),# APP移動端自動化-appium,自動化

? 實(shí)現(xiàn) page頁面和?方法

移動端自動化測試實(shí)戰(zhàn),# APP移動端自動化-appium,自動化

? 調(diào)試使測試用例運(yùn)行通過

整體類似TDD風(fēng)格

BasePage 封裝

? 實(shí)現(xiàn)通用的 Page 方法,對常用自動化行為做封裝,其他頁面都需要繼承basepage

? 管理各種 Driver

? 減少每個(gè) Page 對 Appium、Selenium 等庫的太多依賴

自動化行為封裝

? 異常彈框處理:廣告、好評、升級、tips 等彈框

? 通用自動化能力封裝

Java Python的封裝方式

? Java:

? Page Factory + @FindBy

? Python:

? PyDOM、獨(dú)立封裝 如poium

基于 POM 的用例組織結(jié)構(gòu)

? page目錄:完成對頁面的封裝

移動端自動化測試實(shí)戰(zhàn),# APP移動端自動化-appium,自動化

driver聲明為WebDriver類型,可以在該類中調(diào)用driver的方法。?

class MainPage(BasePage):
    _search_locator = (By.ID, "com.xueqiu.android:id/home_search")

    def to_search(self):
        #todo: too slow
        self.find_element_and_click(self._search_locator)
        return SearchPage(self.driver)

MainPage中點(diǎn)擊一個(gè)按鈕進(jìn)入另一個(gè)Page,所以返回searchPage?

? driver:完成對 Web、Android、iOS、接口的驅(qū)動

? testcase目錄:存放test_XX.py文件? 調(diào)用各類 page 完成業(yè)務(wù)流程并進(jìn)行斷言

? data:配置文件和數(shù)據(jù)驅(qū)動

? utils:其他便捷的功能封裝,可選

源碼:2504973175/Geek_AppAutomationTestingCode (gitee.com)

移動端自動化測試實(shí)戰(zhàn),# APP移動端自動化-appium,自動化?

?

測試用例管理

? 用例組織結(jié)構(gòu):

? 使用 package 管理業(yè)務(wù)模塊

? 使用 class 管理業(yè)務(wù)對象、使用method完成業(yè)務(wù)具體行為

? 數(shù)據(jù)驅(qū)動:測試數(shù)據(jù)、測試步驟、測試斷言

? 測試用例:

? 使用 testcase 完成測試步驟的定義

? 使用 assertion 完成業(yè)務(wù)正確性校驗(yàn)

? 持續(xù)集成:使用 Jenkins 完成持續(xù)集成

Appium 錯(cuò)誤排查與日志分析

appium -g <log file path>

? shell 命令

? WebDriver 請求

? ChromeDriver 日志

調(diào)試分析方法

? Appium Log

清晰記錄了所有的請求和結(jié)果以及底層的一些錯(cuò)誤堆棧

移動端自動化測試實(shí)戰(zhàn),# APP移動端自動化-appium,自動化

? 分析界面數(shù)據(jù)

使用 getPageSource 獲取界面的完整 DOM 結(jié)構(gòu)

?利用 XPath 獲取所有匹配的元素

? 腳本外調(diào)試

借助于 curl 命令從腳本外探測界面數(shù)據(jù)

adb 知識與排錯(cuò)

移動端自動化測試實(shí)戰(zhàn),# APP移動端自動化-appium,自動化

?

adb 排錯(cuò)

? adb client:普通的 adb 命令,使用 shell 腳本代替

? adb server:

? pc 上的一直開啟的 server 進(jìn)程

? adb 命令通過 adb 協(xié)議與 adb server 通訊

? 通過代理轉(zhuǎn)發(fā)結(jié)合 capability

Appium 原理與 JSONWP 協(xié)議分析

WebDriver 協(xié)議與手工模擬

? WebDriver 協(xié)議基礎(chǔ)知識要懂

? session_id 獲取

? session_id= ` curl http://127.0.0.1:4723/wd/hub/sessions | awk -F\" '{print $8}' `

? element id 獲取

? curl -X POST http://127.0.0.1:4723/wd/hub/session/$session_id/elements --data-binary '{"using":"xpath" , "value":"http://*[@class=\"android.widget.Toast\"]"}' -H "Content-Type: application/ json;charset=UTF-8"

? 元素屬性獲取

? curl http://127.0.0.1:4723/wd/hub/session/$session_id/element/$element_id/attribute/text

? 元素動作

? curl -X POST http://127.0.0.1:4723/wd/hub/session/$session_id/element/$element_id/click

?Appium 源碼分析

所有源代碼

? appium server

? Node.js 系列包

? adb shell

? ChromeDriver

? 底層引擎

? Uiautomator Java

? WDA

? selenium

? appium client:Python、Java

Appium 二次封裝

自定義 Appium Server

? git clone

? npm install

重新編譯 Uiautomator

? git clone

? Gradle文章來源地址http://www.zghlxwxcb.cn/news/detail-635835.html

到了這里,關(guān)于移動端自動化測試實(shí)戰(zhàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【APP自動化測試必知必會】Appium之微信小程序自動化測試

    【APP自動化測試必知必會】Appium之微信小程序自動化測試

    H5 是指第 5 代 HTML ,也指用 H5 語言制作的一切數(shù)字產(chǎn)品。 所謂 HTML 是“超文本標(biāo)記語言”的英文縮寫。我們上網(wǎng)所看到網(wǎng)頁,多數(shù)都是由 HTML 寫成的。 “超文本”是指頁面內(nèi)可以包含圖片、鏈接,甚至音樂、程序等非文字元素。而“標(biāo)記”指的是 這些超文本必須由包含屬性

    2024年02月09日
    瀏覽(122)
  • 使用Appium2.0自動化規(guī)模測試APP

    最近做個(gè)項(xiàng)目需要測試服務(wù)端的并發(fā)性能,客戶端采用安卓,接口數(shù)據(jù)采用Restul和流媒體播放。由于流媒體的接口并不清楚,所以決定采用安卓虛擬機(jī)來模擬。 正好趕上Appium2.0升級,網(wǎng)上的很多資料都不能用了,這里將整個(gè)環(huán)境搭建的要點(diǎn)記錄下來與大家分享。 #1. Appium2.0的

    2024年02月08日
    瀏覽(22)
  • app自動化測試之Appium問題分析及定位

    app自動化測試之Appium問題分析及定位

    使用 Appium 進(jìn)行測試時(shí),會產(chǎn)生大量日志,一旦運(yùn)行過程中遇到報(bào)錯(cuò),可以通過 Appium 服務(wù)端的日志以及客戶端的日志分析排查問題。 Appium Server日志-開啟服務(wù) 通過命令行的方式啟動 Appium Server,下面來分析一下啟動日志,日志第一行顯示了 Appium 版本信息和服務(wù)在本地的運(yùn)行

    2024年02月14日
    瀏覽(29)
  • 深度解析appium自動化測試,掌握移動端測試的最新技術(shù),從此告別繁瑣手工測試

    目錄 一、什么是appium? 二、appium的使用場景 三、appium的基礎(chǔ)知識 四、appium代碼示例

    2024年01月19日
    瀏覽(91)
  • APP自動化測試系列之Appium介紹及運(yùn)行原理

    APP自動化測試系列之Appium介紹及運(yùn)行原理

    在面試APP自動化時(shí),有的面試官可能會問Appium的運(yùn)行原理,以下介紹Appium運(yùn)行原理。 Appium是一個(gè)開源測試自動化框架,可用于原生,混合和移動Web應(yīng)用程序測試。它使用WebDriver協(xié)議驅(qū)動IOS,Android和Windows應(yīng)用程序。 Appium是開源的移動端自動化測試框架; Appium可以測試原生的

    2024年02月13日
    瀏覽(23)
  • APP自動化測試(2)-通過appium打開手機(jī)的應(yīng)用

    APP自動化測試(2)-通過appium打開手機(jī)的應(yīng)用

    目錄 一、appium的Capabilities配置及Appium Inspector安裝 1.1安裝Appium Inspector 1.2Capabilities配置 二、獲取手機(jī)以及app的信息 2.1獲取連接設(shè)計(jì)的配置名稱 2.1.1連接手機(jī) 2.1.2獲取設(shè)備名稱 ?2.2利用adb獲取日志找到appPackage和appActivity? ?三、Start Session 3.1 安裝appium-doctor 3.2解決appium-doctor查出

    2024年02月08日
    瀏覽(62)
  • 全網(wǎng)最細(xì)最全Appium自動化測試 iOS入門教程,App自動化測試教程,精細(xì)整理

    全網(wǎng)最細(xì)最全Appium自動化測試 iOS入門教程,App自動化測試教程,精細(xì)整理

    目錄:導(dǎo)讀 一、MAC電腦上 Appium 的安裝流程 二、流程圖 三、下載AppiumServerGui和AppiumInspector 四、開始測試 ? ? ? 1、真機(jī)測試 ? ? ? ? ? ? ? ? 1.1 準(zhǔn)備工作 ? ? ? ? ? ? ? ? 1.2 獲取 開發(fā)包 .app 結(jié)尾 ? ? ? ? ? ? ? ? 1.3 WebDriverAgent使用 ? ? ? ? ? ? ? ? 1.4 配置 Appium Inspec

    2024年02月07日
    瀏覽(60)
  • appium自動化測試實(shí)戰(zhàn)詳解及框架搭建

    appium自動化測試實(shí)戰(zhàn)詳解及框架搭建

    目錄 一、Appium的介紹 ??? 二、Appium實(shí)戰(zhàn)(以真機(jī)為例) ?????? Appium是一款開源的自動化測試工具,其支持iOS和安卓平臺上的原生的,基于移動瀏覽器的,混合的應(yīng)用。 1、 使用appium進(jìn)行自動化測試的好處 ?? ? ? Appium在不同平臺中使用了標(biāo)準(zhǔn)的自動化APIs,所以在跨平臺

    2024年02月05日
    瀏覽(22)
  • Python與Appium實(shí)現(xiàn)手機(jī)APP自動化測試的示例代碼

    Python與Appium實(shí)現(xiàn)手機(jī)APP自動化測試的示例代碼

    本文主要介紹了Python與Appium實(shí)現(xiàn)手機(jī)APP自動化測試的示例代碼,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下 appium是一個(gè)開源的測試自動化框架,可以與原生的、混合的和移動的web應(yīng)用程序一直使用。它使用WebDriver協(xié)議驅(qū)動IOS(內(nèi)

    2024年01月24日
    瀏覽(115)
  • 自學(xué)移動端(APP)自動化測試

    ? ? ? ? 國慶已經(jīng)過去了,新的一周已經(jīng)開始了,各地疫情又開始出現(xiàn)復(fù)發(fā)了,我們能做的就是做好個(gè)人防護(hù)、去哪報(bào)備、到哪掃碼亮碼、主動做核酸、隨時(shí)做好家里存儲至少一周的食物,拒絕過度防疫,拒絕過度恐慌,拒絕過度焦慮。有工作的最起碼還有錢能到手,沒有工

    2024年02月09日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包