關於測試的方法論,都是創建在以前的文章裏面提到的觀點:javascript
後面所談到的 測試自動化 也將圍繞着 接口自動化 來介紹。html
目前互聯網行業流行的「一服務,多客戶端」的架構是一種 可測試性好 的架構,架構圖以下:java
基於如上特色,此係統的接口自動化測試簡化表述,就是須要作以下事情:python
固然,以上純粹是從技術的角度來闡述問題,若是要和具體的項目結合起來 ,還須要設計不一樣的步驟和數據來知足不一樣的業務邏輯需求。git
對於如上4個目的,有以下幾個框架或者工具能夠實現:github
一個Http請求庫,號稱是讓Http的請求對人更友好,此框架也確實達到此目的了。json
python提供的對json和python數據類型的轉化庫bash
pyunit自動化框架提供了大量的assert斷言方法來自動化進行數據邏輯斷定服務器
做爲一個強大的IDE,其在項目組織方面的表現也一樣是極其出色的架構
關於 pyunit 和 pycharm 在本系列文章的上一節裏面已經進行了介紹,此處再也不重複介紹,本文的重點則是python的兩個和http通信及數據解析相關的庫:requests庫 和 json庫 。
中文官方主頁:
http://www.json.org/json-zh.html
關於JSON的使用介紹,目前已經不言而喻。雖然在好多年前,曾經有XML和JSON在 數據編解碼 領域勢均力敵的說法,可是這麼多年過去後,JSON的勢頭愈來愈好,而XML的聲音則愈來愈小。
關於JSON的定義,引用官網的原文 [1]:
JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。 易於人閱讀和編寫。同時也易於機器解析和生成。 它基於JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一個子集。 JSON採用徹底獨立於語言的文本格式,可是也使用了相似於C語言家族的習慣(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 這些特性使JSON成爲理想的數據交換語言。
目前JSON顯然已經成爲了互聯網上字符型數據交換的標準編解碼的中堅力量,做爲互聯網的開發人員,是頗有必要了解它,運用它的。
JSON做爲一種字符串的編碼和解碼規劃,是和語言無關的,JSON官網 [1] 上有各類語言的。各類語言(Java/Php/C#/C/C++/Python/R/Ruby等等)都有本身的實現方式,這些也均可以參考
本文的主打語言是Python語言,所展開的內容也是和Python語言相關,在JSON官網 [1] 上提供了以下幾種Python語言的JSON庫:
通常狀況下,都使用第一個: The Python Standard Library(Python標準庫)
官方文檔地址:
https://docs.python.org/2/library/json.html
主要的功能就是:JSON編碼和解碼。
主要函數:
- 解碼函數(裝載):將字符流轉化爲json對象
- loads: 載入字符串變量
- load:載入文件流
- 編碼函數(卸載):將json對象轉化爲字符流
- dumps:輸出到字符串變量
- dump:輸出到文件流
以上的幾個接口容易混淆記憶,引處提供一個辨識技巧:後面帶有s結尾(loads,dumps),都是對字符串變量 str 的處理。
通常狀況下,loads,dumps使用得最多,由於大部分的程序運算都是內存運算,即主要是對字符串變量進行處理,如下是官網的示例。
字符串解碼:
>>> import json >>> json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]') [u'foo', {u'bar': [u'baz', None, 1.0, 2]}] >>> json.loads('"\\"foo\\bar"') u'"foo\x08ar'
字符串編碼:
>>> import json >>> json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}]) '["foo", {"bar": ["baz", null, 1.0, 2]}]' >>> print json.dumps("\"foo\bar") "\"foo\bar" >>> print json.dumps(u'\u1234') "\u1234"
關於python標準數據類型和Json的數據類型之間轉化的對應關係請見官網 [2]
[1] | (1, 2, 3) JSON官網 |
[2] | Python的Json編碼解碼數據對應表 |
官方主頁:
http://docs.python-requests.org/en/master/
requests庫是一個專門封裝的,對用戶極其友好的一個Http請求庫,其目的就是爲了讓python下面的Http請求變得更簡單,並且它確實也達到它的目的了。
安裝方法:
pip install requests
目前的通常的Web應用程序都是基於get或者post請求,對於這兩種Http請求,requests庫都提供了十分優雅的解決方案。
最基本的get請求
# coding:utf-8 import requests __author__ = 'harmo' def get_demo(): """ requests 的get方法演示,不帶參數 by:Harmo :return: """ url = 'http://www.baidu.com' res = requests.get(url) print res.url print res.status_code if __name__ == '__main__': get_demo()
運行結果:
http://www.baidu.com/ 200
帶參數的get請求:
>>> payload = {'key1': 'value1', 'key2': 'value2'} >>> r = requests.get('http://httpbin.org/get', params=payload)
帶參數的post請求:
>>> payload = {'key1': 'value1', 'key2': 'value2'} >>> r = requests.post("http://httpbin.org/post", data=payload) >>> print(r.text) { ... "form": { "key2": "value2", "key1": "value1" }, ... }
再結合一下pyunit的判斷庫,就能夠根據以下流程,作一個最簡單的接口自動化測試腳本:
下面是對一個用戶登陸的接口進行測試,按照設計文檔,此接口若是登陸成功,則返回的字符格式是:
{ "code":200, "msg":"", "data":{ "token": "382998dafa5143fd8a38c535be0d1502" } }
若是登陸失敗,則返回以下值:
{"code":403,"msg":"forbidden","data":""}
則相應的測試腳本代碼爲
def test_admin_user_login(self): """ 測試用戶登陸 by:Harmo :return: """ url = "%s%s" % (self.base_url, '/task/admin-user-login/') params = dict( user='admin', password='222222', ) res = requests.post(url, data=params) print res.text res_dict = json.loads(res.text) self.assertEqual(res_dict['code'], 200)
運行結果:
經過上面運行結果的提示,咱們能夠看出,指定的數據輸入通過服務端接口後,並無返回咱們指望的值。這個時候,咱們就能夠排查是否是服務端的接口出問題了,或者是誰修改了測試數據,致使結果不符合預期。
本小部分的內容,主要是講如何利用 requests庫 和 json庫 來輕鬆構建Http接口自動化測試的項目。基本上若是掌握瞭如上技能,測試開發人員就具有了自動化腳本開發的能力了,後面主就是結合具體的項目需求來進行邏輯設計和數據準備了。
只須要這一步,你就邁入了自動化測試之門了,恭喜。
積少成多,無數的上文提到的接口自動化測試腳本,就能夠聚集成一個自動化化測試項目,而此自動化測試項目則是 持續集成,快速迭代必備條件,最後做爲測試人員也能成爲整個項目推動中很重要的一環了。
做者: | Harmo哈莫 |
---|---|
做者介紹: | https://zhengwh.github.io |
技術博客: | http://www.cnblogs.com/beer |
Email: | dreamzsm@gmail.com |
QQ: | 1295351490 |
時間: | 2016-02 |
版權聲明: | 歡迎以學習交流爲目的讀者隨意轉載,可是請 【註明出處】 |
支持本文: | 若是文章對您有啓發,能夠點擊博客右下角的按鈕進行 【推薦】 |