Skip to content

marvin-kolja/capstone-public

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Automated Performance Testing Suite for Mobile iOS Applications

This repository contains the code related to my Bachelor's Capstone Project "Automated Performance Testing Suite for Mobile iOS Applications: Designed for repetitive tests and data collection of performance metrics".

Table of Contents

Introduction

This project was designed to execute repeated and controlled performance tests on mobile iOS applications using Xcode' XCUITests for tests and Instruments app for metric collection. To achieve this, the project uses various Xcode Command Line Tools (e.g. xcodebuild) and pymobiledevice3 to interact with physical iOS devices. For a more detailed overview of these technologies please refer to the cores' README Technologies section.

On a high level, the project aims to provide the following features:

  • ✅ Device selection and connection to physical iOS devices.
  • ✅ Build an application from source code.
  • ✅ Configure test plans that define the tests executed and the metrics collected.
  • ✅ Execute test plan on a physical iOS device using the test plan configuration and build.
  • ✅ Export and parse the collected metrics.
  • 🚧 Package server with macOS app for easy use.

While these are a high level description of features, please take a look at each component to get a more detailed overview of the features and technologies used.

Components

The project is divided into three main components:

Component Description README
Core A Python library that provides the main functionality of the project. README
API A FastAPI server that provides a RESTful API to interact with the Core. README
macOS A SwiftUI macOS app that provides a graphical user interface. README

The following diagram shows a basic overview of the interaction between the components, the real device, database, and file system.

Repository Structure

/root
|-- core/                   # Core library
|-- api/                    # API Server
|-- macOS/                  # SwiftUI macOS app
|-- misc/                   # Miscellaneous files (example iOS xcode project and server installation script)
|-- README.md               # This file

Usage

Prerequisites

Technology Version Description
Python 3.13+ Api and Core were developed developed using Python 3.13.
Xcode 16+ Xcode for xcode specific operations.
macOS 14+ macOS is required for this to run as the Core interacts with xcode tools. The minimum version of 14 is set by the macOS app.

Clone the repository

   git clone git@github.com:marvin-kolja/capstone-public.git
   cd capstone

Install and Run the servers

  1. Run the installation script

This will install python dependencies and sets up server environment in ~/capstone.

Caution

This requires python3.13 to be installed and available in the PATH. Check if python3.13 is available by running command -v python3.13.

sh ./misc/install_server.sh
  1. Start the server
sh ~/capstone/start_server.sh
  1. Start the tunnel connect server

Note

This will ask for your password to start the tunnel connect server. Please read more about why this is necessary in the core README.

sh ~/capstone/start_tunnel_server.sh
  1. Make sure it's working
curl http://localhost:8000/health
# {"status":"ok","db":"ok","tunnel_connect":"ok"}

Install and Run the macOS App

Important

Currently, the macOS is not distributed to GitHub. You can either build it yourself or contact me for a pre-built signed and notarized version.

Development

  1. Clone the repository:

    git clone git@github.com:marvin-kolja/capstone-public.git
    cd capstone
  2. Follow the setup instructions in each component's README.

  3. Start the API and the macOS app as instructed in their respective READMEs.

Contact

Marvin Kolja Willms - marvin.willms@code.berlin

About

🤖 Automated Performance Testing Suite for Mobile iOS Applications

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages