Skip to content

eonist/TestRunner

Repository files navigation

mit platform Lang SPM compatible Tests codebeat badge

TestRunner πŸƒ

Simplifies running UI-tests

Description:

  • TestRunner is a Swift package that simplifies running UI tests for iOS and macOS.
  • It allows you to create scenes that can be played and receive notifications upon their completion.
  • You can iterate through scenes in sequences, reuse common scenes such as LoginScene and LogoutScene, and operate asynchronously.

How does it work

TestRunner allows you to:

  • Create scenes that you can play and receive notifications upon their completion (asynchronously).
  • Iterate through scenes in sequences.
  • Reuse common scenes such as LoginScene and LogoutScene.
  • Operate asynchronously.

Key Concepts:

  • Step: A single interaction logic, usually encapsulated in an anonymous closure.
  • Scene: A series of steps.
  • Sequence: A series of scenes.

Demo:

Here is a QA Test prototype for debugging a playlist feature:

img

Installation

You can install TestRunner using Swift Package Manager. Simply add the following line to your Package.swift file:

.package(url: "https://github.com/eonist/TestRunner.git", from: "1.0.0")

Then add TestRunner as a dependency for your target:

.target(
    name: "MyTarget",
    dependencies: [
        "TestRunner",
    ]
),

Alternatively, you can add TestRunner to your project using Xcode. Simply go to File > Swift Packages > Add Package Dependency and enter the URL of this repository.

Example:

class SearchScene {
  override run(){
    let searchBar = XTElement.findFirst("SearchBar")
    searchBar.search("Eminem")
    let searchButton = XTElement.findFirst("SearchButton")
    searchButton.tap()
    onComplete()
  }
}
let sequence: [SceneKind.Type] = [LoginScene.self, SearchScene.self, LogoutScene.self]
let runner: SceneRunner = .init(sequence: sequence, onComplete: {})
runner.complete { Swift.print("All scenes completed 🏁") }
runner.app.launch()
runner.iterate() // πŸƒ

Dependencies:

Warning
Add this framework via XCode SPM-package-manager to the UITesting-target in xcode, not main target

Resources:

Todo:

  • Add example project (See TabNav-project, playlist-project, UITesting-project) πŸ‘ˆπŸ‘ˆπŸ‘ˆ
  • Maybe add ideas from AccessRunner project, might have advanced ways of doing things etc πŸ‘ˆ
  • Maybe use semaphore to make async -> sync ? πŸ‘ˆ
  • Clean up UITestSugar