request發送http請求


  今天正式開始為大家介紹接口自動化,相信很多做測試的朋友,都用過一些工具,比如jmeter,loadrunner,postman等等,所以今天先給那些基礎不太好的同學,先講講postman如何來測接口以及如何用pthon代碼的方式來發送http請求

首先,我們在做接口測試之前,一般會拿到開發人員那邊的接口文檔,沒有接口文檔是很難快速高效率的去進行測試工作的這部分接口測試,所以,得提前准備好或者拿到一份接口測試

  接下來,小編我以注冊和登錄為例,附上截圖給大家看看,請提前下載安裝好postman工具

一、postman的基本使用

請求頭信息截圖如下:

 如果你不想一個一個的手動寫,可以有一種簡單的方法,

 

看,自動生成了

 這里有幾個注意點要說明:

1.一定結合開發人員給你的接口文檔結合起來進行

2.請求頭,有的沒有,有的有,看接口文檔

3.請求方式要看清是post還是get方式

二、requests發送http請求

這里有的問題會問,做接口測試,只能用工具嗎?可不可以寫代碼的方式來做接口測試?當然可以,python代碼還是很強大的

在寫代碼前,先安裝requests插件,安裝命令:pip install requests

 

 然后,繼續看下面的內容,以登錄接口為例:

import requests

# 登錄的接口地址
url = "http://api.lemonban.com/futureloan/member/login"

# 登錄的參數
params = {
    "mobile_phone": "15879563287",
    "pwd": "lemonban"
}

# 請求頭
headers = {
    "X-Lemonban-Media-Type": "lemonban.v2",
}

# 發送一個登錄的請求
# 請求類型為Content-Type:application/json,參數就應該使用json去傳遞
response = requests.post(url=url, json=params, headers=headers)

print(response)    # 200,請求成功

# 獲取接口返回的數據
print(response.text)

 

 三、requests處理各種請求類型的參數

常見的接口請求參數類型:

1、查詢字符串參數:
    常用於get請求(其他的請求方法用的少),參數會直接拼接在url地址后面
    requests發送請求,傳遞查詢字符串參數,要使用params去傳遞  params=params

2、json類型的參數:
    請求參數類型為 Content-Type:application/json,
    requests發送請求,傳遞json參數,就應該使用json去傳遞     json=params

3、表單類型的參數
    請求參數類型:content-type: application/x-www-form-urlencoded
    requests發送請求,傳遞表單參數,就應該使用data去傳遞  data=params

4、文件上傳:
    請求參數類型:content-type: multipart/form-data
    文件參數要使用files進行傳遞
    文件參數的組裝:
    {"參數名": ("文件名", open以rb模式打開文件, "文件類型")}
    [("參數名", ("文件名", open以rb模式打開文件, "文件類型"))]

import requests

# --------------------查詢字符串參數傳遞-----------------------------
# 查詢字符串參數的傳遞:
url = "http://api.lemonban.com/futureloan/loans"
# 請求參數
params = {
    "pageIndex": 1,
    "pageSize": 20
}
# 請求頭
headers = {
    "X-Lemonban-Media-Type": "lemonban.v2"
}
response1 = requests.get(url=url, params=params, headers=headers)
print(response1.text)

# ----------------------json格式的參數傳遞------------------------------
# 注冊的接口地址
url = "http://api.lemonban.com/futureloan/member/register"
# 參數
params = {
    "mobile_phone": "15879562223",
    "pwd": "lemonban"
}
# 請求頭
headers = {
    "X-Lemonban-Media-Type": "lemonban.v2"
}
response2 = requests.post(url=url, json=params, headers=headers)
print(response2.text)

# ------------------------表單類型參數的傳遞----------------------------------
# 接口地址
url = "https://www.ketangpai.com/UserApi/login"
# 參數
params = {
    "email": "24782578257",
    "password": "1426",
    "remember": 0
}
response3 = requests.post(url=url, data=params)
print(response3.json())


# -----------------------文件上傳---------------------------------
# 上傳文件的接口地址(這是授課老師本地的,我們無法訪問)
url = "http://127.0.0.1:5000/upload"
# 請求的參數
params = {
    "nickname": "1122",
    "age": 18,
    "sex": ""
}
file = {
    "pic": ("jiayouya.gif", open("jiayouya.gif", "rb"), "image/gif")
}
#
response4 = requests.post(url=url, data=params, files=file)
print(response4.json())

四、請求響應數據的提取方式

響應對象response:

一、http響應碼:response.status_code

二、返回的數據提取:
1、text屬性(str):獲取的是原生的json字符串 (用的不多)
2、content屬性(bytes):可以使用decode指定編碼轉換為字符串 (用的不多)
3、json()方法(dict):獲取到的是json轉換的字典/列表 (工作中常用,需重點掌握!!!

三、json類型的數據和 python中數據的對比
      json     python
    {}:    對象                字典
    []:    數組                列表
    空    null                 None
    布爾 false              False
       true                True

import requests

# 登錄的接口地址
url = "http://api.lemonban.com/futureloan/member/login"
# 登錄的參數
params = {
    "mobile_phone": "15879563287",
    "pwd": "lemonban11"
}
# 請求頭
headers = {
    "X-Lemonban-Media-Type": "lemonban.v2",
}
# 發送一個登錄的請求
# 請求類型為Content-Type:application/json,參數就應該使用json去傳遞
response = requests.post(url=url, json=params, headers=headers)
# 獲取接口返回的數據
print(response.text)
print(response.json())

 

五、jsonpath和json數據

json提取數據

首先安裝jsonpath   安裝命令:pip install jsonpath

然后,這里我給出一組數據,如下:這是登錄之后返回的數據

{'code': 0,
'msg': 'OK',
'data':{
    'id': 2096225,
    'leave_amount': 0.0,
    'mobile_phone': '15879563287',
    'reg_name': '小檸檬',
    'reg_time': '2020-08-21 11:36:56.0',
    'type': 1,
    'token_info': {
        'token_type': 'Bearer',
        'expires_in': '2020-08-21 18:11:31',
        'token': 'eyJhbGciOiJIUzUxMiJ9.eyJtZW1iZXJfaWQiOjIwOTYyMjUsImV4cCI6MTU5ODAwNDY5MX0.dvhKZs67w2jWX9zjqzsQ_7xjE3ggcfuEjtl6HOkmSb0qWkqp8pOiMYzJ6LDSKfGj_6D-1SnxDqd4Ew2fY8oziw'
         }
    },
    'copyright': 'Copyright 檸檬班 © 2017-2020 湖南省零檬信息技術有限公司 All Rights Reserved'
}
from jsonpath import jsonpath
import requests

# 登錄的接口地址
url = "http://api.lemonban.com/futureloan/member/login"
# 登錄的參數
params = {
    "mobile_phone": "15879563287",
    "pwd": "lemonban"
}
# 請求頭
headers = {
    "X-Lemonban-Media-Type": "lemonban.v2",
}
# 發送一個登錄的請求
# 請求類型為Content-Type:application/json,參數就應該使用json去傳遞
response = requests.post(url=url, json=params, headers=headers)
# 獲取接口返回的數據
res = response.json()

# 通過字典鍵值對的方式獲取
# token = res["data"]["token_info"]["token"]
# print(token)

# 通過jsonpath提取
token = jsonpath(res, "$..token")
print(token)

 

 再給大家詳細來張圖:

因為,jsonpath提取數據的語法基本如下:

 如果Json數據中還存在列表,想獲取列表類型的數據信息,怎么獲取?

比如:我給出一個json類型數據,看截圖:

import json
from jsonpath import jsonpath

# 讀取json文件中的數據,轉換為python中的字典
with open("data.json", "r", encoding="utf-8") as f:
    res = json.load(f)

res = jsonpath(res, "$.toplists[1].id")
print(res)

 因此,總結這部分json獲取數據的內容,有以下這么幾點:

1.可直接通過美元符號$        舉例 $..code

2.若需要找列表中的信息,   舉例  $.toplists[1]

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM