測試萌新Python學習(五)接口自動化測試requests

requests

    • 接口自動化測試
      • requests庫
      • 基本實現請求-GET
      • 基本實現請求-POST
      • 基本實現請求-補充
    • session
    • Cookie和Session
    • 案例
    • params

接口自動化測試

概念程序驅動代替人工驅動去實現接口測試

實現方式

  • 測試工具(jmeter, postman, …)
  • 編碼工具(python, java, …)

比較

  • 工具
    • 優點: 1.不需要編程基礎 2.功能都是封裝好的, 直接調用
    • 缺點: 不靈活
  • 編碼
    • 優點: 靈活
    • 缺點: 1.需要編程基礎 2.功能需要自實現, 效率偏低

requests庫

概念 requests 庫是使用 python 編寫的, 可以調用該庫的函數直接向服務器發送 http 請求, 并接收響應

角色定位 jmeter 中的 http 請求

安裝

# 命令行輸入命令并回車
pip install requests

需要有網絡

校驗

# 命令行輸入命令并回車
pip list

基本實現請求-GET

"""需求: 編寫 python 代碼, 訪問案例的查詢接口 (/sa/listarea)流程: 三要素1.根據 url 定位接口資源2.提交測試數據3.發送請求, 接收并處理響應結果
"""
# 導包
import requests
# 一行代碼搞定
response = requests.get("http://localhost:8081/sa/listarea")
# 打印結果
print("狀態碼:", response.status_code)
print("響應體:", response.text)

基本實現請求-POST


"""需求: 編寫 python 代碼, 訪問案例的新增接口 (/sa/addarea)
"""
# 導包
import requests
# 三要素
data = {"areaName": "中發白", "priority": "123"}
response = requests.post("http://localhost:8081/sa/addarea", data=data)
print("狀態碼:", response.status_code)
print("響應體:", response.text)

基本實現請求-PUT

"""需求: 編寫 python 代碼, 訪問案例的修改接口 (/sa/modifyarea)
"""
# 導包
import requests
# 三要素
# data = {"areaName": "中發白", "priority": "123"}
myJson = {"areaId": "40","areaName": "東南西北中發白","priority": "888"
}
response = requests.put("http://localhost:8081/sa/modifyarea", json=myJson)
print("狀態碼:", response.status_code)
print("響應體:", response.text)

基本實現請求-DELETE

"""需求: 編寫 python 代碼, 訪問案例的刪除接口 (/sa/removearea)
"""
# 導包
import requests
# 三要素
response = requests.delete("http://localhost:8081/sa/removearea", params={"areaId": "40"})
print("狀態碼:", response.status_code)
print("響應體:", response.text)

基本實現請求-補充

四種操作的代碼結構基本一致

區別

  • 函數名不同

  • 提交測試數據的參數名不同

    • get/delete 使用 params

    • post/put 使用 data/json

      data 提交鍵值對格式數據

      json 提交JSON格式數據

為什么

  • get/delete 請求格式: 提交的數據在請求行
  • post/put 請求格式: 提交的數據在請求體

基本實現響應-response 響應由行頭體三部分組成, 解析也是圍繞行頭體解析


"""需求: 響應由行頭體三部分組成, 需要用requests 相關實現解析響應中的行頭體
"""
import requests
response = requests.get("http://www.baidu.com")
# 行解析
print("URL:", response.url)
print("狀態碼:", response.status_code)
print("-"*80)
# 頭獲取
print("獲取所有響應頭:", response.headers)
print("獲取所有cookie:", response.cookies)
print("獲取所有編碼集:", response.encoding)
print("-"*80)
# 體獲取
print("以文本的方式獲取響應體:", response.text)    # 服務器傳過來的是文本信息, 如 html 文檔
# print("以二進制的方式獲取響應體:", response.content)    # 服務器傳過來的是圖片/視頻/音頻等非文本數據
# print("以JSON的方式獲取響應體:", response.json())    # 服務器傳過來的是json格式數據, 調用該方法以json語法解析數據

登錄實現思路cookie

# 核心知識點: 關聯
# 獲取登錄接口響應的 cookie, 提取出來作為查詢訂單接口要提交的參數
import requests
# 訪問接口1: 訪問登錄接口
response1 = requests.post("login接口", data={"username": "xxx", "password": "yyy"})
# 獲取 cookie, 再獲取 cookie 中的 xxID 形式類似于{"xxID": "zzz"}
id = response1.cookies.get("xxID")
# 訪問接口2: 訂單查詢接口
requests.get("查詢訂單接口", cookies={"xxID": id})

session

import requests
# 獲取 session 對象
mySession = requests.Session()
# 請求1: 使用 session 登錄
#requests.post(...)
response1 = mySession.post("login接口", data={"username": "xxx", "password": "yyy"})
# 請求2: 使用 session 獲取訂單
response2 = mySession.get("查詢訂單接口")

Cookie和Session

都是用于在Web應用程序中跟蹤用戶狀態的機制,但它們之間有一些關鍵區別。
Cookie

1.定義:Cookie是在用戶計算機上存儲的小型文本文件,由服務器發送到用戶的瀏覽器,并保存在瀏覽器的文件系統中。
2.用途:主要用于在客戶端(用戶的瀏覽器)和服務器之間傳遞信息,以跟蹤和識別用戶。通常,Cookie包含有關用戶的會話信息、偏好設置或其他數據。
3.特點:

a.被存儲在用戶的本地計算機上,因此可以在不同的頁面和會話之間持久存在。
b.可以設置過期時間,可以是會話級別的(瀏覽器關閉時刪除)或持久性的(在指定的時間后過期)。
c.由于存儲在客戶端,Cookie可以在用戶訪問網站時發送給服務器,從而識別用戶并提供個性化的體驗。

Session

1.定義:Session是在服務器上創建的唯一會話標識符,用于跟蹤用戶在網站上的活動狀態。
2.用途:主要用于在服務器端存儲用戶的狀態信息,以便在用戶訪問網站的不同頁面時保持用戶的狀態和數據。
3.特點:

a.存儲在服務器上,通常以內存中的數據結構或數據庫中的條目的形式存在。
b.每個會話都有一個唯一的會話標識符(Session ID),通過該標識符可以在用戶請求之間識別用戶。
c.由于存儲在服務器上,Session數據對客戶端不可見,因此相對于Cookie更安全。
d.通常,Session會在用戶關閉瀏覽器或一段時間后過期,具體取決于服務器的配置。

總結:

1.Cookie存儲在客戶端,而Session存儲在服務器端。
2.Cookie通常用于識別和跟蹤用戶,而Session用于在用戶訪問期間保持狀態和數據。
3.Cookie的生命周期由客戶端控制,而Session的生命周期由服務器控制。
4.Cookie對客戶端可見,可以在不同的頁面和會話之間持久存在,而Session對客戶端不可見,只能通SessionID來識別用戶。
5.Cookie通常用于存儲較小的數據,而Session可以存儲更大量的數據。

案例

需求

使用 requests庫調用 tpshop登錄功能的相關接口, 完成登錄操作, 登錄成功后獲取 “我的訂單” 頁面(其實就是訪問訂單列表接口)

相關接口:
1.獲取驗證碼:http://localhost/index.php?m=Home&c=User&a=verify GET(此接口返回驗證碼 和 cookie)
2.登錄:http://localhost/index.php?m=Home&c=User&a=do_login POST參數: {"username":"xxxxx","password":"yyyy","verify_code":"zzzz"},非 JSON 提交
3.我的訂單:http://localhost/Home/Order/order_list.html GET

cookie

import requests
# 1.獲取驗證碼, 并獲得 cookie  中的 PHPSESSID
response1 = requests.get("http://localhost/index.php?m=Home&c=User&a=verify")
print(response1.status_code)
print(response1.cookies)
id = response1.cookies.get("PHPSESSID")
print(id)
print("-"*80)
# 2.登錄, 并提交cookie
data = {"username": "17150312012", "password": "123456", "verify_code": "8888"}
cookie = {"PHPSESSID": id}
response2 = requests.post("http://localhost/index.php?m=Home&c=User&a=do_login", data=data, cookies=cookie)
print(response2.status_code)
print(response2.text)
print("-"*80)
# 3.獲取訂單, 需要再次提交 cookie
response3 = requests.get("http://localhost/Home/Order/order_list.html", cookies=cookie)
print(response3.status_code)
print(response3.text)

session

import requests
# 創建 session 對象
session = requests.Session()
# 1.獲取驗證碼(隱式獲取cookie)
response1 = session.get("http://localhost/index.php?m=Home&c=User&a=verify")
print(response1.status_code)
print("-"*80)
# 2.登錄
data = {"username": "17150312012", "password": "123456", "verify_code": "8888"}
response2 = session.post("http://localhost/index.php?m=Home&c=User&a=do_login", data=data)
print(response2.status_code)
print(response2.text)
print("-"*80)
# 3.獲取訂單
response3 = session.get("http://localhost/Home/Order/order_list.html")
print(response3.status_code)
print(response3.text)

params

  1. URL 參數:在Web開發中,“params” 可能指的是通過 URL 傳遞的參數。例如,在以下URL中,“params”部分指的是參數:https://example.com/api?param1=value1&param2=value2
  2. 函數參數:在編程中,特別是在函數或方法中,“params”通常是指傳遞給函數或方法的參數。例如,在Python中定義一個函數時可以指定參數,然后在調用函數時傳遞這些參數。
  3. HTTP 請求參數:在Web開發中,“params” 可能指的是在 HTTP 請求中發送的參數。這些參數可以是通過 URL 查詢字符串傳遞的,也可以是通過 POST 請求體發送的。
  4. 數據庫查詢參數:在數據庫查詢中,“params” 通常指的是用于過濾、排序或限制結果的參數。這些參數可以是通過 SQL 查詢語句的參數化查詢傳遞的。

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

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

相關文章

Network Compression

聽課(李宏毅老師的)筆記,方便梳理框架,以作復習之用。本節課主要講了Network Compression,包括為什么要壓縮,壓縮的主要手段(pruning,knowledge distillation,parameter quantization,architect…

Elasticsearch_sql插件安裝+使用

一、安裝 前提是你先安裝好了elasticseach,安裝過程在我上一篇博客有說,可以看一下。 在elasticsearch容器啟動的情況下,進入到elasticsearch容器,Elasticsearch_sql倉庫,比如我的版本是8.11.2,那么我就選…

[藍橋杯]真題講解:抓娃娃(思維+二分)

[藍橋杯]真題講解&#xff1a;抓娃娃&#xff08;思維二分&#xff09; 一、視頻講解二、正解代碼1、C2、python33、Java 一、視頻講解 [藍橋杯]真題講解&#xff1a;抓娃娃&#xff08;思維二分&#xff09;&#xff09; 二、正解代碼 1、C #include<bits/stdc.h> #d…

fastapi+vue實現導入Excel表格的功能

1.前端部分 1.1 api設置 // 導入用戶 export function uploadUser(data) {const formData new FormData();formData.append(file, data); // data 是從文件上傳事件中獲取的文件對象return request({url: /users/upload,method: post,headers: {Content-Type: multipart/fo…

前端CSS3基礎1(新增長度單位,盒子模型,背景,邊框,文本屬性,漸變,字體,2D變換,3D變換)

前端CSS3基礎1&#xff08;新增長度單位&#xff0c;盒子模型&#xff0c;背景&#xff0c;邊框&#xff0c;文本屬性&#xff0c;漸變&#xff0c;字體&#xff0c;2D變換&#xff0c;3D變換&#xff09; CSS3 新增長度單位CSS3 新增盒子模型相關屬性box-sizing怪異盒模型box-…

實現簡易版Vuex

從實現一個簡單的 Vuex 類來了解 Vuex 的工作原理。 實現思路 Vuex 下擁有 install 方法和 Store 類。即創建一個 Vuex 的模塊&#xff0c;這個模塊導出 install 方法和 Store 類。 install 方法 Vuex 是 Vue 的一個插件&#xff0c;所以需要實現 Vue 插件約定的 install 方…

Linux:ftp文件傳輸實驗

Linux&#xff1a;ftp文件傳輸實驗 實驗實現 # 安裝對應軟件 [rootserver120 ~]# dnf install vsftpd -y [rootserver120 ~]# dnf install lftp -y# 關閉防火墻以及開啟服務 [rootserver120 ~]# systemctl disable --now firewalld [rootserver120 ~]# systemctl enable --no…

ambari-server高可用配置方案

制品 https://kdocs.cn/l/cie4hSgvUunX 前置條件 環境需要支持VRRP協議 環境需要配置好yum源 變更影響面 變更不會影響其他組件 配置lb(需要客戶側配置并提供LB地址) 轉發方式選擇 主備 監聽端口為8080、8440、8441 協議為tcp 后端監聽選擇kde-offline1為主

【RAG 論文】UPR:使用 LLM 來做檢索后的 re-rank

論文&#xff1a;Improving Passage Retrieval with Zero-Shot Question Generation ???? EMNLP 2022, arXiv:2204.07496 Code: github.com/DevSinghSachan/unsupervised-passage-reranking 論文&#xff1a;Open-source Large Language Models are Strong Zero-shot Query…

【HR】阿里三板斧--20240514

參考https://blog.csdn.net/haydenwang8287/article/details/113541512 頭部三板斧 戰略能不能落地、文化能不能得到傳承、人才能不能得到保障。 頭部三板斧適用的核心場景有三個&#xff1a;一是戰略不靠譜&#xff1b;二是組織效率低、不聚心&#xff1b;三是人才跟不上。對…

c++ 各版本特性介紹

c C是一種高級編程語言&#xff0c;以其強大的功能、靈活性和高效性而聞名。它是由Bjarne Stroustrup在20世紀80年代初期在貝爾實驗室開發的&#xff0c;作為C語言的一個擴展。C不僅包含了C語言的所有特性&#xff0c;還引入了面向對象編程&#xff08;OOP&#xff09;的概念&…

基于Vue3+ElementPlus項目,復制文字到剪貼板功能實踐指南,揭秘使用js-tool-big-box工具庫的核心優勢

在前端開發項目中&#xff0c;很多時候有那么一個場景&#xff0c;就是要求將一段文案復制下來&#xff0c;這段文案可能是一串很長的id&#xff0c;可能是一條命令語句&#xff0c;可能是一小段文案&#xff0c;復制到剪貼板上。這樣有利于用戶復制到其他地方去&#xff0c;使…

自然資源-城鄉規劃行業未來二十年將何去何從?

自然資源-城鄉規劃行業未來二十年將何去何從? 城鄉規劃行業未來風口在以下幾個方向&#xff0c;看好啦&#xff01;緊跟國家發展戰略和政策背景。 1.大數據的城市規劃應用。 包含:公共數據平臺的搭建CIM&#xff0c;數據賦能治理&#xff0c;城市規劃中大數據應用的研究 等…

微軟必應bing國內官方代理商,廣告賬戶如何開戶?

微軟必應Bing作為全球知名的搜索引擎之一&#xff0c;其廣告平臺為眾多企業提供了廣闊的市場空間和精準的推廣機會。對于中國內地的企業而言&#xff0c;通過必應Bing開展國內廣告推廣不僅能夠觸及更廣泛的潛在客戶群體&#xff0c;還能有效提升品牌影響力。通過微軟必應Bing國…

【算法作業】均分卡牌,購買股票

問題描述 John 有兩個孩子&#xff0c;在 John病逝后&#xff0c;留下了一組價值不一定相同的魔卡&#xff0c; 現在要求你設計一種策略&#xff0c;幫John的經管人將John的這些遺產分給他的兩個孩子&#xff0c;使得他們獲得的遺產差異最小&#xff08;每張魔卡不能分拆&#…

搜索引擎的設計與實現(三)

目錄 5 系統詳細實現 5.1實現環境配置 5.2功能實現 5.2.1 建立索引 5.2.2 文件搜索實現 5.2.3 數據庫的連接配置 5.2.4 數據庫搜索實現 5.2.5 后臺數據編輯實現 前面內容請移步 搜索引擎的設計與實現&#xff08;二&#xff09; 免費源代碼&畢業設計論文 搜索…

git-刪除workspace.xml的跟蹤

問題描述 .gitignore 文件內容如下&#xff1a; .pyc *.pyc user_files/ .vscode/ __pycache__//.idea/misc.xml /.idea/modules.xml /.idea/inspectionProfiles/profiles_settings.xml /.idea/inspectionProfiles/Project_Default.xml /.idea/batrp_webbackend-server-dev.i…

NARUTO 復現記錄

1 環境配置 下載項目&#xff0c;一定要 git 下載全項目&#xff0c;下載完后要檢查third_parities 里面的coslam和neural_slam_eval 文件全不全。 git clone --recursive https://github.com/oppo-us-research/NARUTO.git 環境配置 注意 bash scripts/installation/conda…

番外篇 | 利用PyQt5+YOLOv5來搭建目標檢測系統(附可視化界面+功能介紹+源代碼)

前言:Hello大家好,我是小哥談。PyQt5是一個Python綁定的Qt庫,是用于創建圖形用戶界面(GUI)和其他應用程序組件的工具包。PyQt5提供了許多GUI元素,如按鈕、文本框、標簽等,也提供了許多Qt的功能,如網絡、數據庫、XML等。通過PyQt5可以在Python中使用Qt的豐富功能和強大的工…

克服虧損的負面影響 學學現貨白銀止損的方法

一個多月以前&#xff0c;現貨黃金的上漲還十分強勁&#xff0c;一度還逼近歷史的高位30大關。但是我們看近半個月以來&#xff0c;現貨白銀價格出現了調整。很多在高位買入的投資者都承受了較大的虧損&#xff0c;這時候就凸顯出了現貨白銀止損的作用。如果投資者能夠通過近期…