来自APP Android端自动化测试初学者的笔记,写的不对的地方大家多多指教哦
什么是socket?
网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。建立网络通信连接至少要一对端口号(socket)。
例如当你用浏览器打开百度主页时,你的浏览器会创建一个socket并命令它去连接百度的服务器主机,服务器也对客户端的请求创建一个socket进行监听。两端使用各自的socket来发送和接收信息。在socket通信的时候,每个socket都被绑定到一个特定的IP地址和端口。
一、检测端口是否被占用
代码实现
# 检测appium端口是否被占用
import socket
def check_port_use(host, port):
"""检测指定的端口是否被占用"""
# 创建socket对象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
s.connect((host, port))
s.shutdown(2)
except OSError as msg:
print('port %s is available! ' % port)
print(msg)
return True
else:
print('port %s already be in use !' % port)
return False
# 测试函数,在实际运行过程中可以注释
if __name__ == '__main__':
host = '127.0.0.1'
port = 4723
check_port_use(host, port)
当端口可以使用时,控制台输出如下:此时说明服务端没有开启这个端口服务,所以可用。
image.png当端口不能使用时,控制台输出如下:此时说明服务端已经开启这个端口服务,所以该端口被占用。
image.png对以上代码封装成类
# 见测appium端口是否被占用
import socket
class CheckPortUse:
"""检测指定的端口是否被占用"""
def use_port(self, host, port):
# 创建socket对象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 检测是否被占用
try:
s.connect((host, int(port)))
s.shutdown(2)
# 未占用
except OSError as msg:
print('port %s is available! ' % port)
print(msg)
return True
# 端口被占用
else:
print('port %s already be in use !' % port)
return False
# 测试函数,在实际运行过程中可以注释
if __name__ == '__main__':
host = '127.0.0.1'
port = 4723
check_port = CheckPortUse()
check_port.use_port(host, port)
二、释放占用的端口
代码实现
# 释放被占用的appium端口
import os
def release_port(port):
"""释放指定的端口"""
# 查找对应端口的pid
cmd_find = 'netstat -aon | findstr %s' % port
print(cmd_find)
# 返回命令执行后的结果
result = os.popen(cmd_find).read()
print(result)
if str(port) and 'LISTENING' in result:
# 获取端口对应的pid进程
i = result.index('LISTENING')
start = i + (len('LISTENING') + 7)
end = result.index('\\n')
pid = result[start:end]
# 关闭被占用端口的pid
cmd_kill = ('taskkill -f -pid {0}'.format(str(pid)))
print(cmd_kill)
os.popen(cmd_kill)
else:
print('port %s is available !' % port)
# 测试函数,在实际运行过程中可以注释
if __name__ == '__main__':
host = '127.0.0.1'
port = 4723
release_port(port)
当端口被释放后,控制台输出如下:此时说明服务端的端口已被释放,可以使用。
image.png对以上代码封装成类
# 释放被占用的appium端口
import os
class CheckPortRelease:
"""释放指定的端口"""
def release_port(self, port):
# 查找对应端口的pid
cmd_find = ('netstat -aon | findstr %s' % port)
print(cmd_find)
# 返回命令执行后的结果
result = os.popen(cmd_find).read()
print(result)
# 如果端口被占用,则发送指令释放端口
if str(port) and 'LISTENING' in result:
# 获取端口对应的pid进程
i = result.index('LISTENING')
start = i + (len('LISTENING') + 7)
end = result.index('\\n')
pid = result[start:end]
# 关闭被占用端口的pid
cmd_kill = ('taskkill -f -pid {0}'.format(str(pid)))
print(cmd_kill)
os.popen(cmd_kill)
# 若端口没有被占用,则输出以下内容
else:
print('port %s is available !' % port)
# 测试函数,在实际运行过程中可以注释
if __name__ == '__main__':
# host = '127.0.0.1'
port = 4723
check_port_release = CheckPortRelease()
check_port_release.release_port(port)
网友评论