使用TeamCity调用时,为什么MonkeyRunner失败

时间:2011-09-06 17:54:05

标签: android teamcity monkeyrunner

我有一个monkeyrunner脚本连接到Android设备并在其上部署APK。

serial = '12345JKL'
device = MonkeyRunner.waitForConnection(deviceId=serial)
device.installPackage(path_to_apk)

当我使用Windows命令shell执行脚本时,这可以完美地工作。

"C:\dev\android\tools\monkeyrunner.bat" "C:\dev\my_script.py" -psome_parameter

问题是我希望在同一台PC上通过TeamCity(Enterprise 6.0.3)构建配置执行my_script.py:这会失败。 请在此处找到堆栈跟踪:http://pastebin.com/CjWy95c3

首先我认为TC正在搞乱脚本的参数。但来自TC构建日志的命令

[00:55:12]: Starting: "C:\dev\android\tools\monkeyrunner.bat" "C:\dev\my_script.py" -psome_parameter
in directory: C:\some_dir

与命令shell中的相同,因此当我将命令复制到命令shell时,脚本可以连接到设备并正常工作,C:\some_dir是我当前的目录。

我无法在TC之外重现此错误。

我想强调这一切都发生在同一台PC上(Win 7 x64)。该脚本在从命令shell执行时起作用,但在由TC构建配置触发时失败(始终在尝试连接到设备时)。

我想不出为什么会发生这种情况,如果有人能指出我正确的方向,我会很高兴。

非常感谢提前

编辑:事实证明问题不仅限于MonkeyRunner.waitForConnection(),而且在调用MonkeyRunner.sleep(5)时也会出现问题。 Stacktrace

可能是MonkeyRunner和TeamCity彼此不顺利吗?

2 个答案:

答案 0 :(得分:0)

这可能是由您的导入问题引起的。您导入的问题可能是因为TeamCity调用MonkeyRunner的方式。我猜它与当前目录混乱有关。尝试使用

import os
os.chdir("path")

更改.py脚本顶部的当前目录。 (在导入monkeyrunner之前)我会尝试将其更改为使用MonkeyRunner的目录。

答案 1 :(得分:0)

在一位同事和我调查了这个问题三天之后,我们找不到这个问题的根源。但是当我们使用另一台机器作为构建代理时,问题就消失了。我们仍然不知道是什么导致了这个NullPointerException。