本文背景:python
背景1---我的基礎: 本機win7上安裝pycharm,使用python搭建API自動化測試框架,本地運行Pass。本機上搭建jenkins,建立測試任務,定時構建Pass。linux
背景2---公司實際: jenkins和python都是搭載linux系統服務器上,python腳本存放在svn上。shell
在背景1的前提下,往背景2跳躍,我覺得只是一小步。挪一個環境而已,對linux基礎命令還算熟悉,因而開始一天的探坑之路。windows
第一階段:盲目試水,以爲把腳本里路徑改爲svn就OK了。服務器
1.修改conf中的項目路徑爲:http://*******.cn/svn/****API_Autotest,上傳到svn上。app
2. jenkins上新建自由風格任務,源碼管理選擇svn路徑同上,添加帳號憑證信息,構建步驟添加執行shell命令:python run.py。(本人並不會shell腳本,windows下也是用這個命令,諮詢了大佬才放心用),而後應用-保存。框架
3.最後一步,正式驗證是否成功,返回,點擊「當即構建」。python2.7
結果可想而知,華麗麗地失敗了,也不期望一次成功,調出控制檯輸出,workspace裏沒有找到這個工程文件,意料之中。第二次,仍然失敗,run.py裏第一步是從配置文件中讀取section對應值,報錯提示KEY_Error,反覆檢查配置文件和腳本,無果。svn
第二階段:瘋狂百度,相信萬能的度娘,總能找到相似的狀況吧。函數
百度了n篇文章,並無找到同樣背景的狀況:linux+jenkins+python+svn,大都是搭建測試環境,部署項目Java代碼的,但也不能說全無收穫,確實發現了幾個關鍵點:
1.linux通常自帶python2.7,但我用的是python3.4,須要去升級服務器上的python版本,至於怎麼在linux上升級python到3,網上文章一堆一堆的,看了兩三篇,差很少,因而要來搭建jenkins的服務器(公司服務器太多)帳號密碼,開始用下面命令安裝,須要sudo -i 臨時切換到root權限,預想是python2.7和3.4共存,最後把默認軟連接指向python3:
wget https://www.python.org/ftp/python/3.4.1/Python-3.4.1.tgz #下載資源包
tar -zxvf Python-3.4.1.tgz #解壓
cd Python-3.4.1/ #進入解壓後的目錄
./configure #配置
make & make install #編譯&安裝
python3 #無報錯則成功
驗證幾回失敗,百度對應的報錯後,解決掉了不提。而後安裝完沒有報錯了,仍是驗證不經過,因而直接找開發小姐姐幫忙看,過一下子,她說好了能夠用了。怎麼解決的呢?小姐姐的回覆是:把python2的卸掉了,啓動路徑替了一下。應該也能夠並存的,改一下環境變量就行,可是小姐姐直接卸了~~咳~~百度裏說卸掉自帶的2版本可能影響其餘地方,就先無論了。
2.jenkins裏pyenv插件能夠指定python版本,不知道跟1是否是重複了。無論三七二十一,先去插件管理裏下一個再說,用不上也不要緊嘛。
一、2所有解決了,再次構建,還是失敗,報錯信息,NO SECTION,也就是說讀取配置文件仍然失敗。反反覆覆在jenkins上構建也沒啥意義了,仍是先到本機上調試看看。
第三階段:百度已無方向,返回本身調試+諮詢大佬,意外收穫到pycharm+svn用法
1.在讀取配置文件的腳本main函數下,配置文件路徑嘗試svn路徑,結果顯示一大串配置提示錯誤,百度pycharm裏svn配置後發現竟然還能夠從svn代碼倉庫裏導出腳本,編輯修改後右鍵直接commit,太方便了,這個之後能夠一直用下去。
2.解決了pycharm裏svn配置問題,從新開始嘗試了讀取svn路徑配置文件,一樣報錯。本地的可運行成功,那問題就在路徑上了。針對性地諮詢了下測試大佬,果真,配置文件不能請求遠程的文件,要加上一步拉到本地的操做。而jenkins在構建任務時會自動把svn上的代碼下載到本地的workspace裏,因此conf裏配置文件中的project_path不能寫svn路徑,而是搭建jenkins的那臺服務器上的workspace路徑,可能由於太細節過小了,跟喝水不能太燙同樣,百度裏很默契的都沒說起,這是我認知中的一個盲點,因而,摔倒了半天還爬不起來。
3.大方向問題解決了,再次構建,還是failure,報錯,還是路徑錯誤,大佬建議先在服務器上嘗試可否運行成功。這是一個好辦法,先把py腳本一個一個地在服務器上調通再看,而且百度裏關於linux下python運行報錯的文章一堆一堆的,我碰到的以下:
NO Moudle Named Requests: 那就去linux上pip install requests (ddt、openpyxl、configparser同理)
NO Moudle Named HTMLTestRunnerNew: 那就打開secureFX,丟個HTMLTestRunnerNew.py到python安裝目錄lib下
NO Moudle Named common: 那就在每一個py文件起始位置加上一段:
import os,sys
curPath = os.path.abspath(os.path.dirname(__file__))
rootPath = os.path.split(curPath)[0]
sys.path.append(rootPath)
至此,服務器上運行順利經過。
最後,再次在jenkins構建,順利經過,過高興了,花了快一天的時間。留下此文總結記念。附API框架和jenkins上運行成功截圖: