前言:
構建的項目為pytest+appium+allure,在pycharm里面已將環境代碼調試並測試完畢,放到jenkins里執行的一些問題整理
問題1.pycharm里可以正常運行代碼,到了jenkins里提示module not found(而且非第三方包,自己寫的py模塊的情況):這里優先考慮sys.path的問題,本人親測,不說100%的問題,至少90%的情況可以通過添加sys.path處理,也就是extend(sys.path),為什么pycharm里運行不出錯了,因為pycharm在創建項目/打開項目時會自動添加項目目錄路徑至sys.path(項目子目錄我記得也會添加)
如圖:
這是sublime里面的sys.path截圖(jenkins里面跟這個是一樣的),只會將當前py文件的路徑添加至sys.path:
pycharm里面的sys.path截圖:
解決方法:
# 添加項目目錄及子目錄至sys.path,
# def append_projectDir_to_syspath():
# rootpath=os.path.abspath('../')#獲取當前目錄得上級目錄得絕對路徑,也就是項目目錄得路徑
# syspath=sys.path
# sys.path=[]
# sys.path.append(rootpath)#將工程根目錄加入到python搜索路徑中
# sys.path.extend([os.path.join(rootpath,i) for i in os.listdir(rootpath)
# if os.path.isdir(os.path.join(rootpath,i)) and i[0]!='.'])#將工程目錄下的一級目錄添加到python搜索路徑中
# sys.path.extend(syspath)
# # print(sys.path)
# append_projectDir_to_syspath()
導入模塊前執行一下這個函數,用於手動將項目目錄及子目錄添加至sys.path
添加后得執行效果:
可以看到module not found得錯誤已經不會拋出了
問題2:
cmd命令不能正常執行得問題,命令本地可以正常執行netstat到了jenkins里面就不能正常執行了
我在項目中添加得一個命令:
構建就會出錯:
這個問題坑了好久,后面發現是jenkins里面默認得環境變量是需要自己手動配置得
首先將netstat得path找到:
在jenkins里配置好他:路徑-Manage Jenkins-Manage Nodes and Clouds-點擊設置圖標:
手動維護好他即可,這個是通用得,node、pytest、python等等一系列得命令問題都是通過這個處理
問題3:
在jenkins里執行cmd命令沒有任何彈窗提示,但其實是執行成功了的,我在代碼里寫了一個簡單得檢測機制:如果執行adb devices輸出為空,則執行啟動模擬器(雷電4),如果4723端口沒被占用,則執行appium-server得命令,但是在jenkins調用雷電模擬器會沒有啟動窗口,appium-server里也沒有(這個可以在啟動appium-server時加入-g參數,手動記錄日志),但是日志里可以正常輸出,
處理方案:https://www.cnblogs.com/qtclm/p/13621327.html
總結:
1.module not found:如果時第三方庫,就通過pip安裝即可,如果是自己寫得模塊,那就通過手動添加sys.path處理
2.Jenkins:cmd命令不能正常執行,考慮jenkins環境變量配置,路徑-Manage Jenkins-Manage Nodes and Clouds-點擊設置圖標
3.jenkins:cmd命令執行后沒有窗口,處理方案:https://www.cnblogs.com/qtclm/p/13621327.html
個人感慨:
遇到問題時需要理清思路,起初是pytest一直卡在執行界面,通過日志發現就是因為netstat命令不能正常執行導致while true條件一直成立,所以看問題時需要注重問題拆解,細化加小規模調試,遇到這種情況可以先建一個小項目先把cmd命令這些調試命令,然后再逐步網上項目得配置,這是本人的一些建議