接口測試-requests

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()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章