自動化最小實踐方案總結

第一、引言

1.1需求描述

1.2添加用例的目的

二、編寫覈對用戶信息測試用例

2.1搭建環境

2.2測試應用

2.3 遇到的問題

2.4 優化測試應用

三、編寫驗證公網鏈接測試用例

3.1測試應用

3.2 遇到的問題

3.3優化測試應用

四、jenkins部署實現

4.1 創建任務

4.2 運行並監控構建

4.3 遇到的問題

五、總結


 

第一、引言

本測試應用是2014年剛爲自己負責的京東用戶體系自動化最小投入產出的實踐,實現了用戶體系業務線自動化從“無到有”的突破,時過5年在梳理電腦存檔的時候發現該文章,花幾分鐘梳理一下分享給大家,希望能給大家帶來思路上的參考,我以此紀念回味曾經的思路和努力的腳步;

該實踐爲服務用戶組部分功能測試,旨在提高測試效率,解放人力資源,能及時性的得到線上問題反饋,提供分析測試結果條件,能快速定位問題;並對發現的問題和缺陷進行記錄,形成log文檔,以驗證該系統是否符合需求說明書的要求,同時準備進行應用驗收;

1.1需求描述

  1. 用戶登錄後,進入“我的京東”,不斷刷新該頁面,檢查用戶信息顯示是否正確;
  2. 618交易研發部需要實時測試的公網鏈接;

1.2添加用例的目的

  1. 通過測試應用覈對登錄用戶信息;
  2. 由於公網鏈接比較多,手工測試比較費時,通過測試應用驗證公網鏈接,節省時間,反饋問題及時,提高工作效率;
  3. 把測試應用添加到jenkins 中,不間斷的自動測試;

二、編寫覈對用戶信息測試用例

2.1搭建環境

2.1.1安裝所需要的軟件

  • 安裝jdk1.6 32位
  • 安裝springsourece 32 位
  • 安裝svn 64位
  • 安裝Maven 3.1.1

【說明】軟件安裝過程,不做具體描述。

2.1.2 導入工程

 

  • 選擇上圖,“Maven”下“Existing Maven Projects”,如下圖:

 

  • 點擊上圖“Next”按鈕,選擇要導入“httpTestCoolies ”工程pom.xml所在的根目錄,如下圖:

  • 點擊上圖“Finish”按鈕,已成功導入工程

2.1.3 配置Maven

  • 選擇“Window”下“Preferences”,如下圖:

 

  • 打開上圖中“Maven”,如下圖:

 

  • 選擇“Maven”下“Installations”,添加“Maven”安裝所在的路徑,點擊“ok”如下圖:

   【說明】上圖中,選擇上面所添加的maven路徑後,下面標紅處會自動生成,不需要自己選擇。

  • 選擇“Maven”下“User Settings”,如下圖:

說明】上圖標紅處,settings.xml是在C:\Users\Administrator\.m2下是不存在,需要手動創建。創建完成後,需要添加內容,建議最好從搭建好環境同事拷貝settings.xml文件。C:\Users\Administrator\.m2\repository 已存在,不需要自己創建。

2.2測試應用

  • 編寫流程
  1. 用戶先登錄,登錄失敗(如果連接超時,重連一次),直接返回併發送郵件,郵件內容爲詳細失敗信息;
  2. 登錄成功後,根據userNameUrl = http://home.jd.com/myjd_index.action,獲取暱稱。根據dataNumUrl = http://home.jd.com/myjd_getDataCount.action ,獲取京豆、禮品卡、餘額、優惠劵;
  3. 獲取的值和已存在的值進行比對,比對結果都相等,則返回ture,否則false併發送郵件通知相關人員,郵件內容爲:主題+測試結果詳細(如果有錯誤則爲錯誤詳細信息,報告異常);

2.3 遇到的問題

2.3.1搭建環境

  • 在win7  64位機器上安裝了32位svn ,不能用。(解決辦法:卸載32位的svn,重新安裝64位svn)
  • 在win7  64位機器上安裝32 位的springsourece 時,選擇64位的jdk1.6 報錯。(解決辦法:卸載64位的jdk1.6,重新安裝32位的jdk1.6)
  • 如果用eclipse 需要安裝Maven插件;

2.3.2 配置Maven

  • 在springsourece中配置Maven後,pom.xml報錯。錯誤信息如下:

Failure to transfer org.apache.maven.plugins:maven-resources-plugin:jar:2.5 from http://repo.maven.apache.org/maven2

 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or

 updates are forced. Original error: Could not transfer artifact org.apache.maven.plugins:maven-resources-plugin:jar:2.5

 from/to central (http://repo.maven.apache.org/maven2): Remotely Closed [id: 0x015866bf, /10.12.217.35:56929 :>

 repo.maven.apache.org/199.27.77.129:80]

報錯原因: C:\Users\Administrator\.m2\ settings.xml 文件內容不正確,導致的。

解決辦法:拷貝同事的setting.xml文件,替換原來的setting.xml文件。

 

2.4 優化測試應用

  • 覈對多個登錄用戶信息
  • 把已登錄用戶信息以參數的方式傳入(原因當用戶的優惠劵、京豆發生變化時,需要修改測試應用源碼)

 

三、編寫驗證公網鏈接測試用例

3.1測試應用

  • 編寫流程
  1. 整理公網鏈接,哪些鏈接可以通過程序驗證
  2. 把整理後的公網鏈接,加入到List
  3. 通過循環逐步驗證每個鏈接
  4. 判斷鏈接是否有跳轉頁面,如果跳轉鏈接中含有“error.html”,發送郵件。
  5. 通過錯誤信息,區分公網鏈接屬於用戶、促銷、市場活動等
  6. 在運行過程中,錯誤信息,debug信息、INFO信息寫入日誌文件
  7. 通過定時器來實現隔多長時間運行一次該用例

【說明】上面5和6是在本地運行。如果通過jenkins運行,不需要5和6。

 

3.2 遇到的問題

  1. List 添加 的url 帶空格報錯,錯誤信息如下:

java.lang.IllegalArgumentException

         at java.net.URI.create(URI.java:842)

         at org.apache.http.client.methods.HttpGet.<init>(HttpGet.java:69)

         at common.DoGetResponse.doGetResponse(DoGetResponse.java:17)

         at Checker.CheckTicketCardUrl.getCheckTicketCardUrl(CheckTicketCardUrl.java:32)

         at Checker.CheckInterface.getCheckInterFace(CheckInterface.java:111)

         at common.StartTask.run(StartTask.java:31)

         at java.util.TimerThread.mainLoop(Timer.java:512)

         at java.util.TimerThread.run(Timer.java:462)

Caused by: java.net.URISyntaxException: Illegal character in query at index 71: http://quan.jd.com/getcouponcount.action?callback=51testing_&_345637334

         at java.net.URI$Parser.fail(URI.java:2809)

         at java.net.URI$Parser.checkChars(URI.java:2982)

         at java.net.URI$Parser.parseHierarchical(URI.java:3072)

         at java.net.URI$Parser.parse(URI.java:3014)

         at java.net.URI.<init>(URI.java:578)

         at java.net.URI.create(URI.java:840)

         ... 7 more

解決辦法:去掉url中的空格。

  • 運行測試用例的過程中,發現有部分連接跳轉到錯誤頁面,是由於登錄用戶沒有開啓“支付密碼”。

解決辦法:開啓賬號支付密碼。

3.3優化測試應用

  • url作爲參數傳入(考慮到以後可能運行某個公網鏈接,或者增加公網鏈接,不需要修改程序,就能實現)

四、jenkins部署實現

4.1 創建任務

  1. 通過瀏覽器http://10.10.224.136:3154/jenkins/,登錄jenkins,只有用戶登錄後,纔可以創建任務。
  2. 在 Jenkins主菜單點擊“新  Job”,出現如下圖:

鍵入任務名稱,選擇“Build a free-style software project”選項,點擊“OK”按鈕後,出現如下圖:

【說明】:

  1. Project名稱:項目(任務)名稱不能重複,後面通稱任務。
  2. 描述:主要對任務進行簡要說明。
  3. 丟棄舊的構建:是否保留過去的構建,默認是保留。
  4. 參數化構建過程:如果選擇此選項,Jenkins將允許您提供一套任意的鍵值對參數,它們會被傳遞到構建過程裏。配置的參數往往是構建運行環境中的一些環境變量。
  5. 停止構建:禁止此任務進行構建 ,默認是不禁止。
  6. 高級項目選項
  • 安靜期:構建前等待時間
  • 重試次數:從SCM倉庫中取出嘗試時間
  • 該項目的上游項目正在構建時阻止該項目構建
  • 該項目的下游項目正在構建時阻止該項目構建
  • 試用自定義的工作空間:指定當前任務的workspace,否則 默認爲JENKINS_HOME的工作目錄

    7.源碼管理

  • CVS:從cvs庫中獲取
  • None:手動方式
  • SVN:從svn庫中獲取

備註:SVN通過“Add more locations”來添加多個工程。

     8.構建觸發器

  • Build periodically :設置構建頻率
  • Poll SCM:設置從SCM庫中檢查源代碼是否更新。

備註:以上基本配置爲 分鐘 小時 天 月 星期,例如:每5分鐘進行 5 * * * *,每天12點和23整點進行 0 12,23 * * *

     9.構建:支持多種方式,例如:shell(運行於linux環境)、Maven(支持Maven編譯)、Command(windows批處理命令)、ant等,如下圖:

下面以Maven舉例:

  • Goals:maven命令。

      10.構建後操作,主要說一下,郵件提醒;

 

備註:可以向多個人發送郵件,通過“;”進行分割;

點擊“保存”,新任務創建完成;

4.2 運行並監控構建

  • 當配置完成一個任務後,回到主控制面板,如下圖:

  • 上圖中右邊列表列舉現在已經配置的任務已經任務當前的狀態;
  • 左邊有構建隊列,當有構件時,會把當前正在構建的隊列在上面進行列舉;
  • 上圖右下角有RSS訂閱,支持訂閱全部、失敗和最後一次等;

 

  • 手動構建一個任務

當一個任務配置完成後,可以採用手動構建和觸發器構建兩種方式,在項目驗證階段,可以通過手動觸發方式,點擊任務區的“立即構建”,會在“Build History”中出現以下進度條:

點擊進度條,可以進入到具體編譯過程,如下圖:

等構建完成後,可以看到任務構建的結果圖,如下圖:

  • 任務構建狀態
  1. 構建狀態分一下幾種

項目從未構建,或者被禁用

構建失敗

構建成功,但包含錯誤

構建成功

      2.構建穩定性,jenkins會基於一些後處理器任務構建發佈一個穩健指數(從0~100),越高越穩定

項目健康度高於80%。

項目健康度介於60%~80%

項目健康度介於40%~60%

項目健康度介於20%~40%

項目健康度低於20%

期待任務構建完成都處於狀態。

4.3 遇到的問題

  • 點擊“立即構建”後,在“Build History”中出現“連接中”。

產生原因:節點沒有啓動

解決方法:在節點管理頁面上,手動啓動該節點

  • 構建失敗,錯誤信息如下:

         [Dome-tester] $ mvn.bat -f pom.xml -DNODE_SLAVE=192.168.198.135-win7 clean install

         FATAL: command execution failed

         java.io.IOException: Cannot run program "mvn.bat" (in directory "C:\HudsonWorkSpace\workspace\Dome-tester"): CreateProcess error=2, ?????????

                   at java.lang.ProcessBuilder.start(Unknown Source)

                   at hudson.Proc$LocalProc.<init>(Proc.java:244)

                   at hudson.Proc$LocalProc.<init>(Proc.java:216)

                   at hudson.Launcher$LocalLauncher.launch(Launcher.java:707)

                   at hudson.Launcher$ProcStarter.start(Launcher.java:338)

                   at hudson.Launcher$RemoteLaunchCallable.call(Launcher.java:932)

                   at hudson.Launcher$RemoteLaunchCallable.call(Launcher.java:899)

                   at hudson.remoting.UserRequest.perform(UserRequest.java:118)

         at hudson.remoting.UserRequest.perform(UserRequest.java:48)

                   at hudson.remoting.Request$2.run(Request.java:287)

                   at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:72)

                   at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)

                   at java.util.concurrent.FutureTask.run(Unknown Source)

                   at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)

                   at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

                   at hudson.remoting.Engine$1$1.run(Engine.java:60)

                   at java.lang.Thread.run(Unknown Source)

         Caused by: java.io.IOException: CreateProcess error=2, ?????????

                   at java.lang.ProcessImpl.create(Native Method)

                   at java.lang.ProcessImpl.<init>(Unknown Source)

                   at java.lang.ProcessImpl.start(Unknown Source)

                   ... 17 more

         Build step 'Invoke top-level Maven targets' marked build as failure

         Recording test results

         Sending e-mails to: [email protected] [email protected]

         Notifying upstream projects of job completion

         Finished: FAILURE

  • 產生的原因:slave所在的機器沒有啓動“slave-agent.jnlp”,沒有辦法和master建立連接。
  • 解決辦法:檢查slave所在的機器上是否安裝了jdk、maven是否設置相應的環境變量啓動“slave-agent.jnlp”。

五、總結

  • 深入的瞭解用戶相關的業務內部設計邏輯;
  • 熟悉了jenkins,從怎樣創建任務到運行並監控構建整個過程;
  • 學習了同事解決問題的方法,增加溝通;
  • 熟悉了添加測試用例的流程;

     不足之處

  • 編寫測試應用過程中有些異常沒有考慮到;
  • 由於對jenkins不熟悉,遇到問題不能獨立解決,需提搞解決問題的能力;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章