我有一个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彼此不顺利吗?
答案 0 :(得分:0)
这可能是由您的导入问题引起的。您导入的问题可能是因为TeamCity调用MonkeyRunner的方式。我猜它与当前目录混乱有关。尝试使用
import os
os.chdir("path")
更改.py脚本顶部的当前目录。 (在导入monkeyrunner之前)我会尝试将其更改为使用MonkeyRunner的目录。
答案 1 :(得分:0)
在一位同事和我调查了这个问题三天之后,我们找不到这个问题的根源。但是当我们使用另一台机器作为构建代理时,问题就消失了。我们仍然不知道是什么导致了这个NullPointerException。