最近在做接口測試,之前公司的方案是使用postman進行接口測試。但是偉大的牆導致我們只能用離線版postman。。然后一個很長很長的接口列表,一個接一個的訪問。我的天哪。。所以萌生了一個想法,使用python編寫一套接口測試腳本,設置接口列表,然后逐條訪問,輸出日志。
第一個坑:POST 和 GET----GET一般用於獲取/查詢資源信息,而POST一般用於更新資源信息|Get是向服務器發索取數據的一種請求,而Post是向服務器提交數據的一種請求。
做過接口測試或者做過前端的人都知道,接口的訪問方式是不一致的,所以才會使用postman來進行接口測試,因為它可以設置post和get方式。使用python模擬這倆種訪問方式是重中之重。先說GET方式。GET方式就比較簡單了,把接口放進瀏覽器地址欄,點下回車就完成了一次GET。所以就需要使用python訪問URL就可以模擬一次GET 測試。
1 import urllib2 2 url_save = 'http://www.baidu.com/' 3 try: 4 s_save = urllib2.urlopen(url_save).read() 5 print s_save 6 except urllib2.HTTPError, e: 7 print e.code 8 except urllib2.URLError, e: 9 print str(e)
如上所示就完成了一次GET請求,調用urllib2庫,然后將一個字符串形式的URL傳給urllib2.urlopen函數,最后使用read()方法將GET回來的數據存儲起來。
然后說說POST。其實在python的urllib2庫中,我們剛剛所使用的urlopen函數還有其他幾樣不是必選的入參,因為這些入參給定了初始化的值:
1 def urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT, 2 cafile=None, capath=None, cadefault=False, context=None):
如上代碼,urllib庫有一個很智能的毛病。data不給值,訪問方式就是GET,data給了值,方式就會變成POST;所以模擬POST 方式的代碼如下:
import urllib import urllib2 url = 'http://www.example.com' # values的形式:name:value values = {'**' : '***', '**' : '***', '**' : '***' } #使用urllib.urlencode函數對values字典進行處理,最終形式為:**=***&**=*** data = urllib.urlencode(values) #如果對data順序有要求,建議自己拼接data req = urllib2.Request(url, data) response = urllib2.urlopen(req) the_page = response.read()
就像如上代碼,把POST方式所需要的數據寫到data參數中去,POST方式就模擬成功了。
第二個坑:cookie的使用
使用python獲取cookie所需要的庫叫做cookielib。獲取cookie的例子:
1 # 這里有四種CookieJar,CookieJar是最原始的 2 cookie_use = cookielib.CookieJar() 3 handler = urllib2.HTTPCookieProcessor(cookie_use) 4 # 使用綁定好CookieJar的handler創建一個opener 5 opener = urllib2.build_opener(handler) 6 # 將opener安裝到urllib2中 7 urllib2.install_opener(opener) 8 # 使用安裝好的urllib2訪問某一網站獲取cookie 9 urllib2.urlopen('https://....../login') 10 #這個時候cookie已經被CookieJar獲取到了 11 print cookie_use
在下一步,將獲取到的cookie綁定到opener頭中:
1 ''' 2 將獲取到的cookie綁定到opener,上一步獲取的cookie並不滿足如下格式, 3 需要自己進行字符串的切片和拼接 4 ''' 5 opener.addheaders.append(('Cookie', 'name=***&888=888'))
現在的opener就可以用來訪問任意需要登錄的網站了!
-----python小學生