python+appium自動化測試-Appium并發(fā)測試之端口檢測和釋放

來自APP Android端自動化測試初學者的筆記,寫的不對的地方大家多多指教哦

什么是socket?

網(wǎng)絡上的兩個程序通過一個雙向的通信連接實現(xiàn)數(shù)據(jù)的交換,這個連接的一端稱為一個socket。建立網(wǎng)絡通信連接至少要一對端口號(socket)。

例如當你用瀏覽器打開百度主頁時,你的瀏覽器會創(chuàng)建一個socket并命令它去連接百度的服務器主機,服務器也對客戶端的請求創(chuàng)建一個socket進行監(jiān)聽。兩端使用各自的socket來發(fā)送和接收信息。在socket通信的時候,每個socket都被綁定到一個特定的IP地址和端口。

一、檢測端口是否被占用

代碼實現(xiàn)

# 檢測appium端口是否被占用
import socket

def check_port_use(host, port):
    """檢測指定的端口是否被占用"""
    # 創(chuàng)建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

# 測試函數(shù),在實際運行過程中可以注釋
if __name__ == '__main__':
    host = '127.0.0.1'
    port = 4723
    check_port_use(host, port)

當端口可以使用時,控制臺輸出如下:此時說明服務端沒有開啟這個端口服務,所以可用。

image.png

當端口不能使用時,控制臺輸出如下:此時說明服務端已經(jīng)開啟這個端口服務,所以該端口被占用。

image.png

對以上代碼封裝成類

# 見測appium端口是否被占用
import socket

class CheckPortUse:

    """檢測指定的端口是否被占用"""
    def use_port(self, host, port):
        # 創(chuàng)建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

# 測試函數(shù),在實際運行過程中可以注釋
if __name__ == '__main__':
    host = '127.0.0.1'
    port = 4723
    check_port = CheckPortUse()
    check_port.use_port(host, port)

二、釋放占用的端口

代碼實現(xiàn)

# 釋放被占用的appium端口
import os

def release_port(port):
    """釋放指定的端口"""
    # 查找對應端口的pid
    cmd_find = 'netstat -aon | findstr %s' % port
    print(cmd_find)
    # 返回命令執(zhí)行后的結(jié)果
    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)

# 測試函數(shù),在實際運行過程中可以注釋
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)
        # 返回命令執(zhí)行后的結(jié)果
        result = os.popen(cmd_find).read()
        print(result)

        # 如果端口被占用,則發(fā)送指令釋放端口
        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)
        # 若端口沒有被占用,則輸出以下內(nèi)容
        else:
            print('port %s is available !' % port)

# 測試函數(shù),在實際運行過程中可以注釋
if __name__ == '__main__':
    # host = '127.0.0.1'
    port = 4723
    check_port_release = CheckPortRelease()
    check_port_release.release_port(port)

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容