Jenkins stops job when restart test app

I’m working with Jenkins, Appium and Ant. When I start the the test by Ant via Terminal, everything run smooth. But, when I start the test by invoking Ant via Jenkins, I notice that Jenkins force-stop the app instead of restart it (tested on real Android devices and Genymotion).

I found that something weird in the logs at the moment the app restarts, the test app is launched but it is killed by Jenkins, the Appium server responds DETELE instead of GET if I start the test via Jenkins:

Terminal:

[debug] [ADB] 1 device(s) connected
[debug] [ADB] Running /Users/xxx/Library/Android/sdk/platform- tools/adb with args: ["-P",5037,"-s","192.168.57.101:5555","shell","am","start","-n","com.xxx/im.actor.XXXActivity","-a","android.intent.action.MAIN","-c","android.intent.category.LAUNCHER","-f","0x10200000"]
[Appium] New AndroidDriver session created successfully, session d813f8ab-37c1-4f66-8b70-3008eb833c77 added to master session list
[MJSONWP] Responding to client with driver.createSession() result: {"platform":"LINUX","webSto...
[HTTP] <-- POST /wd/hub/session 200 3205 ms - 881 
[HTTP] --> POST /wd/hub/session/d813f8ab-37c1-4f66-8b70-3008eb833c77/timeouts {"type":"implicit","ms":10000}
[MJSONWP] Calling AppiumDriver.timeouts() with args: ["implicit",10000,"d813f8ab...
[debug] [BaseDriver] Set implicit wait to 10000ms
[MJSONWP] Responding to client with driver.timeouts() result: null
[HTTP] <-- POST /wd/hub/session/d813f8ab-37c1-4f66-8b70-3008eb833c77/timeouts 200 3 ms - 76 
[HTTP] --> GET /wd/hub/session/d813f8ab-37c1-4f66-8b70-3008eb833c77/appium/device/current_activity {}
[MJSONWP] Calling AppiumDriver.getCurrentActivity() with args: ["d813f8ab-37c1-4f66-8b70-3...
[debug] [ADB] Getting focused package and activity
[debug] [ADB] Getting connected devices...
[debug] [ADB] 1 device(s) connected
[debug] [ADB] Running /Users/xxx/Library/Android/sdk/platform-tools/adb with args: ["-P",5037,"-s","192.168.57.101:5555","shell","dumpsys","window","windows"]
[MJSONWP] Responding to client with driver.getCurrentActivity() result: "im.actor.SplashActivity"

Jenkins:

[testng] [debug] [ADB] 1 device(s) connected
[testng] [debug] [ADB] Running /Users/xxxx/Library/Android/sdk/platform-tools/adb with args: ["-P",5037,"-s","192.168.57.101:5555","shell","am","start","-n","com.xxx/im.actor.XXXXActivity","-a","android.intent.action.MAIN","-c","android.intent.category.LAUNCHER","-f","0x10200000"]
[testng] [Appium] New AndroidDriver session created successfully, session 464902e9-5406-4d1e-915e-d4fad4e39da8 added to master session list
[testng] [MJSONWP] Responding to client with driver.createSession() result: {"platform":"LINUX","webSto...
[testng] [HTTP] <-- POST /wd/hub/session 200 3865 ms - 881 
[testng] [HTTP] --> POST /wd/hub/session/464902e9-5406-4d1e-915e-d4fad4e39da8/timeouts {"type":"implicit","ms":20000}
[testng] [MJSONWP] Calling AppiumDriver.timeouts() with args: ["implicit",20000,"464902e9...
[testng] [debug] [BaseDriver] Set implicit wait to 20000ms
[testng] [MJSONWP] Responding to client with driver.timeouts() result: null
[testng] [HTTP] <-- POST /wd/hub/session/464902e9-5406-4d1e-915e-d4fad4e39da8/timeouts 200 4 ms - 76 
[testng] [HTTP] --> DELETE /wd/hub/session/464902e9-5406-4d1e-915e-d4fad4e39da8 {}
[testng] [MJSONWP] Calling AppiumDriver.deleteSession() with args: ["464902e9-5406-4d1e-915e-d...
[testng] [debug] [AndroidDriver] Shutting down Android driver
[testng] [debug] [ADB] Getting connected devices...
[testng] [debug] [ADB] 1 device(s) connected
[testng] [debug] [ADB] Running /Users/xxxx/Library/Android/sdk/platform-tools/adb with args: ["-P",5037,"-s","192.168.57.101:5555","shell","am","force-stop","com.xxx"]

I’m very appreciate if someone give me any advices for this case.

you running different tests. according to logs:

[debug] [BaseDriver] Set implicit wait to 10000ms
vs
[testng] [debug] [BaseDriver] Set implicit wait to 20000ms

double check that both your tests are same. How you restart app?

They are the same, I just adjust the time.
I used adb force stop then adb launch the test app.

How you restart app?

I use java to execute adb force stop then adb launch. I’m not have my Mac right now. I will reply with my full code in next 12 hours if you need.

Here is my detail code to restart my test app:

String cmd = "adb shell am force-stop com.xxxx";
Runtime run = Runtime.getRuntime();
run.exec(cmd);
Thread.sleep(2000);
cmd = "adb shell am start -n com.xxxx/im.actor.xxxxActivity";
run.exec(cmd);
Thread.sleep(2000);

I resolved this issue. Using restart app function by Appium.

just wanted suggest the same with driver.restartApp

I’m using driver.closeApp then driver.launchApp to restart the test App. It’s cool to have driver.restartApp :slight_smile:

driver.closeApp may cause to driver quit. (with iOS 100%)

Noted this. Thanks for your information.