---
title: Appium Cloud Testing | Real iOS & Android Devices
description: Run Appium tests on real iOS and Android devices in the TestingBot cloud.
  Native, hybrid and mobile web apps, parallel execution, video & log artifacts, CI/CD
  ready.
source_url:
  html: https://testingbot.com/features/automation/appium
  md: https://testingbot.com/features/automation/appium.md
---

Appium 1, 2 & 3 ready 
# Appium Cloud Automation

Run your Appium tests on real iOS and Android devices. Native, hybrid and mobile web apps. Massive parallelism, video & log artifacts and a 99.9% uptime SLA.

Comparing frameworks? See [Appium vs Espresso](https://testingbot.com/appium-vs-espresso) and [Appium vs XCUITest](https://testingbot.com/appium-vs-xcuitest).

[Start free](https://testingbot.com/users/sign_up) [Request a demo](https://testingbot.com/demo)

- **Real devices:** 200+
- **Appium versions:** 1, 2 & 3
- **Uptime SLA:** 99.9%

_Appium tests running on real iOS, Android, Samsung and Pixel devices in the TestingBot cloud_

Trusted by some of the world's most innovative companies

 5-line setup 
## Run your existing Appium scripts on real devices

Point your Appium driver at the TestingBot hub, supply your app and capabilities, and your test runs on a real iPhone or Android phone in seconds.

 hub.testingbot.com Copy

 JavaScript Python Java Ruby C# PHP 

```javascript
// Run an Appium test on a real iPhone in the TestingBot cloud
const { remote } = require('webdriverio');

const driver = await remote({
  hostname: 'hub.testingbot.com',
  port: 443,
  protocol: 'https',
  capabilities: {
    'platformName': 'iOS',
    'appium:deviceName': 'iPhone 15',
    'appium:platformVersion': '18',
    'appium:app': 'tb://YOUR_APP_ID',
    'tb:options': { name: 'Checkout flow', realDevice: true }
  }
});

await driver.deleteSession();
```

```python
# Run an Appium test on a real Android device in the TestingBot cloud
from appium import webdriver
from appium.options.android import UiAutomator2Options

options = UiAutomator2Options()
options.platform_version = '14'
options.device_name = 'Galaxy S24'
options.app = 'tb://YOUR_APP_ID'
options.set_capability('tb:options', {'name': 'Checkout flow', realDevice: True})

driver = webdriver.Remote(
    'https://hub.testingbot.com/wd/hub',
    options=options
)
driver.quit()
```

```java
// Run an Appium test on a real iPhone in the TestingBot cloud
XCUITestOptions options = new XCUITestOptions()
    .setPlatformVersion("18")
    .setDeviceName("iPhone 15")
    .setApp("tb://YOUR_APP_ID");
options.setCapability("tb:options", Map.of("realDevice", true, "name", "Checkout flow"));

IOSDriver driver = new IOSDriver(
    new URL("https://KEY:SECRET@hub.testingbot.com/wd/hub"),
    options
);

driver.quit();
```

```ruby
# Run an Appium test on a real Android device in the TestingBot cloud
require 'appium_lib'

caps = {
  'platformName' => 'Android',
  'appium:deviceName' => 'Pixel 9',
  'appium:platformVersion' => '15',
  'appium:app' => 'tb://YOUR_APP_ID',
  'tb:options' => { name: 'Checkout flow', realDevice: true }
}

driver = Appium::Driver.new(
  { caps: caps, appium_lib: { server_url: 'https://hub.testingbot.com/wd/hub' } }, true
).start_driver
```

```csharp
// Run an Appium test on a real iPhone in the TestingBot cloud
var options = new AppiumOptions();
options.PlatformName = "iOS";
options.AddAdditionalAppiumOption("deviceName", "iPhone 15");
options.AddAdditionalAppiumOption("platformVersion", "18");
options.AddAdditionalAppiumOption("app", "tb://YOUR_APP_ID");
options.AddAdditionalAppiumOption("tb:options", new Dictionary<string, object> { { "realDevice", true }, { "name", "Checkout flow" } });

var driver = new IOSDriver(
    new Uri("https://KEY:SECRET@hub.testingbot.com/wd/hub"),
    options
);
driver.Quit();
```

```php
// Run an Appium test on a real Android device in the TestingBot cloud
$capabilities = [
    'platformName' => 'Android',
    'appium:deviceName' => 'Galaxy S24',
    'appium:platformVersion' => '14',
    'appium:app' => 'tb://YOUR_APP_ID',
    'tb:options' => ['realDevice' => true, 'name' => 'Checkout flow'],
];

$driver = RemoteWebDriver::create(
    'https://KEY:SECRET@hub.testingbot.com/wd/hub',
    $capabilities
);
$driver->quit();
```

Connected · [Dokumentation anzeigen](https://testingbot.com/support/app-automate/appium/nodejs) [Dokumentation anzeigen](https://testingbot.com/support/app-automate/appium/python) [Dokumentation anzeigen](https://testingbot.com/support/app-automate/appium/java) [Dokumentation anzeigen](https://testingbot.com/support/app-automate/appium/ruby) [Dokumentation anzeigen](https://testingbot.com/support/app-automate/appium/csharp) [Dokumentation anzeigen](https://testingbot.com/support/app-automate/appium/php) 

Same WebDriver protocol you already use, with a single endpoint switch. See the docs for [Appium on TestingBot](https://testingbot.com/support/app-automate/appium) for full examples.

 ![Replace your in-house device lab](https://testingbot.com/assets/features/appium/devicelab-75f7f33e3f397b019864f68f343211683c6d06a40e9334eda108d9f0d053297d.jpg)

 Real device cloud 
## Replace your in-house device lab

Skip buying, hosting and maintaining iOS and Android devices. TestingBot's mobile cloud is on-call 24/7 with hundreds of real, physical devices ready to run your Appium tests.

Every Appium session ships with a video screencast, Appium server logs, device logs, screenshots and network HAR. Pull artifacts from our [REST API](https://testingbot.com/support/api) and post them straight into Jira, Slack or your CI dashboard.

- Real iPhones, iPads, Galaxy, Pixel & OnePlus
- Native, hybrid and mobile web apps
- Pristine devices, factory-reset between sessions
- HD video, logs and HAR for every test
- Upload IPA, APK and TestFlight builds

 Languages & frameworks 
## Appium integrations for every stack

Appium uses the W3C WebDriver protocol, so your existing test code drops in with a single hub URL change. We support the official Appium client in every major language.

- ### [Java](https://testingbot.com/support/app-automate/appium/java)

  - [TestNG](https://testingbot.com/support/app-automate/appium/java/testng)
  - [JUnit](https://testingbot.com/support/app-automate/appium/java)

- ### [Python](https://testingbot.com/support/app-automate/appium/python)

  - [PyTest](https://testingbot.com/support/app-automate/appium/python)
  - [Robot Framework](https://testingbot.com/support/app-automate/appium/robotframework)

- ### [JavaScript](https://testingbot.com/support/app-automate/appium/nodejs)

  - [WebDriverIO](https://testingbot.com/support/app-automate/appium/nodejs/webdriverio)
  - [CodeceptJS](https://testingbot.com/support/app-automate/appium/nodejs/codeceptjs)

- ### [Ruby](https://testingbot.com/support/app-automate/appium/ruby)

  - [RSpec](https://testingbot.com/support/app-automate/appium/ruby)
  - [Cucumber](https://testingbot.com/support/app-automate/appium/ruby)

- ### [C#](https://testingbot.com/support/app-automate/appium/csharp)

  - [NUnit](https://testingbot.com/support/app-automate/appium/csharp/nunit)
  - [SpecFlow](https://testingbot.com/support/app-automate/appium/csharp/specflow)

- ### [PHP](https://testingbot.com/support/app-automate/appium/php)

  - [PHPUnit](https://testingbot.com/support/app-automate/appium/php)
  - [Codeception](https://testingbot.com/support/app-automate/appium/php)

New to Appium? Read the [Appium quickstart](https://testingbot.com/support/app-automate/appium) or jump straight into a language-specific guide below.

 Massive parallelism 
## Cut mobile suite time from hours to minutes

Fan out your Appium suite across hundreds of real devices in parallel. Same test code, a fraction of the wall-clock time, no flakiness from emulator drift.

- Up to 100 concurrent Appium sessions
- Sessions start in seconds, no device queue
- Auto-retry and intelligent device sharding

[Start free](https://testingbot.com/users/sign_up)

 ![Cut mobile suite time from hours to minutes](https://testingbot.com/assets/features/selenium/parallel-0229d698e59a8a6b92fe50344a08634624f018331ecf8a849ef83cfb35e635a5.png)

Spoof device GPS
20+ regions

United States

United Kingdom

Germany

France

Spain

Belgium

Australia

China

Japan

 Geolocation testing 
## Test your app from 20+ regions

Spoof the device GPS to anywhere in the world and verify **localisation** , **geo-targeting** and **store-front rules** in iOS App Store, Google Play and your own backend.

 Secure devices 
## Real devices. Wiped after every session.

Each Appium session locks one real device for your test only. The moment your test ends, the device is factory-reset, all installed apps are deleted, caches are cleared, and the device is returned to the pool ready for the next customer.

GDPR-compliant, with SAML SSO and audit logs for teams.

- One real device per session, never shared
- Factory-reset between every session
- Encrypted app uploads with per-app retention controls

[Visit TestingBot Trust Center](https://trust.testingbot.com/)

1. 1

Your test locks one real device

A pristine iPhone or Android phone is reserved for your session only.

2. 2

Appium drives real hardware

Real sensors, real GPS, real biometrics. Native, hybrid or mobile web.

3. 3

Device factory-reset on release

Apps removed, caches cleared, accounts wiped. Returned clean to the pool.

 Continuous integration 
## Plug Appium into your CI/CD in minutes

TestingBot integrates with every major CI/CD tool. Trigger Appium suites on every commit and stream device videos and logs back into your build dashboards.

 ![Jenkins](https://testingbot.com/assets/integrations/jenkins-e586a1c4af833e4c8d38d7b392a4e84bd193f30cae9cf8c9f198a58ec943a1ff.webp)

### [Jenkins](https://testingbot.com/support/integrations/ci-cd/jenkins)

 ![Bamboo](https://testingbot.com/assets/integrations/bamboo-c8fe09a3cb0b74d6055e3aa6607d77720bfe29ff487b8e3cf825138adf634346.svg)

### [Bamboo](https://testingbot.com/support/integrations/ci-cd/bamboo)

 ![TeamCity](https://testingbot.com/assets/integrations/teamcity-7e75cdb835903a4983ad276c41d95e569ceac5be486e96ec1f955029ce5bb319.svg)

### [TeamCity](https://testingbot.com/support/integrations/ci-cd/teamcity)

 ![CircleCI](https://testingbot.com/assets/integrations/circleci-ede029654ff39b60342e4a5bba8fc9a3a49305cc38bda215b7cf8d07e85e0543.webp)

### [CircleCI](https://testingbot.com/support/integrations/ci-cd/circleci)

 ![GitLab CI](https://testingbot.com/assets/integrations/gitlab-e4c0b6db07d07bc0a400f5606e258f4dc8a51b778e97bbfa51d1d531f3cb049a.webp)

### [GitLab CI](https://testingbot.com/support/integrations/ci-cd/gitlab)

 ![GitHub](https://testingbot.com/assets/integrations/github-actions-8436242ad9e15381f84f1a98a10dddce15611087f121d6305782e211942b7842.webp)

### [GitHub](https://testingbot.com/support/integrations/ci-cd/github-actions)

 Device cloud 
## Real iPhones, iPads, Galaxy & Pixel devices

Test on the iPhones, iPads, Galaxy, Pixel, OnePlus and Xiaomi phones your customers actually use. Latest flagship devices on day one, plus a broad legacy fleet for backwards-compat coverage.

[View all devices](https://testingbot.com/support/app-automate/devices)

 ![Test online on iPhone 17 Pro](https://testingbot.com/assets/devices/160h/44-6b4402c6996d9b1620879bb1123c40a6b36abb064e65dca0a1b3f05286779e9c.webp)

iPhone 17 Pro

 ![Test online on iPhone 17 Pro Max](https://testingbot.com/assets/devices/160h/43-59d7e30684332ed4bf25567cbc09ca942eac46d925ccde8352d3e85812480f7d.webp)

iPhone 17 Pro Max

 ![Test online on iPhone 16 Pro](https://testingbot.com/assets/devices/160h/42-de3704079345026847b739a5b1cf5332595904e54ede66abd988a76fb1e6593c.webp)

iPhone 16 Pro

 ![Test online on iPad (9th generation)](https://testingbot.com/assets/devices/160h/41-70f7d18afde7620063a49a76cbfd088f8b59c742f3a5f4dd4a513dd6ec5c676c.webp)

iPad (9th generation)

 ![Test online on Galaxy S26](https://testingbot.com/assets/devices/160h/40-e917ed08e15b5941fed75855ac457dd1df46b471a2020f081c4d70cefb68f4e8.webp)

Galaxy S26

 ![Test online on Huawei P40](https://testingbot.com/assets/devices/160h/39-32a788c7e66a3da1c88eaaefefd37381f729e510f096b43906968b6907c44c57.webp)

Huawei P40

 Secure Tunnel 
## Test apps that talk to internal backends

Use our [secure tunnel](https://testingbot.com/support/tunnel) to let your Appium tests reach private APIs, staging environments and services running on localhost.

Encrypted end-to-end, no inbound firewall rules required, and ready out of the box for popular CI providers.

 ![TestingBot secure tunnel for Appium](https://testingbot.com/assets/features/tunnel-diagram-poster-8c25e19e6fe4f7276a46a96b31a0ad0e07bb4f5bf98dc192d2b70897cfbb1a26.png)

[Read more](https://testingbot.com/support/tunnel)

 Buy vs build 
## TestingBot vs an in-house device lab

Building and maintaining your own iOS and Android device lab is expensive. Devices break, batteries swell, OS updates ship constantly. Here is how a hosted device cloud compares.

| Capability | TestingBot | In-house device lab |
| --- | --- | --- |
| Device coverage | Real iPhones, iPads, Galaxy, Pixel, OnePlus, Xiaomi, refreshed every release | Limited to what you can buy and rack yourself |
| Time to first test | Minutes, change one URL in your Appium driver | Weeks of provisioning, MDM and Appium server setup |
| Parallel scaling | Up to 100 concurrent sessions, on demand | Capped by the number of devices you own |
| Video & logs | Video, device logs, Appium logs and HAR included | Roll your own recording & log aggregation |
| Reliability | 99.9% uptime SLA, 24/7 monitoring | You replace dead batteries and broken screens |
| Security | Devices factory-reset between every session | Manual cleanup, leftover state risks |
| Support | 24/7 human support and dedicated CSM | Stack Overflow and your own logs |

FAQ
## Appium on TestingBot: frequently asked questions

What is Appium and why run it on TestingBot?

Appium is the open-source automation framework for native, hybrid and mobile web apps. TestingBot hosts a fleet of real iPhones, iPads, Galaxy and Pixel devices that you can drive with your existing Appium scripts. Point your driver at `https://hub.testingbot.com/wd/hub` and your test runs on a real device in seconds.

Which Appium versions are supported?

TestingBot supports Appium 1, Appium 2 and Appium 3, including Appium 2/3 plugins and the latest XCUITest and UIAutomator2 drivers. You can pin a specific Appium server version per-test through capabilities, so you can keep legacy suites running on Appium 1 while migrating new tests to Appium 3.

Can I test native, hybrid and mobile web apps?

Yes. TestingBot supports all three Appium contexts. Native iOS apps via XCUITest, native Android apps via UIAutomator2 or Espresso, hybrid apps in WebView, and mobile web in Safari and Chrome on real devices.

How do I upload my IPA or APK?

Upload your build to [TestingBot Storage](https://testingbot.com/support/app-automate/help/upload) via the REST API or our CLI, then reference it from your Appium capabilities. Builds can be retained per-app for fast re-runs.

Can I run Appium tests in parallel?

Yes. Plans on TestingBot include up to 100 parallel Appium sessions on real devices. Each session locks a dedicated device, so tests do not interfere with one another.

Are the devices real or simulators?

TestingBot's mobile cloud uses real, physical iOS and Android devices. We also offer iOS Simulators and Android Emulators for early-stage tests, but real devices are the default and the recommended target for accuracy.

Can I test apps that need a private backend?

Install our [secure tunnel](https://testingbot.com/support/tunnel) and your Appium tests can reach staging APIs, internal services and localhost. No inbound firewall rules needed.

Is the device cloud SOC 2 / GDPR compliant?

TestingBot is not SOC 2 or ISO 27001 certified. We are GDPR-compliant with EU-only data residency, registered at CSA STAR Level 1 (a published self-assessment), and our control set is modelled on ISO 27001 Annex A. Our datacenter operators hold ISO 27001. Devices are factory-reset between sessions, app uploads are encrypted and SAML SSO and audit logs are available on enterprise plans.

## More reasons to love TestingBot

### 24/7 support

Got questions? Ask in the 24/7 in-app customer [chat support](https://testingbot.com#) or [send us an email](https://testingbot.com/contact/new). We are here to help you!

TestingBot Support

Hey 👋 How can we help?

I need support

### Trusted by over 14,000 teams

6M+

Tests

120k+

Users

400+

Enterprises

106

Countries

[Request a demo](https://testingbot.com/demo)

### Developer Documentation

Everything you need to integrate TestingBot into your workflow. Browse guides, API references and SDKs for web and mobile testing.

- [Appium Quickstart](https://testingbot.com/support/app-automate/appium)
- [App uploads (IPA / APK)](https://testingbot.com/support/app-automate/help/upload)
- [Available devices](https://testingbot.com/support/app-automate/devices)
- [CI/CD integration](https://testingbot.com/support/integrations/ci-cd)

[Explore Documentation](https://testingbot.com/support)

### Enterprise-grade Security

STAR Level 1

Certified

GDPR

Compliant

SAML SSO

Single Sign-On

99.9%

Uptime SLA

[Visit TestingBot Trust Center](https://trust.testingbot.com/)

## Ready to scale your Appium testing?

Read our [Appium Cloud Testing](https://testingbot.com/support/app-automate/appium) documentation and run your first test in under 5 minutes.

[Start a free trial](https://testingbot.com/users/sign_up)

Resources you may like

[![Using Touch Actions with Appium](https://testingbot.com/assets/resources/articles/24-490f70ad8a80e4534523707125b88e44e70fe19b126be4f44e689bbd5f6a0cbf.webp)](https://testingbot.com/resources/articles/touch-actions-appium)
### [Using Touch Actions with Appium](https://testingbot.com/resources/articles/touch-actions-appium)

Find out how to use Touch Actions with Appium.

[Read more](https://testingbot.com/resources/articles/touch-actions-appium)

[![Migrate from Appium 1.x to Appium 2.x](https://testingbot.com/assets/resources/articles/27-121da26036885301ba438e1cdfc81e7ae8045cbc53c0dafaff5b4436000590b1.webp)](https://testingbot.com/resources/articles/appium-2-migration)
### [Migrate from Appium 1.x to Appium 2.x](https://testingbot.com/resources/articles/appium-2-migration)

Learn how to migrate from Appium 1 to the new Appium 2.

[Read more](https://testingbot.com/resources/articles/appium-2-migration)

[![Dark Mode Testing with Appium](https://testingbot.com/assets/resources/articles/22-ed15fa0f3fde7566416fff5078b44689dc274439b2fb829f8c68603e909a65d6.webp)](https://testingbot.com/resources/articles/dark-mode-testing)
### [Dark Mode Testing with Appium](https://testingbot.com/resources/articles/dark-mode-testing)

Perform dark mode automated testing on iOS and Android with Appium.

[Read more](https://testingbot.com/resources/articles/dark-mode-testing)
