---
title: Upload your Android or iOS App for Automated Appium Testing
description: Upload your APK or IPA file to TestingBot for Automated Testing on physical
  mobile devices.
source_url:
  html: https://testingbot.com/support/app-automate/help/upload
  md: https://testingbot.com/support/app-automate/help/upload/index.md
---
# Upload your App

In order to run tests against your mobile app, our devices need to be able to download your app.   
 There are two ways to configure your tests to do this:

- Upload your app to TestingBot Storage: our private upload servers.
- Specify an HTTP or HTTPS url to the app you uploaded on a public internet website.

## TestingBot Storage

With TestingBot Storage, you can upload your app to our servers.   
 The advantage of this is that your tests will start faster, as the device can download the app from our internal network, instead of the public internet.

To get started, simply submit your app to our API:

    $ curl -X POST "https://api.testingbot.com/v1/storage" \
    -u "key:secret" -F "file=@/path/to/app/file/Application-debug.apk"

This call will return a unique identifier for your app (`{"app_url": "tb://..."}`), which you can use in the desired capabilities (see example below).

More information regarding this API call and other similar calls (update uploaded file, delete uploaded file, list uploaded files) are available in [our API documentation](https://testingbot.com/support/api#upload).

Note: uploads to TestingBot Storage are automatically deleted after 62 days.

    require 'appium_lib'
    
    caps = {
      "platformName" => "iOS",
      "appium:deviceName" => "iPhone 15",
      "appium:platformVersion" => "18.0",
      "appium:app" => "tb://...", # specify the link to your app here
      "tb:options" => {
        "name" => "single_test",
        "build" => "Ruby Appium Sample"
      }
    }
    
    appium_driver = Appium::Driver.new({
        caps: caps,
        appium_lib: {
            server_url: "https://API_KEY:API_SECRET@hub.testingbot.com/wd/hub"
        }}, true)
    driver = appium_driver.start_driver
    
    driver.find_element(:name, "inputA").send_keys 5
    driver.find_element(:name, "inputB").send_keys 10
    driver.quit

## Public Internet

If you have your app available on a public website, you can specify this in the desired capabilities:

    require 'appium_lib'
    
    caps = {
      "platformName" => "iOS",
      "appium:deviceName" => "iPhone 15",
      "appium:platformVersion" => "18.0",
      "appium:app" => "https://...", # specify the link to your app here
      "tb:options" => {
        "name" => "single_test",
        "build" => "Ruby Appium Sample"
      }
    }
    
    appium_driver = Appium::Driver.new({
        caps: caps,
        appium_lib: {
            server_url: "https://API_KEY:API_SECRET@hub.testingbot.com/wd/hub"
        }}, true)
    driver = appium_driver.start_driver
    
    driver.find_element(:name, "inputA").send_keys 5
    driver.find_element(:name, "inputB").send_keys 10
    driver.quit

Was this page helpful? Yes No 

## Looking for More Help?

Have questions or need more information?   
 You can reach us via the following channels:

- [Email us](https://testingbot.com/contact/new)
- [Join our Slack Channel](https://join.slack.com/t/testingb0t/shared_invite/zt-3bcw9xch-jk19~6XPs_xBrsAgAedkCw)
