1. 程式人生 > >DJANGO+PYTHON+SELENIUM實現版本釋出後,呼叫自動化指令碼來驗證釋出釋出環境

DJANGO+PYTHON+SELENIUM實現版本釋出後,呼叫自動化指令碼來驗證釋出釋出環境

背景:公司在釋出版本的時候,需要維護幾百臺伺服器,往每個伺服器上面部署相同的應用。釋出完成後,需要測試對每個環境進行相同的環境,目前的測試驗證是手工進行的。最近公司要實現這麼個功能,讓我自動化處理環境驗證,並且要保證效率(就是併發咯),執行完成後把結果傳送給相關人員。釋出版本的時候,會存在分批次釋出的問題(幾百臺伺服器分幾天釋出),這樣執行驗證的時候,需要預先知道運維到底釋出了哪些環境。

需要實現的功能:1、實現自動話驗證  2、接收運維傳遞的伺服器引數,解析為伺服器的訪問url  3、環境太多,線性執行效率太低,考慮多執行緒 4、ui自動化存在不穩定問題,第一次失敗的環境需要重新執行  5、執行結果通過郵件傳送給相關人員。

理清需要實現的功能後,跟運維溝通,運維傳遞伺服器資訊的時候 是以url格式傳遞給我,伺服器資訊拼接在url後面,以逗號分割。我這邊部署一個web服務,接收到url請求後,解析url,把伺服器資訊轉變為url資訊,解析後的url資訊傳遞給執行指令碼。解決這個後,基本就沒什麼問題了

多執行緒併發。使用了threading

        threads=[]
        nloops=range(len(loops))
        count=0
        drs=[]
        urls=[]
        for i in range(len(loops)):
            login(i,drs,loops,count,urls)
            count=count+1
        for  i in drs:
            t=threading.Thread(target=loop,args=(i,))
            threads.append(t)
        for i in nloops:
            threads[i].start()
        for i in nloops:
            threads[i].join()

關於threading控制執行緒數的問題,因為伺服器有幾百臺,如果不控制執行緒數量,效能方面會有問題,所以線上程外面,切割伺服器分組,每次只多執行緒執行一個組的測試,執行完畢後再執行下一個組。伺服器分組的格式為

def splist(l,s):
    "將list等分 l"
    return[l[i:i+s] for i in range(len(l)) if i%s==0]

剩下來就是個人的盲點知識了,部署web伺服器,運維傳遞請求引數,我接收後執行。翻了下django,部署了一個服務,如果需要其它pc訪問,在啟動伺服器的時候  設定伺服器ip為0.0.0.0:8000

《待續》。。。。。。。。。。。