Python+requests+pytest接口自動化測試框架的搭建(全)

🍅 點擊文末小卡片,免費獲取軟件測試全套資料,資料在手,漲薪更快

框架的設計思路

首先要明確進行接口自動化需要的步驟,如下圖所示:

然后逐步拆解需要完成的工作:

1)了解分析需求:了解接口要實現的功能

2)數據準備:根據開發文檔確定接口的基本情況,知曉接口的url、請求方式、入參等信息,然后根據業務邏輯以及入參來預期接口的輸出

  • 需要有一個配置文件來存儲接口的一些基本信息;
  • 需要有一個方法能讀取配置文件;
  • 需要有一個excel或者yaml格式文件來存儲測試數據;
  • 需要有一個方法能讀取測試數據;
  • 需要有一個方法來把讀取到的配置文件和測試數據組裝成測試執行時需要的參數化數據;

如果預期結果是需要根據入參查數據庫來得到的時候還需要一個能執行sql的方法

3)設計&執行測試:生成一個測試文件,可以來根據入參調用接口獲得接口輸出然后驗證

  • 根據pytest的特性可以把準備參數化的數據的工作放到conftest.py下;
  • 需要有一個調用接口以及斷言驗證的測試文件,命名規則為xxx_test.py或者test_xxx.py;
  • 為了更好的對輸出和預期輸出做驗證準備封裝一下系統自帶的斷言;
  • 為了能更好執行測試封裝一下requests模塊,制定統一的輸入輸出標準;
  • 記錄執行錯誤信息引入日志記錄模塊;

4)查看結果:根據斷言結果來判定接口是否滿足需求框架最終的執行順序如下圖所示

框架的基本結構

然后介紹一個每個目錄下都有什么,分別完成什么工作

1、這里每一個文件對應一個接口所需要的測試數據,命名規則為nameA.xlsx或者nameA.yaml(nameA泛指待測接口名稱),文件里面可以存放調用接口所需的參數name、參數value、所需cookie、預期輸出結果

2、assertion.py?

--封裝的斷言方法,用于驗證接口返回值和預期結果是否一致????

config.py

--封裝讀取配置文件的方法????

get_caseparams.py

--把測試數據加工成接口所需要的格式?? ??

log.py

--封裝的記錄日志的方法????

request.py

--封裝的https請求方法,主要是post和get????

selectDB.py

--查詢sql并把結果加工成[dic1,dic2,dic3....]這種格式,每個dic是一條數據? ?? ??

testcasetemplate.py

--這個是根據caseparams文件夾下的測試數據自動在testcase文件夾下生成測試文件的腳本

3、里面存放兩個配置文件,base.ini存放數據庫連接的配置interface.ini是所有測試接口需要的配置。

4、記錄測試的日志文件,沒啥可說的,log.log是當天文件,其他的是對應日期下的歷史日志。

5、conftest.py固定名稱的一個文件,放在被測接口腳本同一個文件夾下,此處的作用是為每個被測腳本提供參數化支持?test_XXX.py這種文件是接口的測試文件,XXX為被測接口的名稱。

6、run.py?? ---測試執行的主入口,如果把該接口自動化測試框架放到jenkins上做持續集成的時候,可以通過配置jenkins來代替這個入口

使用說明

當我們需要有一個接口(假定名稱為abc)需要用本框架進行自動化測試的時候,操作步驟如下:

1、interface.ini文件下添加名稱為abc的節點,然后在該節點下配置好接口的參數文件格式、http請求方式、接口url、接口wiki。

2、casefparams文件夾下創建名稱為abc.xlsx的用例數據文件。

3、執行common文件夾下的testcasetemplate.py,執行的結果是會自動根據前兩步配置的內容在casefile文件夾下生成test_abc.py的腳本文件。

4、編輯test_abc.py添加所需要的斷言,來驗證接口的準確性。

5、執行run.py完成測試。

測試執行詳情為run.py指定要執行測試的測試文件的路徑testcase目錄,根據pytest的運行機制這之前會先調用testcase目錄下的conftest.py,這個文件在此處的作用就是通過遍歷testcase目錄下以test_為開頭的測試文件,然后調用讀取配置文件config.py、讀取并組裝參數的get_caseparams.py將測試用例數據參數化傳遞給test_開頭的測試文件,test_開頭的測試文件執行的時候會把之前步驟傳遞過來的參數拆分,然后調用request.py發送http請求,獲得接口的json格式的返回結果,然后通過以下方式對接口返回結果做驗證。

1)根據產品業務邏輯知道入參的情況下很簡單就能得出預期結果的時候,可以直接把預期結果放到和入參一起的excel或者yaml測試數據文件中,在執行測試的時候這些參數也會一并傳遞給測試文件,直接取出來和接口輸出做驗證即可。

2)需要查庫驗證的情況需要把需要把接口的入參作為sql的條件寫好sql后調用selectDB.py得到查詢結果再拿sql返回的結果和接口輸出做驗證3)還有一些復雜的場景可能會根據接口入參,根據業務邏輯自己寫腳本去獲得預期結果,然后和接口輸出做驗證。

最后感謝每一個認真閱讀我文章的人,禮尚往來總是要有的,雖然不是什么很值錢的東西,如果你用得到的話可以直接拿走:

這些資料,對于做【軟件測試】的朋友來說應該是最全面最完整的備戰倉庫,這個倉庫也陪伴我走過了最艱難的路程,希望也能幫助到你!凡事要趁早,特別是技術行業,一定要提升技術功底。

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

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

相關文章

OpenCV視覺圖片調整:從基礎到實戰的技術指南

引言:數字圖像處理的現代意義與OpenCV深度應用 在人工智能與計算機視覺蓬勃發展的今天,圖像處理技術已成為多個高科技領域的核心支撐。根據市場研究機構Grand View Research的數據,全球計算機視覺市場規模預計將從2022年的125億美元增長到2030年的253億美元,年復合增長率達…

JS手寫代碼篇---手寫節流函數

8、節流函數 什么是節流函數? 指規定一個單位時間,在這個單位時間內,只能有一次觸發事件的回調函數執行,如果在同一個單位時間內某事件被觸發多次,只有一次能生效。 與防抖函數有什么區別? 防抖函數是延…

2025年05月30日Github流行趨勢

項目名稱:agenticSeek 項目地址url:https://github.com/Fosowl/agenticSeek項目語言:Python歷史star數:13040今日star數:1864項目維護者:Fosowl, steveh8758, klimentij, ganeshnikhil, apps/copilot-pull-…

node_modules包下載不下來

如果項目里面的package-lock.json有resolved ,就指向了包的下載來源,如果這個網址掛了,那npm i 就會一直卡著。而且,在終端去修改 npm的鏡像是沒有用的 解決辦法是:把項目里面的 lock文件 .npmrc都刪了 然后重新下載就可以了

OramaCore 是您 AI 項目、答案引擎、副駕駛和搜索所需的 AI 運行時。它包括一個成熟的全文搜索引擎、矢量數據庫、LLM界面和更多實用程序

一、軟件介紹 文末提供程序和源碼下載 OramaCore 是您的項目、答案引擎、副駕駛和搜索所需的 AI 運行時。 它包括一個成熟的全文搜索引擎、矢量數據庫、LLM具有行動計劃和推理功能的接口、用于根據數據編寫和運行您自己的自定義代理的 JavaScript 運行時,以及更多…

小白成長之路-計算機網絡(四)

文章目錄 前言一、網絡連接查看1.netstat2.ss3.bond綁定3.1準備好這三個文件3.2添加bond配置文件3.3關閉網絡圖形化服務3.4重啟 4.Linux下的抓包工具Wireshark 5、web壓力測試工具6、路由追蹤命令 二、[練習題](https://blog.csdn.net/m0_70730767/article/details/148262716?…

CppCon 2014 學習:Lock-Free Programming

你這段文字講的是“為什么要使用無鎖(Lock-Free)代碼”,我幫你總結并解釋一下: 為什么選擇無鎖代碼? 并發性和可擴展性(Concurrency and scalability) 無鎖算法允許多個線程同時操作共享數據&a…

Proteus尋找元器件(常見)

匯總: 1 主控芯片 STM32系列(32位) AT89C51(51系列) 2顯示模塊 OLED 3 按鍵 Button 4 電阻電容 Res(電阻) Cap(電容) 5 驅動模塊 L298N(電機驅動芯片&am…

vue+threeJs 繪制3D圓形

嗨,我是小路。今天主要和大家分享的主題是“vuethreeJs 繪制圓形”。 今天找到一個用three.js繪制圖形的項目,主要是用來繪制各種形狀。 項目案例示意圖 1.THREE.ShapeGeometry 定義:是 Three.js 中用于從 2D 路徑形狀&#xff08…

macOS燒錄stm32程序初步成功

完整總結:STM32H7 項目編譯與燒錄流程(macOS OpenOCD/GDB) 1?? 編譯工程 在項目目錄下執行 make,生成 ELF 文件(如 Blink.elf): cd /Users/code/Stm32code/Blink/build make clean # 可選…

正則表達式的修飾符

修飾符 修飾符不寫在正則表達式里,標記位于表達式之外 /正則表達式/修飾符gglobal - 全局匹配 查找所有的匹配項。 i i (ignore case) - 忽略大小寫 示例:/abc/i 可以匹配 "abc", "Abc", "ABC" 等

JS浮點數精度問題

在JavaScript開發中,浮點數精度問題是一個常見的陷阱。本文將深入探討JavaScript中浮點數精度問題的原因、影響以及解決方案。 一、浮點數精度常見問題 (一)加法運算 console.log(0.1 0.2); // 0.30000000000000004 console.log(0.7 0.1…

本地Markdown開源知識庫選型指南

本地Markdown開源知識庫選型指南 以下是幾款優秀的本地Markdown開源知識庫解決方案,適合不同需求場景: 1. Obsidian (非完全開源但免費) 特點:基于Markdown的本地優先知識管理,豐富的插件生態優勢:雙向鏈接、圖形視…

蘇州SAP代理公司排名:工業園區企業推薦的服務商

目錄 一、SAP實施商選擇標準體系 1、行業經驗維度 2、實施方法論維度 3、資質認證維度 4、團隊實力維度 二、SAP蘇州實施商工博科技 1、SAP雙重認證,高等院校支持 2、以SAP ERP為核心,助力企業數字化轉型 三、蘇州使用SAP的企業 蘇州是中國工業…

springboot項目下面的單元測試注入的RedisConnectionFactory類redisConnectionFactory值為什么為空呢?

你遇到的問題是: RedisConnectionFactory redisConnectionFactory 在單元測試中為 null 這是 Spring Boot 單元測試中非常常見的問題,根本原因是你的測試類沒有啟用 Spring 容器上下文,導致 Resource 注解無法注入 Bean。 ? 正確做法&…

光電學、計算機科學及算法國際會議(OCSA 2025)征稿啟事?

在科技浪潮奔涌向前的當下,光電學、計算機科學及算法領域的創新成果不斷涌現,持續重塑著各個行業的格局,深刻影響著我們的生活。為了進一步促進該領域的學術交流與合作,匯聚全球智慧,光電學、計算機科學及算法國際會議…

小樣本分類新突破:QPT技術詳解

問題導向式提示調優(QPT) 這篇論文主要講了一個針對小樣本(數據量少)文本分類問題的新方法,叫問題導向式提示調優(QPT)。 核心思路是讓預訓練語言模型(比如BERT的升級版RoBERTa)在少量標注數據下,通過設計特定的“提問式模板”和“標簽詞擴展技術”來提升分類效果。…

Oracle EBS 12.1 處理ISG 發布的wsdl 被請求時遇到500錯誤

Oracle 12.1.3 通過ISG 發布了一個服務,該服務在被頻繁調用的時候,出現500 錯誤,臨時解決方案是可以通過重啟oafm組件解決,但是需要定位原因。 排查日志路徑 $INST_TOP/logs/ora/10.1.3/opmn/default_group~oafm~default_group~1…

shadcn/ui

文章目錄 前言? 核心特點📦 支持組件(常用)🚀 安裝使用(框架支持)初始化(Next.js 項目為例)添加一個組件 🧠 對比其他組件庫📘 官方資源? 總結? 功能特性&…

力扣每日一題——找到離給定兩個節點最近的節點

目錄 題目鏈接:2359. 找到離給定兩個節點最近的節點 - 力扣(LeetCode) 題目描述 解法一:雙指針路徑交匯法? 基本思路 關鍵步驟 為什么這樣可行呢我請問了? 舉個例子 特殊情況 Java寫法: C寫法&a…