[SauceLabs] Appium tests are running really long on IOS simulator comparing to Android emulator on saucelabs

Hi, has anyone here had experience in setting up the automation for the IOS platform on SauceLabs simulators?

I tried and got pretty bad performance results, as an example I executed a simple authorization test with next results:

  • Android emulator, it takes 1m 50s to finish
  • IOS simulator - 12m 52s

Later I discovered the VM resources on which the IOS simulator is executed, and they were pretty bad

  • Chip - intel core 2 Solo
  • RAM - 6GB
  • Graphics: VMware SVGA || 32 MB

After that, I came up to the conclusion that the VMs that are provided - are simply not powerful enough to support smooth simulator work, because at least locally I didn’t have such problems at all:

  • Chip - Apple M1 Pro
  • RAM - 16GB

The only solution for me is completely switching to the SauceLabs real devices, the test execution speed there is pretty much the same as on Android emulators, so the authorization test takes ~1m 50s to finish

Maybe there is something I am missing, maybe it is possible to set the VM with better resources somehow for Appium testing, but I wasn’t lucky to find this in their official docs.

Or there is some magic capability that would resolve all the problems :slight_smile: , it is not that I am not okay with the real devices but they are much more expensive than the virtual ones and it would be better for me to use the virtual ones.

I will be grateful if somebody who faced the same situation could give some advice on the topic, thanks.

P.s Here are my Caps just in case(more oriented for real devices):

private DesiredCapabilities getSauceLabsIOSDesiredCapabilities() {
        CAPABILITIES.readCapabilitiesFromProperties();
        DesiredCapabilities capabilities = CAP.get();
        capabilities.setCapability("appium:deviceName", new SauceLabsService().getNotBusyIOSRealDevice(DEVICE).getFullDeviceName());
        capabilities.setCapability("appium:platformVersion", DEVICE.getPlatformVersion());
        capabilities.setCapability("appium:automationName", "XCUITest");
        capabilities.setCapability("appium:deviceOrientation", "portrait");
        capabilities.setCapability("appium:sendKeyStrategy", "setValue");
        capabilities.setCapability("appium:settings[waitForQuiescence]", false);
        capabilities.setCapability("appium:autoFillPasswords", false);
        capabilities.setCapability("appium:settings[animationCoolOffTimeout]", 0);
        capabilities.setCapability("appium:settings[customSnapshotTimeout]", 2);
        capabilities.setCapability("appium:noReset", true);
        capabilities.setCapability("appium:bundleId", "my.cool.app");
        capabilities.setCapability("appium:settings[pageSourceExcludedAttributes]", "visible,enabled,accessible,x,y,width,height,index");
        capabilities.setCapability("appium:derivedDataPath", "/Volumes/Sauce/wda/wda-v2.0.0-xcode13.0/WebDriverAgent/DerivedData/WebdriverAgent");
        capabilities.setCapability("appium:app", AppCenterService.getInstance().getApp().get("url"));
        capabilities.setCapability("appium:shouldTerminateApp", true);

        MutableCapabilities sauceOptions = new MutableCapabilities();
        sauceOptions.setCapability("appiumVersion", "2.0.0");
        sauceOptions.setCapability("cacheId", "jnc0x1257");
        sauceOptions.setCapability("build", CAPABILITIES.getBuildNumber());
        sauceOptions.setCapability("name", CucumberScenario.SCENARIO.get().getName());
        sauceOptions.setCapability("videoUploadOnPass", false);
        sauceOptions.setCapability("sauceLabsImageInjectionEnabled", false);
        capabilities.setCapability("sauce:options", sauceOptions);

        log.info("Capabilities: " + new JSONObject(capabilities.toJson()).toString(identFactor));
        return capabilities;
    }

[Update] My assumption regarding the role of resources was right, set up the same tests on CircleCI’s MacOS environment with:

  • Chip - intel core I5
  • RAM - 8GB

And the tests are flying - same as locally, so it is all about the resources… if talk about test execution on Simulators - SauceLabs loses completely(hope in the future they will improve it but for now it is as it is).

So I will most likely switch my IOS runs from there to CircleCI except for the test scenarios where real device involvement is necessary.