1、部署好本地的qta环境,部署远程机器的qta环境,发现报错,具体为
了解到qti的Q&A里面有解决方法,按照方法试了很多遍,都不行。
后来第二天又直接删除那三个文件,重启,然后执行用例,发现又可以了。
但是后来自己又直接删除那三个文件,重启,执行用例,又不能通过了,这个问题太随机了。
而且考虑到,后期真的用上了这个框架,必须保持100%稳定性。这个问题必须解决,解决不了,也必须换方案。要不然责任担不起啊。
问腾讯测开,他们也没什么好建议。
只能自己去分析,首先查看出错位置
class DeviceResource(object):
'''设备资源
'''
def __init__(self, host, port, udid, is_simulator, name, version, csst_uri=None, resource_id=None):
if host == socket.gethostbyname(socket.gethostname()): #这行出错
host = DEFAULT_ADDR
self._host = host
self._port = port
self._udid = udid
self._name = name
self._version = version
if csst_uri:
self._ws_uri = "ws://%s/proxy/control-%s" % (csst_uri, udid)
else:
self._ws_uri = None
self._driver_url = 'http://%s:%d' % (host, port)
self._is_sim = is_simulator
self._resource_id = resource_id
那我就去命令行输出socket.gethostname()和socket.gethostbyname(socket.gethostname())
发现第一个是输出hostname,没什么问题,第二个输出就是错误。那看来找到问题了。就是这个地方有问题。
怎么解决?
腾讯测开说是域名问题,那我首先查看电脑ip。
通过这句可以看到ip ifconfig | grep "inet " | grep -v 127.0.0.1
发现我自己电脑是一个ip,测试机有两台ip
向腾讯测开询问了下,知道169是个假的ip地址。刚开始还以为问题在这,但是发现他们的解决方法都是硬件
还是不对,那思路回到出错的语句。于是:
Google搜socket.gethostbyname(socket.gethostname()) gaierror: [Errno 8] nodename nor servname provided, or not known
第一个stock overflow点击去。
看到
点击这个地址
按照他说的,我先终端输出hostname,然后记下hostname,然后执行ping hostname值,发现确实报错和里面提到的一样,有希望了。于是按照他的步骤操作
I’ve tried the following:
Rebooting.
Switching off the Firewall.
Changing my local hostname, using System Preferences > Sharing > Edit.
sudo killall -HUP mDNSResponder
dscacheutil -flushcache
sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist
这样操作之后,执行
ping hostname值,发现报错和之前一样,于是看下面回到,找到一个提示
于是我把文件分享打开,然后再ping
正常了。完美解决问题。
满怀信心的去执行用例,发现它启动了虚拟器ipad,我明明连着手机。
但是发现手机跳出一个弹框,提示我信任手机。我再次执行,还是调ipad,但是又跳信任弹窗。
第三次我再执行,终于连手机了。
这个问题困扰很久了。后来也是自己分析,这个问题必须解决,不能随机,要不然后面影响太大了。最终解决。