我有一个在Jenkins管道上运行的Python脚本。该脚本读取JSON文件,然后使用ADB执行UI测试。
如果仅运行ADB命令,则该命令将成功执行。但是,当我执行管道时,会引发错误。奇怪的是,该错误是在其他打印之前记录的。。。这是怎么回事?
詹金斯记录:
+ python run_tests.py Login
onError: commandError=true message=INSTRUMENTATION_FAILED: com.myproj.adhoctest.test/com.myproj.MyprojTestRunner
android.util.AndroidException: INSTRUMENTATION_FAILED: com.myproj.adhoctest.test/com.myproj.MyprojTestRunner
at com.android.commands.am.Instrument.run(Instrument.java:486)
at com.android.commands.am.Am.runInstrument(Am.java:194)
at com.android.commands.am.Am.onRun(Am.java:80)
at com.android.internal.os.BaseCommand.run(BaseCommand.java:54)
at com.android.commands.am.Am.main(Am.java:50)
at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:340)
INSTRUMENTATION_STATUS: Error=Unable to find instrumentation info for: ComponentInfo{com.myproj.adhoctest.test/com.myproj.MyprojTestRunner}
INSTRUMENTATION_STATUS: id=ActivityManagerService
INSTRUMENTATION_STATUS_CODE: -1
Running testcase: LoginScreenshot
/usr/local/bin/adb shell am instrument -w -r -e debug false -e executeScreenshots true -e class 'com.myproj.screenshot.LoginScreenshot' com.myproj.adhoctest.test/com.myproj.MyprojTestRunner
Jenkinsfile(的一部分):
stage('Generate screenshots') {
steps {
sh '''
cat > run_tests.py << EOF1
import json
import sys
import subprocess
screensList = sys.argv[1].split(',')
with open('results.json') as json_file:
data = json.load(json_file)
for screen in screensList:
for item in data['Items']:
if screen == item['screen']['S']:
for test in item['android']['L']:
testClass = test['S']
print('Running testcase: ' + testClass)
cmd = "/usr/local/bin/adb shell am instrument -w -r -e debug false -e executeScreenshots true -e class 'com.myproj.screenshot.TEST_CLASS' com.myproj.adhoctest.test/com.myproj.MyprojTestRunner".replace('TEST_CLASS', testClass)
print(cmd)
subprocess.call(cmd, shell=True)
EOF1
'''
sh '''
function change_locale {
echo "Changing device locale to $1"
/usr/local/bin/adb shell "setprop persist.sys.locale $1; stop; start"
sleep 20
}
function generate_specific_screenshots {
change_locale $1
python run_tests.py "$SCREENS"
}
generate_specific_screenshots $USER_LOCALE
'''
}
}
答案 0 :(得分:0)
测试失败,因为该应用的构建方式不正确。
要构建APK,必须使用以下命令:
./gradlew clean assembleAdhoctestDebug assembleAdhoctestDebugAndroidTest
这将生成两个APK,这两个APK必须都安装在模拟器中。
/usr/local/bin/adb root
/usr/local/bin/adb push app/build/outputs/apk/adhoctest/debug/app-adhoctest-debug.apk /data/local/tmp/com.myproj.adhoctest
/usr/local/bin/adb shell pm install -t -r "/data/local/tmp/com.myproj.adhoctest"
/usr/local/bin/adb push app/build/outputs/apk/androidTest/adhoctest/debug/app-adhoctest-debug-androidTest.apk /data/local/tmp/com.myproj.adhoctest.test
/usr/local/bin/adb shell pm install -t -r "/data/local/tmp/com.myproj.adhoctest.test"