当前位置: 首页 > 工具软件 > LDTP > 使用案例 >

发现使用LDTP创建连接后,如果中断无法重新修复该连接的问题

沈飞跃
2023-12-01

由于最近工作需求,需要测试linux(client)上的桌面云产品,因此将之前的windows平台的测试脚本移植到linux平台。
在解决了一大堆依赖的问题后,重写了linux端的log和dmp的收集方法后,终于能走起一次了。
结果发生了ldtp访问的问题,而且问题还特别奇怪。
我的测试是重复连接远程云桌面500次,第一次连接都非常顺利,但是登出后第二次连接的时候,ldtp就罢工了,脚本会尝试重新连接远端的ldtp10次,第一次socket返回104,之后就什么都不返回了。
我开了新的python来检测该远程桌面的ldtp服务。

[root@localhost Utest]# python
Python 2.7.5 (default, Jun 20 2019, 20:27:34)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux2
Type “help”, “copyright”, “credits” or “license” for more information.

import ldtp
/usr/lib/python2.7/site-packages/ldtp-3.5.0-py2.7.egg/ldtpd/core.py:29: PyGIWarning: Wnck was imported without specifying a version first. Use gi.require_version(‘Wnck’, ‘3.0’) before import to ensure that the right version gets loaded.
from gi.repository import Wnck as wnck
#设置ldtp host为 10.117.27.110:8001端口

ldtp.setHost(“10.117.27.110:8001”)
#获取桌面元素成功

ldtp.getwindowlist()
[‘paneTaskbar’, ‘frmWindows PowerShell ISE Main Window’, ‘frmC:\Windows\system32\cmd.exe’, ‘paneProgram Manager’]
#登出桌面,此时ldtp的connection已经中断了
#重新login桌面,启动新的ldtp service
#继续使用之前的ldtp object尝试获取元素,失败,报错104

ldtp.getwindowlist()
Traceback (most recent call last):
File “”, line 1, in
File “/usr/lib/python2.7/site-packages/ldtp-3.5.0-py2.7.egg/ldtp/client.py”, line 75, in call
return self.__send(self.__name, args)
File “/usr/lib64/python2.7/xmlrpclib.py”, line 1591, in __request
verbose=self.__verbose
File “/usr/lib/python2.7/site-packages/ldtp-3.5.0-py2.7.egg/ldtp/client.py”, line 146, in request
self.send_content(h, request_body)
File “/usr/lib64/python2.7/xmlrpclib.py”, line 1448, in send_content
connection.endheaders(request_body)
File “/usr/lib64/python2.7/httplib.py”, line 1037, in endheaders
self._send_output(message_body)
File “/usr/lib64/python2.7/httplib.py”, line 881, in _send_output
self.send(msg)
File “/usr/lib64/python2.7/httplib.py”, line 857, in send
self.sock.sendall(data)
File “/usr/lib64/python2.7/socket.py”, line 224, in meth
return getattr(self._sock,name)(*args)
socket.error: [Errno 104] Connection reset by peer
#retry,失败,无报错码

ldtp.getwindowlist()
Traceback (most recent call last):
File “”, line 1, in
File “/usr/lib/python2.7/site-packages/ldtp-3.5.0-py2.7.egg/ldtp/client.py”, line 75, in call
return self.__send(self.__name, args)
File “/usr/lib64/python2.7/xmlrpclib.py”, line 1591, in __request
verbose=self.__verbose
File “/usr/lib/python2.7/site-packages/ldtp-3.5.0-py2.7.egg/ldtp/client.py”, line 143, in request
self.send_request(h, handler, request_body)
File “/usr/lib64/python2.7/xmlrpclib.py”, line 1400, in send_request
connection.putrequest(“POST”, handler, skip_accept_encoding=True)
File “/usr/lib64/python2.7/httplib.py”, line 923, in putrequest
raise CannotSendRequest()
httplib.CannotSendRequest
#重新尝试建立connection,依然为10.117.27.110:8001端口

ldtp.setHost(“10.117.27.110:8001”)
#尝试获取桌面元素,失败,依然无报错码
#另外,此时观察ldtp的连接依然没有建立

ldtp.getwindowlist()
Traceback (most recent call last):
File “”, line 1, in
File “/usr/lib/python2.7/site-packages/ldtp-3.5.0-py2.7.egg/ldtp/client.py”, line 75, in call
return self.__send(self.__name, args)
File “/usr/lib64/python2.7/xmlrpclib.py”, line 1591, in __request
verbose=self.__verbose
File “/usr/lib/python2.7/site-packages/ldtp-3.5.0-py2.7.egg/ldtp/client.py”, line 143, in request
self.send_request(h, handler, request_body)
File “/usr/lib64/python2.7/xmlrpclib.py”, line 1400, in send_request
connection.putrequest(“POST”, handler, skip_accept_encoding=True)
File “/usr/lib64/python2.7/httplib.py”, line 923, in putrequest
raise CannotSendRequest()
httplib.CannotSendRequest
#尝试建立新的连接,换为0.117.27.110:8002 端口

ldtp.setHost(“10.117.27.110:8002”)
#其实此时依然没有连接,并且我推测此时ldtp的client端没有尝试连接,只是预先准备好连接参数
#我直接尝试再建立正确的连接

ldtp.setHost(“10.117.27.110:8001”)
#尝试获取桌面元素,失败,依然无报错码

ldtp.getwindowlist()
Traceback (most recent call last):
File “”, line 1, in
File “/usr/lib/python2.7/site-packages/ldtp-3.5.0-py2.7.egg/ldtp/client.py”, line 75, in call
return self.__send(self.__name, args)
File “/usr/lib64/python2.7/xmlrpclib.py”, line 1591, in __request
verbose=self.__verbose
File “/usr/lib/python2.7/site-packages/ldtp-3.5.0-py2.7.egg/ldtp/client.py”, line 143, in request
self.send_request(h, handler, request_body)
File “/usr/lib64/python2.7/xmlrpclib.py”, line 1400, in send_request
connection.putrequest(“POST”, handler, skip_accept_encoding=True)
File “/usr/lib64/python2.7/httplib.py”, line 923, in putrequest
raise CannotSendRequest()
httplib.CannotSendRequest
#再尝试建立新的连接

ldtp.setHost(“10.117.27.110:8002”)
#此次尝试用该连接获取桌面元素,因为端口号是错的,所以建立连接失败,获取元素失败,返回报错代码111

ldtp.getwindowlist()
Traceback (most recent call last):
File “”, line 1, in
File “/usr/lib/python2.7/site-packages/ldtp-3.5.0-py2.7.egg/ldtp/client.py”, line 75, in call
return self.__send(self.__name, args)
File “/usr/lib64/python2.7/xmlrpclib.py”, line 1591, in __request
verbose=self.__verbose
File “/usr/lib/python2.7/site-packages/ldtp-3.5.0-py2.7.egg/ldtp/client.py”, line 146, in request
self.send_content(h, request_body)
File “/usr/lib64/python2.7/xmlrpclib.py”, line 1448, in send_content
connection.endheaders(request_body)
File “/usr/lib64/python2.7/httplib.py”, line 1037, in endheaders
self._send_output(message_body)
File “/usr/lib64/python2.7/httplib.py”, line 881, in _send_output
self.send(msg)
File “/usr/lib64/python2.7/httplib.py”, line 843, in send
self.connect()
File “/usr/lib64/python2.7/httplib.py”, line 824, in connect
self.timeout, self.source_address)
File “/usr/lib64/python2.7/socket.py”, line 571, in create_connection
raise err
socket.error: [Errno 111] Connection refused
#尝试重新建立正确的ldtp连接

ldtp.setHost(“10.117.27.110:8001”)
#尝试获取桌面元素,成功,此时已经有了新的ldtp connection了

ldtp.getwindowlist()
[‘paneTaskbar’, ‘frmC:\Windows\system32\cmd.exe’, ‘paneProgram Manager’]

ldtp.getwindowlist()
[‘paneTaskbar’, ‘frmC:\Windows\system32\cmd.exe’, ‘paneProgram Manager’]

ldtp.getwindowlist()
[‘paneTaskbar’, ‘frmC:\Windows\system32\cmd.exe’, ‘paneProgram Manager’]

PS:
由于我之前在windows平台使用的时候,没有遇到过类似问题,只有在本次移植到linux平台才发现这个问题,因此怀疑跟ldtp版本相关,或者直说,就是ldtp2的问题

[root@localhost Utest]# pip show ldtp
DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won’t be maintained after that date. A future version of pip will drop support for Python 2.7.
Name: ldtp
Version: 3.5.0
Summary: Linux Desktop Testing Project Version 2
Home-page: http://ldtp.freesktop.org
Author: None
Author-email: None
License: GNU Lesser General Public License (LGPL)
Location: /usr/lib/python2.7/site-packages/ldtp-3.5.0-py2.7.egg
Requires: twisted
Required-by:

 类似资料: