67
跨跨跨跨跨跨跨跨 - 跨跨 跨跨跨 Chris Jeng

1.跨平台開發架構首部曲 測試

Embed Size (px)

Citation preview

跨平台開發首部曲 - 測試鄭鈞隆 Chris Jeng

故事 為什麼要寫測試 ?前人遺留的程式下落不明的規格需要改進的架構需要升級的框架需要新增的需求

測試會是問題的解決方法 ?

變成聖鬥士 ?

還是 .... 這種的 ?

人月神話 ?

打破的方法 ?( 誤

測試的種類

測試的迷人特點時間規格驗證 ( 保護 )自動化

種類對應工具

Unit Test 建議使用右邊的 ?TestNG ⇔ JUnitJMockit ⇔ MockitoAssertj ⇔ Google Truth

TestNG Java Test Next Generation目標不只是 Unit Test註釋 (Annotations ex:@Test)強大的參數資料驅動測試

@Test 被註釋的類別或方法會在測試時被執行alwaysRun 如果設定為 true 就算他依賴的方法失敗,也會被執行dataProvider 這個測試方法的 data provider 的名稱dependsOnGroups 這個測試方法依賴的群組dependsOnMethods 這個測試方法依賴的方法priority 這個方法的優先性,愈低愈先被執行千年一遇 : TestNG 筆記 (1)Annotations 說明 - http://goo.gl/iFjkZl

AndroidTest101_03/ShopTest.java at master · ULei/AndroidTest101_03 - https://goo.gl/e5TySz

TestNG + Appium順序依賴

mockitoUse Mockito on Android, thanks to the Google guys working on dexmaker

依賴注入 (Dependency Injection)

JMockitFeatures

mocking API with expressive recording & verification syntax small but powerful faking API for replacing implementations scenario-based testing for Java EE and Spring-based apps code coverage tool with line and path metrics

惡魔果實 !!

AssertjFluent assertions for java

這個 library 可以讓我們斷言,從原本的assertEquals(expected, actual);

轉換成assertThat(actual).isEqualTo(expected);

這樣是不是可讀性更高了呢 ?

AssertJ 1.x requires Java 6 or higher (suitable for Android)

MVP 架構

why MVP?分層 分職責抽象化依賴注入 多型 => 替換 !!!

符合物件導向原則 ?

SRP 單一職責原則OCP 開放封閉原則LSP Liskov 替換原則ISP 介面隔離原則DIP 依賴反向原則LKP 最少知識原則

純 Java Test on JVM

JMockit Path 測試覆蓋率

Unit Test 的優與劣 ?

測試的種類

E2E Test

參考 http://goo.gl/wCc3Ct

E2E Test

AppiumAndroid SUPPORT

Versions: 2.3 and up

Versions 4.2 and up

iOS SUPPORT

Versions: 7.1, 8.0, 8.1, 8.2, 8.3, 8.4, 9.0, 9.1 and 9.2

Both SUPPORT

Mobile web & Hybrid

UI 操作 尋找操作驗證

Page Factory Pattern因應 Android 跟 iOS 可能找元件的方式不同,但操作過程相同的狀況,利用多型注入不同的依賴來達到測試腳本的 reuse!

Page Factory Pattern

Page Factory Pattern

@AndroidFindBy(id = "detail_name")@iOSFindBy(xpath = "//UIAApplication[1]/UIAWindow[1]/UIAStaticText[1]") public MobileElement contactName;

https://github.com/ULei/Appium-cross-platform-example/blob/master/AppiumExample/src/test/java/PageObjects/ContactDetailPageBoth.java

Page Object Pattern將行為抽象為較高的層面,比較容易理解舉例來說登入,我需要找出帳號 / 密碼的欄位,輸入帳號 / 密碼,按下登入的程式實作,但我們可以將實作封裝成 login(account, password) ,不用在意更詳細的細節,用這樣的方式隱藏細節。

上層封裝,細節改變不影響上層,減少 UI 改變或實作改變的影響,測試腳本不變 !

https://github.com/ULei/Appium-cross-platform-example/blob/master/AppiumExample/src/test/java/Test/Test_ContactSearch.java

Page Object Pattern舉左圖例子來說登入頁 => LoginPage

動作返回 => LoginPage.back()

點選登入說明 => LoginPage.explanation()

登入 => LoginPage.login(String account, String password)

Behaviour-Driven Development(BDD)Acceptance Test Driven Development (ATDD)

可執行的規格活的文件自動的測試

BBD價值 ?利害關係人的參予不會寫程式的測試工程師 ?

很愛協助寫測試程式的 PM?

測試和文件都只是愉快的副作用而已,真正的價值在於交談過程中,對於規格的理解

作者表示Jbehava

BDD 是第二代的、由外及內的、基於拉 (Pull) 的、多方利益相關者的(Stakeholder)、多種可擴展的、高自動化的敏捷方法。它描述了一個交互循環,可以具有帶有良好定義的輸出(即工作中交付的結果):已測試過的軟件。Cucumber

BDD 的實踐者們通過溝通交流,具體的示例和自動化測試幫助他們更好地探索,發現,定義並驅動出人們真正想用的軟件

E2E 的優與劣

Integration TestEspresso + mockito

Mock Service

AWS Device Farm 雲端好棒棒 !

Google Cloud Test Lab

自動化測試不是萬靈丹 (銀彈 ) 要理解系統的本質 手動 =>系統化 => 自動化

夢想幻想 測試是甚麼 ? 能吃嗎 ? 喔喔~ 導入自動化測試找個自動化測試工程師就能解決我所有問題現實 連軟體工程和測試的觀念與方法都沒有,自動化測試不是仙丹,不能讓你跳過這些,而且它也不能解決所有問題該不該 ? 要不要 ?

你願意為軟體品質付出多少代價 ?

劍無正邪 人有善惡Scrum

Kanban

XP(Extreme programming)

如果不寫測試 ?

測試只是輔助,跨平台架構才是目標 !!!

二部曲 !MOPCON!Google Inbox shares 70% of its code across Android, iOS, and the Web

自學資源Appium

AWS Device Farm Appium tests - https://goo.gl/DhQj8D

AWS Device Farm sample Android app - https://goo.gl/wRhzVM

ULei/Appium-cross-platform-example - https://goo.gl/lUzz85

Unit Test

挑戰測試 101 - Quip - https://goo.gl/yKDwFS

自學資源MVP

"Standard Android", MVP and MVVM. - https://goo.gl/C0lF3V

A collection of samples to discuss and showcase different architectural tools and patterns for Android apps. - https://goo.gl/FwXr81

BDD

千年一遇 : BDD JBehave教學 (1) 使用心得 - http://goo.gl/M0S4qn

醒醒吧少年,只用 Cucumber 不能幫助你 BDD – TW洞見 - http://goo.gl/uDgO2v

Q&A

目前在玩WEKA

Vertx

Spring