今天正式開始為大家介紹接口自動化,相信很多做測試的朋友,都用過一些工具,比如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]