I did the following in my test suite like below and the functions I have used. Hope this helps
@BeforeTest
Start Appium
@BeforeMethod
setIOSDriver (This will set capabilities)
@AfterTest
Stop Appium
public static void startAppium() {
Boolean blnServiceStatus;
System.out.println("Starting Appium");
service = new AppiumServiceBuilder().usingDriverExecutable(new File("/usr/local/bin/node"))
.withAppiumJS(new File("/usr/local/lib/node_modules/appium/build/lib/main.js"));
// .usingDriverExecutable(new File(System.getProperty("user.home") +
// "/local/bin/node"))
// .withIPAddress("127.0.0.1").usingPort(4723));
blnServiceStatus = service.build().isRunning();
if (blnServiceStatus.equals(false)) {
service.build().start();
System.out.println("Appium server Started");
}
service_url = service.build().getUrl().toString();
System.out.println(service_url);
}
public static void stopAppium() {
System.out.println("Stopping Appium");
try {
service.build().stop();
} catch (Exception e) {
System.out.println("Appium server is already stopped");
}
System.out.println("Stopped Appium Server");
}
public void setIOSDriver(String ExecutionName, String rotatable, String bundleId, String app, String platformName,
String platformVersion, String deviceName, String deviceID, String appiumUrl) throws MalformedURLException {
System.out.println("In IOS Driver ");
// Set capabilities
capabilitiesForAppium.setCapability(MobileCapabilityType.AUTOMATION_NAME, ExecutionName);
capabilitiesForAppium.setCapability(MobileCapabilityType.NEW_COMMAND_TIMEOUT, "300000");
capabilitiesForAppium.setCapability(MobileCapabilityType.ROTATABLE,
rotatable.equalsIgnoreCase("true") == true ? true : false);
capabilitiesForAppium.setCapability("rotatable", true);
// capabilitiesForAppium.setCapability(MobileCapabilityType.BROWSER_NAME,"safari");
capabilitiesForAppium.setCapability(MobileCapabilityType.APP,
System.getProperty("user.dir") + "/Test.ipa");
capabilitiesForAppium.setCapability("bundleId", bundleId);
// capabilitiesForAppium.setCapability("autoAcceptAlerts", true);
capabilitiesForAppium.setCapability(MobileCapabilityType.FULL_RESET, true);
capabilitiesForAppium.setCapability(MobileCapabilityType.PLATFORM_NAME, platformName);
capabilitiesForAppium.setCapability(MobileCapabilityType.PLATFORM_VERSION, platformVersion);
capabilitiesForAppium.setCapability(MobileCapabilityType.DEVICE_NAME, deviceName);
capabilitiesForAppium.setCapability("maxTypingFrequency",3000);
capabilitiesForAppium.setCapability("xcodeConfigFile",
System.getProperty("user.dir") + "/resources/XCode_Config.xcconfig");
capabilitiesForAppium.setCapability("udid", deviceID);
if (!service_url.equals("Blank")) {
appiumDriver = new IOSDriver(new URL(service_url), capabilitiesForAppium);
} else {
appiumDriver = new IOSDriver(new URL(appiumUrl), capabilitiesForAppium);
}
}
For each @Test annotation, @BeforeMethod and @AfterMethod will be initiated. So irrespective of the status of the test case, Appium will start