第六章 自動執行自動化測試用例

        所有自動化測試用例最終的目的都是一樣的,實現無人值守的自動化運行。而目前最常用的就是Jenkins來實現這個功能,在前面的Webdriver+Python頁面自動化的教程中我們已經詳細講解了如何將自動化測試用例接入到Jenkins中。本章我們只講述接口接入的步驟,不再詳細講述相關的操作原理,同時加入接口中自動化檢測點的設置技巧。

6.1 接口自動化接入Jenkins

   第五章我們講到了如何利用TestSuite組織測試用例,當我們編寫好了相應的TestSuite文件,再接入到Jenkins就容易的多了。下面我們分步來完成這個操作:

(1)上傳自動化測試代碼到SVN或是Git。要對自動化測試代碼進行管理,上傳到代碼管理工具中,如上傳到Git:[email protected]:zhongchou/zcapitest.git

(2)打開Jenkins,創建Job。打開Jenkins網站,創建Job如:Zhongchou-api-AutoTest-OnlineEnv,並對項目描述,丟棄舊的構建和啓用項目安全進行相應的配置,如圖6.1.1所示:

圖6.1.1 Jenkins描述等配置

(3)源碼管理和構建觸發器。在源碼管理中我們選擇Git,並將上面的Git地址填寫進去。並且在構建觸發器的時候,我們設置成定時執行。詳細說明見:http://blog.sina.com.cn/s/blog_68f262210102vmlx.html,具體配置如圖6.1.2所示:

6.1.2配置源碼和構建觸發器

(4)填寫構建命令。構建命令是我們執行自動化測試用例的命令行,如果沒有此命令行,則Jenkins就不知道如何執行自動化測試,針對我們第五章編寫的用例集,我們的構建命令應該是:

PhpunitOnlineRegression.php

將命令填寫到Jenkins配置頁—>構建à“Execute shell”à“Command”框中。

(5)失敗郵件通知。如果測試用例執行失敗了,我們希望郵件通知相關人員,這裏就可以單擊“構建後操作”->“E-mail Notification”,然後在Recipients後填寫要接收郵件的郵箱地址。同時選擇“每次不穩定的構建都發送郵件通知”即可。

(6)保存配置。單擊保存後,就將測試用例接入到了,Jenkins中,並且每個小時會自動執行一次。

(7)手工執行。在Jenkins頁面上,打開剛剛創建的Job Zhongchou-api-AutoTest-OnlineEnv,單擊頁面左側的“立即構建”,即可馬上執行自動化測試用例。如圖6.1.3所示:

圖6.1.3 立即構建自動化測試用例

(8)查看構建結果。單擊Job左側“BuildHistory”要查看的構建的任務,在打開的頁面左側單擊“控制檯輸出”,既可在右側打開控制檯輸出,查看測試用例執行的結果。如圖6.1.4所示:

圖6.1.4 查看測試用例執行結果

6.2 Jenkins實現執行失敗短信通知

現在手機使用這麼發達,郵件通知感覺到不那麼及時了,如果不經常查看一下郵箱,即使是Jenkins給我們發了郵件我們也不能及時收到。所以如果自動化測試用例執行失敗了,能發送短信,這不是很好嗎?

遺憾的是,Jenkins沒有這個功能,如果想實現這個目標,我們只有自己努力了!下面我們分析一下思路:

(1)  我們要根據執行結果來分析出測試用例執行成功了或是失敗了,這個雖然Jenkins會自己分析,可是我們沒有辦法獲取它分析的結果。所以我們要保存執行結果。

(2)  解析保存的執行結果,如果失敗了,解析出哪些兒測試用例失敗了,把測試用例名字保存下來,以便作爲我們失敗通知短信的內容。

(3)  需要一個發短信給固定手機的方法,我的辦法是我們公司有一個公共短信平臺,申請了相關的權限後就可以直接調用發短信接口向任何手機號發短信。讀者要想達到這個目的,請自行想辦法,因爲沒有免費的短信接口。

(4)  上面三方面我們需要寫一個腳本來做這些兒事情,我們暫時命名爲TestGetResult.php,因爲調用接口php最方便。腳本都是在linux下執行的,所有python,php都不會相互影響的。腳本內容涉及公司接口,就不給大家展示了。

(5)  如果測試用例執行成功,則直接執行Jenkins返回成功,如果失敗,則調用此腳本發送短信,並同時調用Jenkins發送郵件。所以我們的腳本執行不能影響Jenkins對執行結果的判斷。

(6)  爲了達到這個目的,我們需要在“構建”—>Excute Shell”下添加腳本語言,如下所示:

01  #!/bin/sh

02  phpunit OnlineRegression.php>./Result/ApiResult.log

03  if [ $? -ne 0 ];

04  then

05  php TestGetResult.php

06  exit 1

07  else

08  exit 0

09 fi

腳本講解:

A,第02行我們是調用執行suite文件,執行測試用例,並將結果保存到./Result/ApiResult.log文件中。

B,第03行判斷第一行執行的結果,如果執行結果不等於0,說明測試用例執行失敗,然後調用05行我們處理測試結果,發短信的腳本。

C,第06行很關鍵,當測試用例執行失敗後,第02行會返回一個非0的結果,此時我們調用05行執行。05行執行成功後會返回0,此時Jenkins接到的結果代碼是0,會把執行結果置成成功,並且不會發郵件。所以06行,我們人爲的返回一個非零的代碼給Jenkins,爲了不影響Jenkins的結果。

  D,第08行和06行的目的是一樣的,當03行判斷結果爲失敗時,返回代碼是非零的,如果不在08行添加一個人爲地返回0的語句,測試用例執行成功時,Jenkins根據返回碼也會認爲是失敗。爲了不影響Jenkins原來的判斷結果,我們添加了06和08兩個強制返回語句。

   至此,我們完成了Jenkins的配置,這些兒配置可以滿足我們對自動化測試用例的失敗監控。當然,如果你們有其他的需要,可以去網上學習Jenkins的其他配置及插件的使用,學無止境嘛!

6.3 接口自動化檢測點的設置技巧

對於接口自動化的檢測其實也比較簡單,先對接口返回值進行json_decode()。然後對解壓後的數組進行判斷,和預期相同就成功,不同就失敗。這看似很簡單,可是要設置好一個檢測點,才能高效的發現Bug,還是需要一些兒技巧的。

(1)檢測返回的錯誤碼。針對一些兒接口,比較注重成功或是失敗,而不是特別注重返回的數據,或都沒有返回數據的時候,我們就檢測返回的錯誤碼。如果是正確的就成功,錯誤的就失敗。如:$this->assertEquals(0,$data["errno"]);

(2)檢測返回的數據。有的時候接口的錯誤碼相同,但是可能是因爲不同的原因引起的,此時我們就要檢測返回的數據,如error。或者接口比較注重返回的數據,就要檢測返回的Data是否和預期的相同或是包含。如:

$index=strpos($data['data']['name'],'8905');

 $this->assertnotEquals(-1,$index);//判斷結果是否包含關鍵字

(3)檢測關鍵字段。有些兒接口會在後期優化的時候增加字段或是返回值必須具有某些兒字段值纔算成功的話,我們就要對特定的字段進行檢測。如:

$this->assertArrayHasKey("is_friend",$data['data'],"新增加字段:is_friend");

(4)  Assert語句的位置。對於接口自動化,Assert語句是必不可少的,但是這個語句的位置還是有講究的。如果在接口處理的時候有輸出或是要記錄一些兒內容,就要考慮一下這個Assert語句的位置了,因爲一旦這個語句執行失敗,則程序就不再繼續往下執行。例如:

if($data['errno']==0)

{  

$this->assertEquals($dr->readnodevalue("login","serrno"),$data["errno"]);

TextOperation::writetoken($data['data']['token']);

 print('接口login:登錄成功------------------OK'.'\n');

}

Else

{

print("接口login:登錄失敗----------Failure!"."\n".$content."\n");

TextOperation::writetxt("接口28:登錄失敗-----Failure!"."\n".$content."\n");

$this->assertEquals($dr->readnodevalue("login","serrno"),$data["errno"]);

}

(5)Assert後適當的輸出。因爲我在網上查看了一下phpunit相關的輸出報告,好像沒有什麼好的樣式。我們就在接口執行成功或是失敗後做出一些兒輸出,這樣我們就可以對結果進行分析,然後定製出自己的執行報告。如果上面的例子中:

print('接口login:登錄成功------------------OK'.'\n');

or

print("接口login:登錄失敗----------Failure!"."\n".$content."\n");

6.4 本章小結

     本章我們介紹瞭如何將測試用例接入到Jenkins中,實現無人值守的自動化執行。並通過定製化配置,達到我們想要的一些兒個性要求,如執行失敗給相關人員發短信。最後又介紹了接口自動化測試用例編寫過程中檢測點設置的相關技巧,通過一些兒小的技巧可以提高我們測試用例執行的效率,將輸入結果更加完美。

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