SkillAgentSearch skills...

Bluepill

Bluepill is a reliable iOS testing tool that runs UI tests using multiple simulators on a single machine

Install / Use

/learn @MobileNativeFoundation/Bluepill
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

BluepillIcon

Bluepill is a tool to run iOS tests in parallel using multiple simulators.

Motivation

LinkedIn created Bluepill to run its large iOS test suite in a reasonable amount of time. If you want the long story, read the blog post.

Features

  • Running tests in parallel by using multiple simulators.
  • Automatically packing tests into groups.
  • Running tests in headless mode to reduce memory consumption.
  • Generating a junit report after each test run.
  • Reporting test running stats, including test running speed and environment robustness.
  • Retrying when the Simulator hangs or crashes.

Usages

It is quick and easy to start using Bluepill!

  • Get bluepill binary: build from source or use our releases. You can also get the binary from Homebrew.
$ brew install bluepill
  • Build your app and test bundle. You must build-for-testing if you use xcodebuild in terminal.
  • Run bluepill using the .xctestrun file generated by Xcode.
$ bluepill --xctestrun-path ./SampleAppTest_iphonesimulator10.3-x86_64.xctestrun -o ./output/

Alternatively, you can use a configuration file like the one below:

{
   "xctestrun-path": "./SampleAppTest_iphonesimulator10.3-x86_64.xctestrun", # Relative path or abs path
   "output-dir": "./build/" # Relative path or abs path
}

And run

$ bluepill -c config.json

Flags

A full list supported options are listed here.

| Config Arguments | Command Line Arguments | Explanation | Required | Default value | |:----------------------:|:----------------------:|----------------------------------------------------------------------------------------------|:--------:|:----------------:| | app | -a | The path to the host application to execute (your .app) | N | n/a | | xctestrun-path | | The path to the .xctestrun file that xcode leaves when you build-for-testing. | Y | n/a | | test-plan-path | | The path of a json file which describes the test plan. It is equivalent to the .xctestrun file generated by Xcode, but it can be generated by a different build system, e.g. Bazel | Y | n/a | | output-dir | -o | Directory where to put output log files. (bluepill only) | Y | n/a | | config | -c | Read options from the specified configuration file instead of the command line. | N | n/a | | device | -d | On which device to run the app. | N | iPhone 8 | | exclude | -x | Exclude a testcase in the set of tests to run (takes priority over include). | N | empty | | headless | -H | Run in headless mode (no GUI). | N | off | | clone-simulator | -L | Spawn simulator by clone from simulator template. | N | off | | xcode-path | -X | Path to xcode. | N | xcode-select -p | | include | -i | Include a testcase in the set of tests to run (unless specified in exclude). | N | all tests | | list-tests | -l | Only list tests and exit without executing tests. | N | false | | num-sims | -n | Number of simulators to run in parallel. (bluepill only) | N | 4 | | printf-config | -P | Print a configuration file suitable for passing back using the -c option. | N | n/a | | error-retries | -R | Number of times to recover from simulator/app crashing/hanging and continue running.| N | 4 | | failure-tolerance | -f | Number of times to retry on test failures | N | 0 | | only-retry-failed | -F | Only retry failed tests instead of all. Also retry test that timed-out/crashed. | N | false | | runtime | -r | What runtime to use. | N | iOS 13.3 | | stuck-timeout | -S | Timeout in seconds for a test that seems stuck (no output). | N | 300s | | test-timeout | -T | Timeout in seconds for a test that is producing output. | N | 300s | | test-bundle-path | -t | The path to the test bundle to execute (single .xctest). | N | n/a | | additional-unit-xctests| n/a | Additional XCTest bundles that is not Plugin folder | N | n/a | | additional-ui-xctests | n/a | Additional XCTUITest bundles that is not Plugin folder | N | n/a | | repeat-count | -C | Number of times we'll run the entire test suite (used for load testing). | N | 1 | | no-split | -N | Test bundles you don't want to be packed into different groups to run in parallel. | N | n/a | | quiet | -q | Turn off all output except fatal errors. | N | YES | | diagnostics | n/a | Enable collection of diagnostics in output directory in case of test failures. | N | NO | | help | -h | Help. | N | n/a | | runner-app-path | -u | The test runner for UI tests. | N | n/a | | screenshots-directory | n/a | Directory where simulator screenshots for failed ui tests will be stored. | N | n/a | | videos-directory | n/a | Directory where videos of test runs will be saved. If not provided, videos are not recorded. | N | n/a | | keep-passing-videos | n/a | Whether to keep the recorded video for passing tests. Deleted by default. | N | false | | video-paths | -V | A list of videos that will be saved in the simulators. | N | n/a | | image-paths | -I | A list of images that will be saved in the simulators. | N | n/a | | unsafe-skip-xcode-version-check | | Skip Xcode version check | N | NO | | retry-app-crash-tests | | Retry tests that crashed app and consider it non-fatal if it passes on retry. | N | false |

Exit Status

The exit code of Bluepill uses bit indicators which could represent multiple exit status. Please refer to the header for meaning of each bit.

Demo

BluepillDemo

Requirements

Bluepill officially supports Xcode 14.0. If you're looking for old Xcode support, please checkout the following branches:

If you're looking for newer Xcode version support, try using Bluepill with `unsaf

View on GitHub
GitHub Stars3.2k
CategoryDevelopment
Updated8d ago
Forks232

Languages

Objective-C

Security Score

100/100

Audited on Mar 20, 2026

No findings