軟件測試之使用Requests庫進行接口測試

文章目錄

  • 前言
  • Requests庫是什么
  • 為什么要用Requests庫進行接口測試
  • 安裝Requests庫
  • Requests庫使用
    • 發送GET請求
    • 發送帶查詢參數的GET請求
    • 響應內容格式
    • 添加請求頭信息
    • 發送一個POST請求
    • 查看響應內容
    • 斷言
    • 請求超時
    • Cookie與Session模擬登錄
  • 參考目錄


前言

閱讀本文前請注意最后編輯時間,文章內容可能與目前最新的技術發展情況相去甚遠。歡迎各位評論與私信,指出錯誤或是進行交流等。


本文僅對Requests庫做了簡單的介紹,具體使用和更多內容請查看官網文檔,如果還有具體的使用問題可查詢更多其他資料,也歡迎在評論區留言。

Requests庫是什么

Requests是一個很實用的Python HTTP客戶端庫,編寫爬蟲和測試服務器響應數據時經常會用到,Requests官方中文文檔

為什么要用Requests庫進行接口測試

之前所學的Postman和Jmeter工具只需要通過點擊即可進行接口測試,操作簡單方便,結果直觀。但相比于代碼實現仍有一定的缺點:

  • 工具讀取測試數據不靈活(無法直接讀取或存儲Json格式數據)
  • 不方便測試加密數據
  • 編寫復雜的業務邏輯與復雜斷言腳本較為麻煩

安裝Requests庫

在安裝了python的基礎上(python一般會帶有pip包),在命令提示符(CMD)中輸入即可。

$ pip install requests
獲得源碼
如果想要獲取Requests的源代碼,可以從github上的公共版本庫獲取到代碼。
git clone git://github.com/kennethreitz/requests.git

Requests庫使用

發送GET請求

#1、導入requuests包
import requests
#2、發送get請求
r = requests.get("http://www.baidu.com")
#3、打印結果
print(r)
print(r.status_code)
print(r.headers)
print(r.url)
print(r.cookies)
print(r.text)嘗試獲取百度網頁的信息。
>>> r = requests.get("http://www.baidu.com")
返回一個名為 r 的 Response 響應對象。我們可以從這個對象中獲取所有我們想要的信息。

發送帶查詢參數的GET請求

為 URL 的查詢字符串(query string)傳遞某種數據。如果你是手工構建 URL,那么數據會以鍵值對的形式置于 URL 中,跟在一個問號的后面。例如, httpbin.org/get?key=val。 Requests 使用 params 關鍵字參數,以一個字符串字典來提供這些參數。舉例來說,如果你想傳遞 key1=value1 和 key2=value2 到 httpbin.org/get ,那么你可以使用如下代碼:

payload = {‘key1’: ‘value1’, ‘key2’: ‘value2’}
r = requests.get(“http://httpbin.org/get”, params=payload)
通過打印輸出該 URL,你能看到 URL 已被正確編碼:
print(r.url)
http://httpbin.org/get?key2=value2&key1=value1
注意字典里值為 None 的鍵都不會被添加到 URL 的查詢字符串里。

你還可以將一個列表作為值傳入:

payload = {‘key1’: ‘value1’, ‘key2’: [‘value2’, ‘value3’]}
r = requests.get(‘http://httpbin.org/get’, params=payload)
print(r.url)
http://httpbin.org/get?key1=value1&key2=value2&key2=value3

響應內容格式

Requests 會自動解碼來自服務器的內容。大多數 unicode 字符集都能被解碼,可以使用 r.encoding 屬性來改變它:

r.encoding = 'utf-8‘
如果你改變了編碼,每當你訪問 r.text ,Request 都將會使用 r.encoding 的新值。
比如 HTTP 和 XML 自身可以指定編碼。這樣的話,你應該使用 r.content 來找到編碼,然后設置 r.encoding 為相應的編碼。這樣就能使用正確的編碼解析 r.text 了。

你也能以字節的方式訪問請求響應體,對于非文本請求:r.content
Requests 中也有一個內置的 JSON 解碼器,助你處理 JSON 數據:r.json()
獲取來自服務器的原始套接字響應:r.raw

添加請求頭信息

為請求添加 HTTP 頭部,傳遞一個 dict 給 headers 參數就可以了。

url = ‘https://api.github.com/some/endpoint’
headers = {‘user-agent’: ‘my-app/0.0.1’}
r = requests.get(url, headers=headers)

注意: 添加的header 的優先級低于某些特定的信息源,例如:
如果在 .netrc 中設置了用戶認證信息,使用 headers= 設置的授權就不會生效。而如果設置了 auth= 參數,.netrc的設置就無效了。
如果被重定向到別的主機,授權 header 就會被刪除。
代理授權 header 會被 URL 中提供的代理身份覆蓋掉。

更進一步講,Requests 不會基于添加 header 的具體情況改變自己的行為。只不過在最后的請求中,所有的 header 信息都會被傳遞進去。

發送一個POST請求

發送一些編碼為表單形式的數據給服務器,只需傳遞一個字典給 data 參數。數據字典在發出請求時會自動編碼為表單形式:

payload = {‘key1’: ‘value1’, ‘key2’: ‘value2’}
r = requests.post(“http://httpbin.org/post”, data=payload)
print(r.text)

還可以為 data 參數傳入一個元組列表。在表單中多個元素使用同一 key 的時候,這種方式尤其有效:

payload = ((‘key1’, ‘value1’), (‘key1’, ‘value2’))
r = requests.post(‘http://httpbin.org/post’, data=payload)
print(r.text)

data 參數接受編碼為 JSON 格式的數據,但要先將數據進行轉換

import json
url = ‘https://api.github.com/some/endpoint’
payload = {‘some’: ‘data’}
r = requests.post(url, data=json.dumps(payload))

還可以使用 json 參數直接傳遞,然后它就會被自動編碼

url = ‘https://api.github.com/some/endpoint’
payload = {‘some’: ‘data’}
r = requests.post(url, json=payload)

POST一個文件

url = ‘http://httpbin.org/post’
files = {‘file’: open(‘report.xls’, ‘rb’)}
r = requests.post(url, files=files)
關于上傳文件的高級用法請參考官方文檔高級用法一節。

查看響應內容

在這里插入圖片描述
更多響應內容請查看官方文檔

斷言

接收返回的響應結果后,我們可以使用assert關鍵字來判斷返回的狀態碼是否為200:
assert response.status_code == 200

可以對返回的內容進行斷言。例如,我們可以使用assert關鍵字來判斷返回的JSON中的某個字段的值是否符合預期:

assert response.json()[‘field’] == ‘value’

如果實際結果不符合預期,斷言會失敗,程序會拋出異常。
除了使用assert關鍵字,我們還可以結合unittest框架中的斷言方法來進行斷言處理。
首先,我們需要導入unittest庫:

import unittest

例如,我們可以使用assertEqual()方法來判斷兩個值是否相等:

class TestAPI(unittest.TestCase):def test_response_status_code(self):response = requests.get(url)self.assertEqual(response.status_code, 200)

請求超時

為防止服務器不能及時響應,大部分發至服務器的請求都應該帶著 timeout 參數。在默認情況下,除非顯式指定了 timeout 值,requests 是不會自動進行超時處理的。如果沒有 timeout,你的代碼可能會掛起若干分鐘甚至更長時間。

requests 庫將一個請求超時分成了兩部分:

連接超時指的是在你的客戶端實現到遠端機器端口的連接時(對應的是connect()_),Request 會等待的秒數。

一旦你的客戶端連接到了服務器并且發送了 HTTP 請求,讀取超時指的就是客戶端等待服務器發送請求的時間。

如下所示:只對timeout設置了一個值
r = requests.get(‘https://github.com’, timeout=5)
這一 timeout 值將會用作 connect 和 read 二者的和。

如果要分別制定,就傳入一個元組:
r = requests.get(‘https://github.com’, timeout=(3.05, 27))

Cookie與Session模擬登錄

Cookie:利用headers參數,將抓包獲取的 Cookie 放到 headers 參數中

   headers={"Cookie":"手動抓取的 Cookie ","User-Agent":""  }html=request.get(url=url,headers=header).text

Session:

import requests
def run():headers = {'User-Agent': 'ozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36'}data = {'username': 'xxxx','password': 'xxxx'}# 實例化 session 對象session = requests.session()# 使用session發送請求,登錄網站,返回的cookie保存其中session.post('https://passport.baidu.com/center', headers=headers, data=data)# 使用由session對象請求需要登錄才能訪問的頁面,得到信息返回 r = session.get(url, headers=headers)with open('csdn-1.html', 'w', encoding='utf-8') as f:f.write(r.content.decode())if __name__ == '__main__':run()

本文僅對Requests庫做了簡單的介紹,具體使用和更多內容請查看官網文檔,如果還有具體的使用問題可查詢更多其他資料,也歡迎在評論區留言。


參考目錄

https://requests.readthedocs.io/projects/cn/zh-cn/latest/
https://www.bilibili.com/video/BV1uz411q7Pg
https://www.bilibili.com/video/BV1pT4y1A7dV
https://blog.csdn.net/sallyyellow/article/details/129878909
https://blog.csdn.net/Ghjkku/article/details/127281184

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/72359.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/72359.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/72359.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AttributeError: module ‘backend_interagg‘ has no attribute ‘FigureCanvas‘

AttributeError: module backend_interagg has no attribute FigureCanvas 這個錯誤通常是由于 Matplotlib 的后端配置問題引起的。具體來說,Matplotlib 在嘗試加載某個后端時,發現該后端模塊中缺少必要的屬性(如 FigureCanvas)&a…

iWebOffice2015 中間件如何在Chrome107及之后的高版本中加載

iWebOffice2015是江西金格科技有限公司開發的一款智能文檔中間件,和一些知名OA及ERP公司曾經達成OEM合作,所以用戶一度比較多,但不幸的是Chromium內核瀏覽器在2022年10月份發布的107版本中永久取消了對PPAPI插件的加載支持,導致使…

【MyBatis Plus JSON 處理器簡化數據庫操作】

文章目錄 什么是 MyBatis-Plus JSON 處理器?開始使用 MyBatis-Plus JSON 處理器步驟 1: 創建實體類步驟 2: 創建 Mapper 接口步驟 3: 查詢 JSON 數據步驟 4: 插入和更新 JSON 數據 什么是 MyBatis-Plus JSON 處理器? MyBatis-Plus 是一個基于 MyBatis 的…

OpnenHarmony 開源鴻蒙北向開發——1.開發環境搭建(DevEco Studio 5.03)

我這邊是基于window下對OpenHarmony開源鴻蒙進行北向開發。 一、安裝DevEco Studio 1、下載 下載中心 | 華為開發者聯盟-HarmonyOS開發者官網,共建鴻蒙生態 2、安裝 下載完成之后進行解壓 雙擊進行安裝 按照我的步驟進行 選擇安裝目錄,全部配置完成后…

深入 Python 網絡爬蟲開發:從入門到實戰

一、為什么需要爬蟲? 在數據驅動的時代,網絡爬蟲是獲取公開數據的重要工具。它可以幫助我們: 監控電商價格變化抓取學術文獻構建數據分析樣本自動化信息收集 二、基礎環境搭建 1. 核心庫安裝 pip install requests beautifulsoup4 lxml …

linux(ubuntu)中Conda、CUDA安裝Xinference報錯ERROR: Failed to build (llama-cpp-python)

文章目錄 一、常規辦法二、繼續三、繼續四、缺少 libgomp庫(最終解決)在 Conda 環境中安裝 libgomp 如果符合標題情況 執行的: pip install "xinference[all]"大概率是最終解決的情況。 一、常規辦法 llama-cpp-python 依賴 CMak…

OpenGL中繪制圖形元素的實現(使用visual studio(C++)繪制一個矩形)

目標&#xff1a;使用OpenGL提供的函數繪制矩形、線段、三角形等基本圖形元素 所需效果 實驗步驟 1、配置OpenGL&#xff08;詳情參見OpenGL的配置&#xff09; 2、頭文件引入 #include <gl/glut.h> 3、編寫方法體 1>矩形實現 //繪制矩形 void DisplayRectangl…

庖丁解java(一篇文章學java)

(大家不用收藏這篇文章,因為這篇文章會經常更新,也就是刪除后重發) 一篇文章學java,這是我滴一個執念... 當然,真一篇文章就寫完java基礎,java架構,java業務實現,java業務擴展,根本不可能.所以,這篇文章,就是一個索引,索什么呢? 請看下文... 關于決定開始寫博文的介紹 …

面試高頻#LeetCode#Hot100-字母異位詞分組

題號鏈接 49. 字母異位詞分組 - 力扣&#xff08;LeetCode&#xff09; 1首先定義map集合一個String對應一個String[]集合&#xff0c;遍歷字符串數組 2對其先進行拆分&#xff0c;拆分為字符數組&#xff0c;再進行排序&#xff0c;再轉為字符串 3如果key值沒有就創建一個字符…

esProc SPL vs DuckDB:多源數據處理誰更勝一籌?

DuckDB 和 esProc SPL 都支持多樣數據源處理&#xff0c;這里比較一下兩者的差異。 支持的數據源種類 DuckDB 支持的數據源類型覆蓋了常見的文件格式&#xff08;如 CSV、Parquet、JSON、Excel&#xff09;、云存儲&#xff08;如 AWS S3、Azure Blob Storage&#xff09;以及…

超精密工件小孔幾何尺寸測量:自動化解決方案

下載鏈接&#xff1a;&#xff08;最新版本&#xff09;超精密工件小孔幾何尺寸測量&#xff1a;自動化解決方案python腳本代碼&#xff0c;可直接運行&#xff0c;內包含測試數據&#xff0c;親測好用資源-CSDN文庫 在現代制造業中&#xff0c;超精密工件的質量控制至關重要&a…

重生之我在學Vue--第11天 Vue 3 高級特性

重生之我在學Vue–第11天 Vue 3 高級特性 文章目錄 重生之我在學Vue--第11天 Vue 3 高級特性前言一、Teleport&#xff1a;打破組件層級的瞬移術1. 什么是Teleport&#xff1f;2. 核心用法3. 實戰技巧 二、Suspense&#xff1a;異步組件的優雅過渡1. 為什么需要Suspense&#x…

MCU的工作原理:嵌入式系統的控制核心

MCU的工作原理可以概括為以下幾個步驟&#xff1a; 1. 初始化 上電后&#xff0c;MCU從Flash存儲器中加載程序代碼&#xff0c;并初始化外設和寄存器。 2. 任務執行 根據程序邏輯&#xff0c;MCU執行數據處理、外設控制和通信等任務。通過中斷系統實時響應外部事件。 3. 低…

游戲引擎學習第158天

回顧和今天的計劃 我們在這里會實時編碼一個完整的游戲&#xff0c;沒有使用引擎或庫&#xff0c;一切都由我們自己做所有的編程工作&#xff0c;游戲中的每一部分&#xff0c;無論需要做什么&#xff0c;我們都親自實現&#xff0c;并展示如何完成這些任務。今天&#xff0c;…

k8s基礎架構介紹

k8s基礎架構介紹 k8s 是對容器進行編排的一種工具。通過k8s可以實現對容器的編排、部署、更新等 學習k8s之前&#xff0c;先了解相關的一些使用和配置k8s的一些工具。 k8s的常用工具 在 kubernetes 中&#xff0c;主要有三個日常使用的工具&#xff0c;這些工具使用 kube 前…

興達易控Profinet 轉 ModbusTCP跨網段通信模塊

Profinet 轉 ModbusTCP/跨網段通信模塊 Profinet轉ModbusTCP/跨網段通信模塊&#xff0c;作為現代工業自動化系統中不可或缺的重要組件&#xff0c;正日益受到廣泛關注和應用。 這種模塊的核心功能是將Profinet網絡協議轉換為Modbus TCP協議&#xff0c;實現不同網絡之間的無縫…

創新技術引領軟件供應鏈安全,助力數字中國建設

編者按 隨著數字化轉型的加速&#xff0c;針對軟件供應鏈的攻擊事件呈快速增長態勢&#xff0c;目前已成為網絡空間安全的焦點。如何將安全嵌入到軟件開發到運營的全流程&#xff0c;實現防護技術的自動化、一體化、智能化&#xff0c;成為技術領域追逐的熱點。 懸鏡安全作為…

某大廠自動化工程師面試題

一些大廠的自動化工程師面試題匯總: 基礎知識類 請解釋什么是PLC(可編程邏輯控制器)?什么是PID控制?它在自動化系統中的作用是什么?請描述一下工業4.0的基本概念。編程與控制系統類 你熟悉哪些PLC編程語言?請舉例說明。如何在SCADA系統中實現數據采集和監控?請解釋一下…

Java 大視界 -- 基于 Java 的大數據分布式數據庫架構設計與實踐(125)

&#x1f496;親愛的朋友們&#xff0c;熱烈歡迎來到 青云交的博客&#xff01;能與諸位在此相逢&#xff0c;我倍感榮幸。在這飛速更迭的時代&#xff0c;我們都渴望一方心靈凈土&#xff0c;而 我的博客 正是這樣溫暖的所在。這里為你呈上趣味與實用兼具的知識&#xff0c;也…

cursor中使用prettier-code formatter插件方法

cursor的"擴展"中搜索"prettier-code formatter"&#xff0c;然后安裝 點擊cursor編輯器右上角“更多操作”&#xff0c;然后打開“配置編輯器” 按照圖片進行操作&#xff0c;進入到editor在editor中&#xff0c;找“格式化“&#xff0c;把Format On Sav…