Airtest icon indicating copy to clipboard operation
Airtest copied to clipboard

批量执行用例,1.经常出现OSError: socket connection broken,2.手机会变卡直到卡死

Open wenhuichen opened this issue 3 years ago • 6 comments

描述问题bug python环境,使用run_script(args, ComicAirtestCase)批量执行用例(比如100个): 1、经常出现OSError: socket connection broken 2、执行到30~40个时,手机会变得很卡,停止执行后会恢复

(执行结束时发现,如执行了N个用例就会, 日志1, N条,例如:: [06:14:17][DEBUG]<airtest.core.android.rotation> orientationWatcher has ended [06:14:17][DEBUG]<airtest.core.android.rotation> orientationWatcher has ended 日志2,2N条,tcp:端口号不同,例如: [06:14:17][DEBUG]<airtest.core.android.adb> /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/airtest/core/android/static/adb/mac/adb -P 5037 -s 8LW4MFYTJF5H9DEA forward --remove tcp:12741 [06:14:17][DEBUG]<airtest.core.android.adb> /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/airtest/core/android/static/adb/mac/adb -P 5037 -s 8LW4MFYTJF5H9DEA forward --remove tcp:17306 [06:14:17][DEBUG]<airtest.core.android.adb> /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/airtest/core/android/static/adb/mac/adb -P 5037 -s 8LW4MFYTJF5H9DEA forward --remove tcp:17355 [06:14:17][DEBUG]<airtest.core.android.adb> /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/airtest/core/android/static/adb/mac/adb -P 5037 -s 8LW4MFYTJF5H9DEA forward --remove tcp:12430 )

OSError: socket connection broken日志信息:

test_case_path: /Users/chenwenhui/comic-ui-auto-test/manga_ui_version_regression/air/test_reader/continue_reading_comic.air
save log in '/Users/chenwenhui/comic-ui-auto-test/manga_ui_version_regression/log/8LW4MFYTJF5H9DEA/continue_reading_comic8/log'
[05:49:56][INFO]<airtest.report.report> /Users/chenwenhui/comic-ui-auto-test/manga_ui_version_regression/report/log_to_html/8LW4MFYTJF5H9DEA/continue_reading_comic.log/log.html
[05:49:56][DEBUG]<airtest.core.android.adb> /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/airtest/core/android/static/adb/mac/adb -P 5037 -s 8LW4MFYTJF5H9DEA wait-for-device
[05:49:56][DEBUG]<airtest.core.android.adb> /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/airtest/core/android/static/adb/mac/adb -P 5037 -s 8LW4MFYTJF5H9DEA shell getprop ro.build.version.sdk
[05:49:56][WARNING]<airtest.core.api> Device:8LW4MFYTJF5H9DEA updated <airtest.core.android.android.Android object at 0x7f9213800eb8> -> <airtest.core.android.android.Android object at 0x7f9213514d68>
[05:49:56][DEBUG]<airtest.core.android.adb> /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/airtest/core/android/static/adb/mac/adb -P 5037 -s 8LW4MFYTJF5H9DEA shell am force-stop com.bilibili.comic
======restart comic app======
[05:49:58][DEBUG]<airtest.core.android.adb> /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/airtest/core/android/static/adb/mac/adb -P 5037 -s 8LW4MFYTJF5H9DEA shell monkey -p com.bilibili.comic -c android.intent.category.LAUNCHER 1
[05:50:07][INFO]<airtest.core.api> Try finding: Template(/Users/chenwenhui/comic-ui-auto-test/manga_ui_version_regression/air/test_reader/next_episode_previous_episode.air/tpl1615277307221.png)
[05:50:07][DEBUG]<airtest.core.android.adb> /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/airtest/core/android/static/adb/mac/adb -P 5037 -s 8LW4MFYTJF5H9DEA shell ls /data/local/tmp/minicap
[05:50:07][DEBUG]<airtest.core.android.adb> /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/airtest/core/android/static/adb/mac/adb -P 5037 -s 8LW4MFYTJF5H9DEA shell ls /data/local/tmp/minicap.so
[05:50:07][DEBUG]<airtest.core.android.adb> /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/airtest/core/android/static/adb/mac/adb -P 5037 -s 8LW4MFYTJF5H9DEA shell LD_LIBRARY_PATH=/data/local/tmp /data/local/tmp/minicap -v 2>&1
[05:50:08][DEBUG]<airtest.core.android.minicap> version:6
[05:50:08][DEBUG]<airtest.core.android.minicap> skip install minicap
[05:50:08][DEBUG]<airtest.core.android.adb> /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/airtest/core/android/static/adb/mac/adb -P 5037 -s 8LW4MFYTJF5H9DEA forward --no-rebind tcp:14249 localabstract:minicap_14249
[05:50:08][DEBUG]<airtest.core.android.adb> /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/airtest/core/android/static/adb/mac/adb -P 5037 -s 8LW4MFYTJF5H9DEA shell pm path jp.co.cyberagent.stf.rotationwatcher
[05:50:08][DEBUG]<airtest.core.android.adb> /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/airtest/core/android/static/adb/mac/adb -P 5037 -s 8LW4MFYTJF5H9DEA shell export CLASSPATH=/data/app/jp.co.cyberagent.stf.rotationwatcher-fJfBdbHE_R23t7Q54DGzfw==/base.apk;exec app_process /system/bin jp.co.cyberagent.stf.rotationwatcher.RotationWatcher
[05:50:10][DEBUG]<airtest.core.android.adb> /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/airtest/core/android/static/adb/mac/adb -P 5037 -s 8LW4MFYTJF5H9DEA shell LD_LIBRARY_PATH=/data/local/tmp /data/local/tmp/minicap -i
[05:50:11][DEBUG]<airtest.core.android.adb> /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/airtest/core/android/static/adb/mac/adb -P 5037 -s 8LW4MFYTJF5H9DEA shell dumpsys window displays
[05:50:11][DEBUG]<airtest.core.android.adb> /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/airtest/core/android/static/adb/mac/adb -P 5037 -s 8LW4MFYTJF5H9DEA shell LD_LIBRARY_PATH=/data/local/tmp /data/local/tmp/minicap -n 'minicap_14249' -P 1080x2340@1080x2340/0 -l 2>&1
[05:50:11][DEBUG]<airtest.utils.nbsp> [minicap_server]b'PID: 4977'
[05:50:11][DEBUG]<airtest.utils.nbsp> [minicap_server]b'INFO: Using projection 1080x2340@1080x2340/0'
[05:50:11][DEBUG]<airtest.utils.nbsp> [minicap_server]b'INFO: (external/MY_minicap/src/minicap_29.cpp:241) Creating SurfaceComposerClient'
[05:50:11][DEBUG]<airtest.utils.nbsp> [minicap_server]b'INFO: (external/MY_minicap/src/minicap_29.cpp:244) Performing SurfaceComposerClient init check'
[05:50:11][DEBUG]<airtest.utils.nbsp> [minicap_server]b'INFO: (external/MY_minicap/src/minicap_29.cpp:255) Creating virtual display'
[05:50:11][DEBUG]<airtest.utils.nbsp> [minicap_server]b'INFO: (external/MY_minicap/src/minicap_29.cpp:261) Creating buffer queue'
[05:50:11][DEBUG]<airtest.utils.nbsp> [minicap_server]b'INFO: (external/MY_minicap/src/minicap_29.cpp:264) Setting buffer options'
[05:50:11][DEBUG]<airtest.utils.nbsp> [minicap_server]b'INFO: (external/MY_minicap/src/minicap_29.cpp:268) Creating CPU consumer'
[05:50:11][DEBUG]<airtest.utils.nbsp> [minicap_server]b'INFO: (external/MY_minicap/src/minicap_29.cpp:272) Creating frame waiter'
[05:50:11][DEBUG]<airtest.utils.nbsp> [minicap_server]b'INFO: (external/MY_minicap/src/minicap_29.cpp:276) Publishing virtual display'
[05:50:12][DEBUG]<airtest.utils.nbsp> [minicap_server]b'INFO: (jni/minicap/JpgEncoder.cpp:64) Allocating 7678980 bytes for JPG encoder'
[05:50:12][DEBUG]<airtest.utils.nbsp> [minicap_server]b'INFO: (jni/minicap/minicap.cpp:489) Server start'
[05:50:12][DEBUG]<airtest.core.android.minicap> (1, 24, 4977, 1080, 2340, 1080, 2340, 0, 2)
[05:50:12][DEBUG]<airtest.utils.nbsp> [minicap_server]b'INFO: (jni/minicap/minicap.cpp:492) New client connection'
[05:50:16][DEBUG]<airtest.utils.nbsp> [minicap_server]b'INFO: (jni/minicap/minicap.cpp:128) [adolli] @pumps send error, ret=-1'
[05:50:16][DEBUG]<airtest.utils.nbsp> [minicap_server]b'INFO: (jni/minicap/minicap.cpp:129) [adolli] @pumps errno=14'
[05:50:16][DEBUG]<airtest.utils.nbsp> [minicap_server]b'INFO: (jni/minicap/minicap.cpp:611) send error,close connection'
[05:50:16][DEBUG]<airtest.utils.nbsp> [minicap_server]b'INFO: (jni/minicap/minicap.cpp:619) Closing client connection'
[05:50:18][DEBUG]<airtest.core.android.adb> /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/airtest/core/android/static/adb/mac/adb -P 5037 -s 8LW4MFYTJF5H9DEA forward --no-rebind tcp:12857 localabstract:minicap_12857
[05:50:18][DEBUG]<airtest.core.android.adb> /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/airtest/core/android/static/adb/mac/adb -P 5037 -s 8LW4MFYTJF5H9DEA shell LD_LIBRARY_PATH=/data/local/tmp /data/local/tmp/minicap -i
[05:50:19][DEBUG]<airtest.core.android.adb> /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/airtest/core/android/static/adb/mac/adb -P 5037 -s 8LW4MFYTJF5H9DEA shell dumpsys window displays
[05:50:19][DEBUG]<airtest.core.android.adb> /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/airtest/core/android/static/adb/mac/adb -P 5037 -s 8LW4MFYTJF5H9DEA shell LD_LIBRARY_PATH=/data/local/tmp /data/local/tmp/minicap -n 'minicap_12857' -P 1080x2340@1080x2340/0 -l 2>&1
[05:50:20][DEBUG]<airtest.utils.nbsp> [minicap_server]b'PID: 6276'
[05:50:20][DEBUG]<airtest.utils.nbsp> [minicap_server]b'INFO: Using projection 1080x2340@1080x2340/0'
[05:50:20][DEBUG]<airtest.utils.nbsp> [minicap_server]b'INFO: (external/MY_minicap/src/minicap_29.cpp:241) Creating SurfaceComposerClient'
[05:50:20][DEBUG]<airtest.utils.nbsp> [minicap_server]b'INFO: (external/MY_minicap/src/minicap_29.cpp:244) Performing SurfaceComposerClient init check'
[05:50:20][DEBUG]<airtest.utils.nbsp> [minicap_server]b'INFO: (external/MY_minicap/src/minicap_29.cpp:255) Creating virtual display'
[05:50:20][DEBUG]<airtest.utils.nbsp> [minicap_server]b'INFO: (external/MY_minicap/src/minicap_29.cpp:261) Creating buffer queue'
[05:50:20][DEBUG]<airtest.utils.nbsp> [minicap_server]b'INFO: (external/MY_minicap/src/minicap_29.cpp:264) Setting buffer options'
[05:50:20][DEBUG]<airtest.utils.nbsp> [minicap_server]b'INFO: (external/MY_minicap/src/minicap_29.cpp:268) Creating CPU consumer'
[05:50:20][DEBUG]<airtest.utils.nbsp> [minicap_server]b'INFO: (external/MY_minicap/src/minicap_29.cpp:272) Creating frame waiter'
[05:50:20][DEBUG]<airtest.utils.nbsp> [minicap_server]b'INFO: (external/MY_minicap/src/minicap_29.cpp:276) Publishing virtual display'
[05:50:21][DEBUG]<airtest.utils.nbsp> [minicap_server]b'INFO: (jni/minicap/JpgEncoder.cpp:64) Allocating 7678980 bytes for JPG encoder'
[05:50:21][DEBUG]<airtest.utils.nbsp> [minicap_server]b'INFO: (jni/minicap/minicap.cpp:489) Server start'
[05:50:21][DEBUG]<airtest.core.android.minicap> (1, 24, 6276, 1080, 2340, 1080, 2340, 0, 2)
[05:50:21][DEBUG]<airtest.utils.nbsp> [minicap_server]b'INFO: (jni/minicap/minicap.cpp:492) New client connection'
[05:50:25][DEBUG]<airtest.utils.nbsp> [minicap_server]b'INFO: (jni/minicap/minicap.cpp:128) [adolli] @pumps send error, ret=-1'
[05:50:25][DEBUG]<airtest.utils.nbsp> [minicap_server]b'INFO: (jni/minicap/minicap.cpp:129) [adolli] @pumps errno=14'
[05:50:25][DEBUG]<airtest.utils.nbsp> [minicap_server]b'INFO: (jni/minicap/minicap.cpp:611) send error,close connection'
[05:50:25][DEBUG]<airtest.utils.nbsp> [minicap_server]b'INFO: (jni/minicap/minicap.cpp:619) Closing client connection'
======tearDown todo======
======================================================================
ERROR: runTest (__main__.ComicAirtestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/airtest/core/android/minicap.py", line 25, in wrapper
    return func(inst, *args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/airtest/core/android/minicap.py", line 364, in get_frame_from_stream
    return six.next(self.frame_gen)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/airtest/utils/threadsafe.py", line 23, in __next__
    return self._next()
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/airtest/core/android/minicap.py", line 297, in _get_stream
    frame_data = s.recv(frame_size)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/airtest/utils/safesocket.py", line 32, in recv
    raise socket.error("socket connection broken")
OSError: socket connection broken

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/airtest/cli/runner.py", line 70, in runTest
    exec(compile(code.encode("utf-8"), pyfilepath, 'exec'), self.scope)
  File "/Users/chenwenhui/comic-ui-auto-test/manga_ui_version_regression/air/test_reader/continue_reading_comic.air/continue_reading_comic.py", line 15, in <module>
    touch(Template(r"tpl1615277307221.png", record_pos=(0.125, 0.812), resolution=(750, 1334)))
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/airtest/utils/logwraper.py", line 90, in wrapper
    res = f(*args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/airtest/core/api.py", line 352, in touch
    pos = loop_find(v, timeout=ST.FIND_TIMEOUT)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/airtest/utils/logwraper.py", line 90, in wrapper
    res = f(*args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/airtest/core/cv.py", line 59, in loop_find
    screen = G.DEVICE.snapshot(filename=None, quality=ST.SNAPSHOT_QUALITY)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/airtest/core/android/android.py", line 267, in snapshot
    screen = self.minicap.get_frame_from_stream()
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/airtest/core/android/minicap.py", line 28, in wrapper
    return func(inst, *args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/airtest/core/android/minicap.py", line 364, in get_frame_from_stream
    return six.next(self.frame_gen)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/airtest/utils/threadsafe.py", line 23, in __next__
    return self._next()
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/airtest/core/android/minicap.py", line 297, in _get_stream
    frame_data = s.recv(frame_size)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/airtest/utils/safesocket.py", line 32, in recv
    raise socket.error("socket connection broken")
OSError: socket connection broken

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/airtest/cli/runner.py", line 72, in runTest
    log(err, desc="Final Error", snapshot=True)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/airtest/core/helper.py", line 104, in log
    try_log_screen(depth=2)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/airtest/utils/logwraper.py", line 90, in wrapper
    res = f(*args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/airtest/core/cv.py", line 103, in try_log_screen
    screen = G.DEVICE.snapshot(quality=quality)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/airtest/core/android/android.py", line 267, in snapshot
    screen = self.minicap.get_frame_from_stream()
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/airtest/core/android/minicap.py", line 25, in wrapper
    return func(inst, *args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/airtest/core/android/minicap.py", line 364, in get_frame_from_stream
    return six.next(self.frame_gen)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/airtest/utils/threadsafe.py", line 23, in __next__
    return self._next()
StopIteration

----------------------------------------------------------------------
Ran 1 test in 30.853s

FAILED (errors=1)

相关截图 1

复现步骤 用例点击图片时如: touch(Template(r"tpl1615277307221.png", record_pos=(0.125, 0.812), resolution=(750, 1334)))

预期效果 不出现,socket connection broken

python 版本: 3.7.2 airtest 版本: 1.1.8

设备:

  • 型号: [OPPO A9 、华为x10]
  • 系统: [10、10]

其他相关环境信息 macos:11.2.1

wenhuichen avatar Mar 18 '21 10:03 wenhuichen

求一个最小可重现脚本看看你的代码结构是什么样子的? 以及连的是一台手机,连续跑几十个小时么?

yimelia avatar Mar 19 '21 02:03 yimelia

求一个最小可重现脚本看看你的代码结构是什么样子的? 以及连的是一台手机,连续跑几十个小时么?

  1. 被测试app:哔哩哔哩漫画
  2. 写了2个demo case,open_classify_page.air和open_points_mall.air;批量执行脚本run_case.py ,每个用例执行50次,见附件test_demo.zip。
  3. 一台华为x10,pycharm中运行测试了一下,第1个用例open_points_mall.air执行到第31次的时候(1 2分钟左右),开始报OSError: socket connection broken,同时手机开始变卡,运行日志见附件run.log

test_demo.zip run.log

wenhuichen avatar Mar 19 '21 10:03 wenhuichen

这个问题解决了吗? 我在一台手机正常执行脚本的情况下, 另外打开一个窗口输入adb devices,原来正常执行中的脚本就会报类似错误:

10:32:16][DEBUG]<airtest.utils.nbsp> [javacap_sever]b''
Unhandled exception in thread started by <function start_get_screen at 0x136aca290>
Traceback (most recent call last):
  File "main.py", line 78, in start_get_screen
    frame = javacap.get_frame_from_stream()
  File "/usr/local/lib/python3.7/site-packages/airtest/core/android/javacap.py", line 103, in get_frame_from_stream
    return self.frame_gen.send(None)
  File "/usr/local/lib/python3.7/site-packages/airtest/utils/threadsafe.py", line 27, in send
    return self.it.send(*args)
  File "/usr/local/lib/python3.7/site-packages/airtest/core/android/javacap.py", line 77, in get_frames
    header = s.recv(4)
  File "/usr/local/lib/python3.7/site-packages/airtest/utils/safesocket.py", line 32, in recv
    raise socket.error("socket connection broken")
OSError: socket connection broken

NightFog007 avatar May 18 '21 02:05 NightFog007

同问

bs111 avatar Jun 07 '21 12:06 bs111

用模拟器,我也发现越用越慢,即使是改了策略关闭一个,重新开启另外一个还是没有什么改善

my-autoxuexi avatar Aug 02 '21 03:08 my-autoxuexi

是不是初始化太多次AndroidPoco导致的?

heione avatar Sep 23 '21 07:09 heione