python+requests實現介面測試 - get與post請求使用( params__python

來源:互聯網
上載者:User

原 http://www.mamicode.com/info-detail-1755093.html




簡介:Requests 是用Python語言編寫,基於 urllib,採用 Apache2 Licensed 開源協議的 HTTP 庫。它比 urllib 更加方便,可以節約我們大量的工作,完全滿足 HTTP 測試需求。Requests 的哲學是以 PEP 20 的習語為中心開發的,所以它比 urllib 更加 Pythoner。更重要的一點是它支援 Python3 哦。

 

一、安裝

使pip安裝:

pip install requests

安裝完後,運行一個簡單的例子查看是否安裝成功:

import requests                                 #匯入requests包r=requests.get(url=‘https://www.baidu.com/‘)    print(r.status_code)                            #查看請求返回的狀態#結果200

  

 

二、幾種請求類型

  ①get請求:requests.get(‘url‘) 

  ②post請求:requests.post("url/post")

  ③put請求:requests.put("url/put")

  ④delete請求:requests.delete("url/delete")

  ⑤head請求:requests.head("url/get")

  ⑥options請求:requests.options("url/get")

 

三、get請求

傳遞url參數

在get請求中,允許使用params關鍵字,以一個字典來傳遞這些參數,例如:

content={‘pageIndex‘:1,‘pageSize‘:10,‘categoryId‘:9}   r=requests.get(‘http://www.xxxxx.com/api/v2/activities‘,params=content)print (r.url)                       #擷取請求內容print (r.text)                      #擷取響應內容#結果http://www.xxxx.com/api/v2/activities?pageIndex=1&pageSize=10&categoryId=9{"data":[],"pageIndex":1,"totalNum":0,"hasMore":false,"pageSize":0}

 

如果字典中存在None的值,是不會添加到url請求中的

content={‘pageIndex‘:1,‘pageSize‘:10,‘categoryId‘:None}   r=requests.get(‘http://www.xxxxx.com/api/v2/activities‘,params=content)print (r.url)                      #結果http://www.xxxx.com/api/v2/activities?pageIndex=1&pageSize=10

  

 

ps:不使用params的話,也可在請求中輸入全部的地址,效果相同,如:

r=requests.get(‘http://m.xxxxx.com/api/v2/activities?pageIndex=1&pageSize=10&categoryId=9‘)

 

注意:在某些get請求中,需要辨別使用者身份,因此會需要在請求中發送cookie內容,如某些需要使用者登入才能訪問的頁面,在接下來的文章中會進行講解 

 

四、post請求

1.以表單形式傳遞參數:

想要發送一些表單形式的資料,只需簡單的傳遞一個字典給data關鍵字,在發送請求的時候,會自動編碼為表單的形式,例如:

content={‘key1‘:‘value1‘,‘key2‘:‘value2‘}r=requests.post(‘http://www.xxx/api/v1/user/login‘,data=content)

 

2.以json形式傳遞參數:

在很多情況下,想要發送的資料並非為表單形式,而是一個json格式的字串,如果傳遞給data關鍵字的內容不是一個dict,而是

一個string,那麼在發送的時候,資料會被直接發送出去,不會自動編碼為表單形式。

為了將一個資料結構轉換為json格式的字串,首先得需要匯入一個json包,兩種常用的方法為:json.dumps()與json.loads()

 

import jsoncontent={‘name‘:‘Nee‘,‘age‘:‘18‘}str_content=json.dumps(content)      #把dick編碼為json格式的字串print (str_content)print (type(str_content))#結果:{"name": "Nee", "age": "18"}<class ‘str‘>                        #此時的類型為strcontent=json.loads(str_content)      #把json格式的字串解碼為原先的資料結構print (content)print (type(content))#結果{‘name‘: ‘Nee‘, ‘age‘: ‘18‘}<class ‘dict‘>

 

注意:1.json編碼支援的基本類型有:None, bool, int, float, string, list, tuple, dict。對於字典,json會假設key是字串(字典中的任何非字串key都會在編            碼時轉換為字串),要符合JSON規範,應該只對python列表和字典進行編碼。此外,在WEB應用中,把最頂層對象定義為字典是一種標準做法。                    2.json編碼的格式幾乎和python文法一致,略有不同的是:True會被映射為true,False會被映射為false,None會被映射為null,元組()會被映射為列表[],如:

content={‘a‘:None,‘b‘:True,‘c‘:False,‘d‘:(1,2)}str_content=json.dumps(content)print (str_content)#結果:{"a": null, "b": true, "c": false, "d": [1, 2]}

 

因此 想要在post請求中使用data關鍵字來傳遞json格式的字元竄,首先得把dict轉為string,例如:

import requestsimport jsonurl=‘http://www.xxx.com/api/v1/user/login‘data={"ua":"13700002000","pw":"12qwaszx","ct":12}r=requests.post(url,data=json.dumps(data))         #在一些post請求中,還需要用到headers部分,此處未加,在下文中會說到   print (r.text)#結果{"newUser":false,"user":{"userId":531,"mobileNo":"13700002000","userName":"測試使用者2000".......}

除了可以對dick編碼後以string的方式傳遞參數外,還可以直接使用json關鍵字直接傳遞,在傳遞時會自行進行編碼為string類型

import requests            #不需要匯入json模組url=‘http://xxxx/api/v1/user/login‘data={"ua":"13700002000","pw":"12qwaszx","ct":12}r=requests.post(url,json=data)

 

在post請求中用到的head部分和cookie部分。在之後的文章中會進行講解

 

五、響應

1.響應狀態

在請求發送成功後,可以用status_code來查看相應狀態(每個狀態代表的具體意義不在此文介紹)

import requestsr=requests.get(url)print(r.status_code)-----結果-----200

 

2.響應內容

在上面的內容中,已經展示了用text來擷取相應的內容,返回的內容為string

import requestsr=requests.get(url)print (r.text)print (type(r.text))       #查看返回內容的類型-----結果-----..........                 #返回的具體內容<class ‘str‘>              #類型為string 

 

除此之外,requests中也帶有帶有一個內建的json解碼器,將返回的內容轉換為dict

import requestsr.requests.get(url)print (r.json())print (type(r.json()))-----結果-----......<class ‘dict‘>

那麼通過json解碼器轉為dict後,想要查看到返回內容中某個具體參數的值,就比較方便啦!

 

3.響應內容編碼格式

在擷取響應內容的時候,可以使用r.encoding來查看相應內容的編碼格式

import requestsr=requests.get(url)print(r.encoding)-----結果-----UTF-8

 

也可以進行指定編碼,當改變了編碼方式是後,每次擷取響應內容,都會使用新的編碼方式

import requestsr=requests.get(url)r.encoding=‘ISO-8859-1‘print(r.text)

 

4.回應標頭內容

import requestsr=requests.get(url)print (r.headers)

 

5.cookies

import requestsr=requests.get(url)print (r.cookies)


python+reque

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.