0

所以我过去常常从 Jenkins 中调用 MonkeyRunner 脚本来连接到 USB Android 设备并运行一些自动化测试,但是 MonkeyRunner 本身相当不稳定,所以我切换到了出色的 AndroidViewClient 并将我的测试脚本移植到使用这个纯 Python API。

新的 Python 脚本在独立于 shell 调用时工作正常,但目标是从 Jenkins 调用此脚本作为构建后步骤。

我遇到的问题是与 USB Android 设备的初始连接。下面的脚本是实际测试脚本的片段 - 这是测试 USB 设备是否存在并在连接到 Android 设备之前获取其序列号的部分。这在 ubuntu shell 中运行良好,但是在从 Jenkins 'Execute Shell' 调用时无法连接。

#! /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 'Execute Shell' 构建步骤

错误:未找到设备

有趣的是,当从原始 MonkeyRunner 脚本中调用相同的片段时,它运行良好。所以我在想 MonkeyRunner 做了一些我的 Python 脚本没有做的初始设置?我不是 Python 专家,不知道如何配置 USB 设备。任何帮助表示赞赏。

4

1 回答 1

1

好的,答案真的很简单——如果 jenkins 可以利用 sdk 工具和 AndroidViewClient 路径,它会有所帮助!

sudo -Rm u:jenkins:rwx

...解决它

于 2014-02-06T14:18:05.217 回答