requests庫的使用
requests是python的一個HTTP客戶端庫,跟urllib,urllib2類似,那爲什麼要用requests而不用urllib2呢?官方文檔中是這樣說明的:
“python的標準庫urllib2提供了大部分需要的HTTP功能,但是API太逆天了,一個簡單的功能就需要一大堆代碼。”
簡而言之,requests庫就是簡單易用。
使用:
1. 安裝
https://pypi.python.org/pypi/requests
api:http://cn.python-requests.org/zh_CN/latest/
pip install requests
2.import requests
3.發送請求
3.1 requests.get(‘http://www.baidu.com‘)
配置url參數
params 關鍵字參數,以一個字典來提供這些參數
payload = {‘key1’: ‘value1’, ‘key2’: ‘value2’}
requests.get(“http://httpbin.org/get“, params=payload)
3.2 requests.post(url)
3.2.1表單提交
data傳入字典
payload = {‘key1’: ‘value1’, ‘key2’: ‘value2’}
requests.post(“http://httpbin.org/post“, data=payload)
3.2.2 x-www-form-urlencoded形式
headers增加配置 Content-Type:application/x-www-form-urlencoded
data傳入字典
3.2.3raw(文本)提交 字符串形式\xml形式
方式一:普通字符串(xml字符串)
payload = '<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" >'
r = requests.post(url, data=payload)
方式二:字典轉字符串
payload = {'some': 'data'}
r = requests.post(url, data=json.dumps(payload))
json形式
payload = {'some': 'data'}
r = requests.post(url, json=payload)
3.2.4文件格式
files ={"file1":open("report.xls","rb"),"file2":...}
requests.post(url,file=files)
3.3定製請求頭:
headers 字典
url = 'https://api.github.com/some/endpoint'
headers = {'user-agent': 'my-app/0.0.1'}
requests.get(url, headers=headers)
3.4添加Cookie
cookies 字典
cookies = dict(cookies_are='working')
cookies ={'cookies_are':'working'}
requests.get(url, cookies=cookies)
3.5超時**
timeout 僅對連接過程有效,與響應體的下載無關
超時則拋出requests.exceptions.Timeout
requests.get('http://github.com', timeout=0.001)
4、接受請求
resquest的get和post方法返回值都是response對象,其存儲了服務器響應的內容。
響應狀態碼:
response.status_code
response.raise_for_status()
#失敗請求(非200響應)拋出異常
響應頭:
response.headers--字典
響應的cookie:
response.cookies--字典
響應體:response.text
–內容編碼格式問題:
Requests 會基於 HTTP 響應頭對響應的編碼作出有根據的推測
response.encoding()
指定編碼格式,之後再調用response.text顯示的編碼格式就是設置後的
響應中的字節內容(二進制):response.content
解析響應:
response.json 轉換爲字典
5、高級應用
Prepared Request
s = Session()
req = Request('GET', url,
data=data
headers=headers
)
prepped = s.prepare_request(req)
resp = s.send(prepped,
stream=stream,
verify=verify,
proxies=proxies,
cert=cert,
timeout=timeout
)
SSL證書驗證
verify =False
例子:get 方法
#coding=UTF-8
import requests
import unittest
class getProduct(unittest.TestCase):
def test_getProduct(self):
para = {"user_id":"1"}
respones = requests.get("http://101.200.42.234:8116/v1/get/product",params=para)
print respones.text
# {"code":"0","msg":"","data":{"trade":[{"user_id":1,"product_id":1,"product_name":"電腦"},{"user_id":1,"product_id":2,"product_name":"電腦"},....]}}
# code = 0 ;商品數不爲0
code = respones.json()["code"]
if code == "0":
data_a = respones.json()["data"]["trade"]
count = len(data_a)
if count>0:
print u"查詢商品正確,共查詢到:"+str(count)+u"個商品"
else:
print u"未查詢到商品"
else:
print u"查詢商品接口返回錯誤"
post方法
#coding=UTF-8
import requests
import unittest
class addProduct(unittest.TestCase):
def test_addProduct(self):
para ={"user_id":"1","product_name":"wanju"}
response = requests.post("http://101.200.42.234:8116/v1/add/product",params=para)
# print response.text
# {"code":"0","msg":"添加商品成功!","data":null}
code = response.json()["code"]
if code == "0":
print u"添加商品成功"
else:
print u"添加商品失敗"
引入測試報告run.py
#coding=UTF-8
import unittest
# 測試報告類
import HTMLTestRunnerCN
#run.py跑全部用例文件
# 仍然引入unittest類
if __name__ == '__main__':
discover = unittest.defaultTestLoader.discover("./","*.py")
fp =open("./index.html","wb")
HTMLTestRunnerCN.HTMLTestRunner(stream=fp,title=u"接口自動化報告",description="111").run(discover)
fp.close()