そのため、以前は Jenkins 内から MonkeyRunner スクリプトを呼び出して USB Android デバイスに接続し、いくつかの自動テストを実行していましたが、MonkeyRunner 自体はかなり不安定だったので、素晴らしい AndroidViewClient に切り替えて、この純粋な Python API を使用するためにテスト スクリプトを移植しました。
新しい Python スクリプトは、シェルから独立して呼び出されると問題なく動作しますが、目標はビルド後のステップとして Jenkins からこのスクリプトを呼び出すことです。
私が抱えている問題は、USB Android デバイスへの初期接続です。以下のスクリプトは、実際のテスト スクリプトの一部です。これは、USB デバイスが存在するかどうかをテストし、Android デバイスに接続する前にそのシリアル番号を取得する部分です。これは、ubuntu シェルからは正常に機能しますが、Jenkins の「シェルの実行」から呼び出すと接続に失敗します。
#! /usr/bin/env python
# Import Class Files
import re
import sys
import os
import time
import commands
import signal
import subprocess
import codecs
ubuntuHome = os.getenv('HOME')
sdkRootDefault = ubuntuHome + '/dev_env/ADT/sdk'
sdkRoot = os.getenv('ANDROID_SDK_ROOT',sdkRootDefault)
platformTools = sdkRoot + '/platform-tools'
# Find the attached devices
adbcmd = platformTools + "/./adb devices |grep -v attached |grep device |head -n 1 | cut -f1"
p = subprocess.Popen(adbcmd, shell=True, stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE)
serialnoIn = (p.stdout.readline()).strip()
# No devices found then exit
if len(serialnoIn) == 0 or serialnoIn is None:
print ("ERROR: No devices found")
sys.exit(1)
print "INFO: Trying Connection to " + serialnoIn + "..."
Ubuntu Shell からの出力は次のとおりです。
情報: 3a005473 に接続しようとしています...
Jenkinsの「シェルの実行」ビルドステップから
エラー: デバイスが見つかりません
興味深いことに、元の MonkeyRunner スクリプト内からこの同じスニペットを呼び出すと、問題なく動作しました。それで、MonkeyRunner は私の Python スクリプトが行っていない初期設定を行うと考えていますか? USB デバイスの設定方法を知るには、Python の専門家ではありません。どんな助けでも大歓迎です。