針對此種狀況,選用接口測試較爲有效。python
針對接口測試的自動化工具也不少,例如Soup UI、Postman、robotframework,甚至jmeter這樣的性能測試工具均可以進行接口測試。flask
robotframework測試框架有不少的第三方庫能夠使用,採用的是填表的方式進行,較容易上手,可是沒法深刻底層的瞭解客戶端與服務器的交互過程。jmeter這樣的專一性能測試的工具,進行接口測試,有點大材小用的感受並且沒法生成測試報告。可是這些工具靈活性不夠,也不徹底適用於被測系統。服務器
綜上考慮,決定本身開發一個簡單的框架,優勢是足夠靈活,能夠隨時根據需求進行變動,後臺使用的是python+flask進行開發,這次選用python 2.7.11進行框架的開發,python開發的速度很快,且容易上手,豐富的第三方庫,大大加快了開發速度和難度。cookie
因爲是框架,因此要考慮到框架的可重用性和可維護性。session
其次,須要考慮到測試人員編寫測試用例的方便性,採用數據驅動的設計方式,將數據分層出來,與業務邏輯剝離。這樣測試人員就能夠經過數據文件專一的寫測試用例,不用關注代碼編寫,提升了效率。這次框架採用基本的excel進行數據管理。經過對excel 的讀取得到數據。架構
以後將測試的結果生成HTML格式的測試報告發送給相關開發人員。框架
Requests函數
python中有許多針對http的庫,例如自帶的urllib2,可是自帶的urllib2編寫起來實在是太費精力,因此採用號稱"HTTP forHumans"的requests庫。工具
xlrd性能
xlrd使得python能夠方便的對excel文件進行讀寫操做,這次經過xlrd讀取excel文件中的測試數據。
以上第三方庫均可以經過pip直接安裝或者經過pypi下載源碼包安裝。
get_conf:
讀取配置文件,得到郵件發送的配置信息,如smtpserver、receiver、sender等。
md5Encode:
部分數據採用md5加密後傳輸,因此須要把從excel讀取的數據進行md5加密。
sendMail:
當測試完成後,將測試報告自動的發送給相關開發人員。
runTest:
此部分讀取excel中的數據,調用下方的interfaceTest方法,保存interfaceTest返回的信息。
interfaceTest:
將runTest讀取的excel數據做爲入參,執行接口測試,並將後臺返回的信息返回給runTest
Excel的文件格式以下圖,API Purpose記錄接口的名稱,API Host記錄主機地址,Request Methon記錄請求方式,能夠選擇GET或者POST。
Request Data就是構造的測試數據,這裏須要注意其格式的書寫。
Check Point是檢查點的設置,當得到數據後,須要跟檢查點的數據進行比對,若是符合,說明測試成功,反之失敗。
配置文件的格式以下圖:
在這裏能夠設置郵件發送人、接收者、smtp服務器地址以及用戶名密碼。須要根據實際狀況進行改變。
因爲全部的操做必須在系統登陸以後進行,一開始沒有注意到cookie這一點,每讀取一個測試用例,都會新建一個session,致使沒法維護上一次請求的cookie。而後將cookie添加入請求頭中,可是第二個用例仍然沒法執行成功。後來用fiddler抓包分析了一下,發現cookie的值居然是「每一次操做後都會變化的!!!」
因此只能經過session自動維護cookie。
在interfaceTest函數中,返回三個值,分別是HTTP CODE,HTTP返回值與session。再將上一次請求的session做爲入參傳入interfaceTest函數中,在函數內部判斷session是否存在,若是不爲None,那麼直接利用傳入的session執行下一個用例,若是爲None,那麼新建一個session。
1. 框架十分簡陋,只是簡單想法的實現,對於編碼的細節沒有完善。
2. HTML的測試報告書寫起來比較麻煩,能夠考慮引入第三方庫進行HTML測試報告的書寫,將生成的HTML文件做爲附件發送。
3. 只是針對公司內部的軟件,換用其餘平臺就不適用,須要修改源碼。