利用 Appium + Robot Framework 實現跨平台 App 互動測試

  • View
    1.751

  • Download
    0

  • Category

    Software

Preview:

DESCRIPTION

Android 跟 iOS 在自動化測試上的支援漸趨成熟,要在單機上實作 App 自動化測試並不是太困難,但如果 App 支援多個設備間資料的同步,或使用者之間可以互動的社群功能呢?本議程將與大家分享如何利用 Appium 實現涉及多支手機、不同平台間互動的自動化測試,過程中也將介紹 Robot Framework 跟 Page-Object Pattern 在 "跨平台測試案例" 這個議題上所扮演的角色。

Citation preview

利⽤用 Appium + Robot Framework!實現跨平台 App 互動測試Jeremy Kao ( / imsardine)

• Test cases involving multiple devices • A test script that works! • Essentials and long-term considerations • PyUIA - Python UI Automation • Q&A

Agenda

Test Cases Involving Multiple Devices

• Data synchronization • Social features

• Sharing • Following • Messaging

• …

KKBOX - Playlist Auto-Sync• Easy to manage and organize playlists on various devices. • More than one devices (generally with different platforms)

are involved.

The Test Case (iOS > Android)

1. On device A, create a new playlist.

2. On device B, check if the playlist created in step 1 appears.

A B

iOS Android

The Test Case (Android > iOS)

1. On device A, create a new playlist.

2. On device B, check if the playlist created in step 1 appears.

B A(the same test case)

iOS Android

A central/remote controller is needed.

?

A B

Automation for Apps

Test case Appium servers Android / iOS / Firefox OS

Appium Platforms Support

Native automation frameworks

• Extended Selenium WebDriver API • Various language bindings

(Source: Dev::Coder)

Multiple Devices Support - Multiple Servers

Driver A / B

*:4723

*:4725

Driver A / B

(one-to-one)

NOTE: Currently, each Appium server only serves one session/device at a time. To work around this, run multiple Appium servers. (#462)

iOS

Android

A (Pseudo) Test Script That Works!

Android > iOS

iOS > Android

Test scenario

Locate UI elements and interact with them (in different ways)

A (Pseudo) Test Script That Works!

Bad smell?May lead to too many if/else statements

Easy to read ?

Essentials and Long-term Considerations…

• Keyword-driven testing (KDT) support. • Reusable keywords. • Abstraction of layers. • Technology-independent

• Acceptance testing and A-TDD support. • Specified in business domain language/

terms (natural language), that are shared between stakeholders.

• Requirements as tests -> Executable • Data-driven testing (DDT) support. • RIDE - Robot Framework IDE.

Robot Framework and RIDE

Test Cases in Natural Language

Readability

Data-driven Support - Test Template

Arguments

Results - Reports

Results - Logs

Device logs collected during the execution of a keyword and a test case.

Logs generated by test code

Results - Embedded Screenshots

• Take screenshots automatically before (and after) keyword execution.

• Take screenshots on demand in the test code.

PageObj. (iOS)

PageObj. (Android)

Abstraction of LayersRequirements

Keywords

Keyword Impl.

Application Under Test

Testing Tools

Test Data

Python Prog.

User Keywords and Library Keywords

User Keywords

Library Keywords

Import Test Libraries

Application Library

Page/Screen Libraries

Application Library

A

B

Application Library

Open App <DEVICE_ID> [<ALIAS]

Switch Device <ALIAS>

Page/Screen Libraries - Modeling

Generally, one for each page/screen.

Services offered by this page/screen. (Page Object Pattern)

iOSAndroid

Library Keywords - High Level, Domain TermsiOSAndroid

Library Keywords - Scenario

Reusable keywords as bricks, from multiple keyword libraries.

iOSAndroid

PageObj. (iOS)

PageObj. (Android)

Abstraction of LayersRequirements

Keywords

Keyword Impl.

Application Under Test

Testing Tools

Test Data

Python Prog.

• Maintainability - less code duplications. • Readability - test code is about intention and scenarios. • Scalability - test code that scales without losing control.

Page Object Pattern / Modeling (POM)

Problem

Tests are brittle to (inevitable) changes in the UI.

Benefits

PageObj. (iOS)

PageObj. (Android)

Abstraction of LayersRequirements

Keywords

Keyword Impl.

Application Under Test

Testing Tools

Test Data

Python Prog.

A

B

Page Library Impl. in KKBOX

PyUIA

self._page_object points to CURRENT device. (delegation)

A/B = iOS | Android

Page Library Keywords

Keyword Impl.

PageObj. (iOS)

PageObj. (Android)

Abstraction of LayersRequirements

Keywords

Keyword Impl.

Application Under Test

Testing Tools

Test Data

Python Prog.

Page Objects Impl. in KKBOX (Android)

Page Library Keyword

Page Object Impl. (Android)

Page Objects Impl. in KKBOX (Android)

UI interaction and details

UI Mapping

PageObj. (iOS)

PageObj. (Android)

Abstraction of LayersRequirements

Keywords

Keyword Impl.

Application Under Test

Testing Tools

Test Data

Python Prog.

Page Objects Impl. in KKBOX (iOS)

UI Mapping

Implement the same interface.

PageObj. (iOS)

PageObj. (Android)

Abstraction of LayersRequirements

Keywords

Keyword Impl.

Application Under Test

Testing Tools

Test Data

Python Prog.

where PyUIA fits into

PyUIA (imsardine/pyuia)

Fork me on GitHub

$ pip install pyuia

Example: imsardine/pyuia-example-wordpress

A library/framework aiming to facilitate the implementation of UI test automation on various platforms, including mobile and desktop OSs.

Incubated by KKBOX SQA Team

PyUIA and Your App (WordPress)

PageObj. (iOS)

PageObj. (Android)

PyUIA and Your App (WordPress)Requirements

Keywords

Keyword Impl.

Application Under Test

Testing Tools

Test Data

Python Prog.

• WordPress • SignInScreen • MainScreen

• SignInScreen • MainScreen • …

• Appium • Robot Framework and RIDE • Keyword-driven testing • Page Object Pattern / Modeling • PyUIA - Python UI Automation • …

利⽤用 Appium + Robot Framework!實現跨平台 App 互動測試

PyUIA (imsardine/pyuia)Jeremy Kao ( / imsardine)

Google Test Automation Conference

Oct 28-29 Live Stream

• Appium • Robot Framework, RIDE • Keyword-driven testing - Wikipedia, the free encyclopedia • Page Object - Martin Fowler • Page Objects - Selenium • Acceptance Test-Driven Development With Robot Framework

(PDF)

References

Page Object Pattern / Modeling (POM)Pattern

• Model areas/fragments (on a given page/screen) that test code interacts with as objects.

• Public methods as services offered by the page/screen. (abstract, high-level, application/domain-specific)

• Assertion-free, except for asserting it is on the correct page/screen. The tests should be responsible for making assertions.

• Except for getter methods, return a page object representing the (navigation) destination.

• Encapsulate UI interaction, details, async (wait for).