Python+Pytest+Allure+Yaml+Pymysql+Jenkins+GitLab接口自動化測試框架詳解

Python+Pytest+Allure+Yaml接口自動化測試框架詳解

編撰人:CesareCheung
更新時間:2024.06.20

一、技術棧

Python+Pytest+Allure+Yaml+Jenkins+GitLab
版本要求:Python3.7.0,Pytest7.4.4,Allure2.18.1,PyYaml6.0

二、環境配置

  1. 安裝python3.7,并配置Pycharm運行環境為python3.7
  2. 安裝allure并配置好環境變量
  3. 安裝依賴包 pip install -r requirements.txt

三、自動化思路

通過請求方法封裝及環境配置,用pytest框架運行讀取testcase文件測試用例集,將參數傳入對應test_*用例執行器匯總并執行輸出allure測試報告
1)單個用例
2)多個用例
3)多用例上下游接口串聯傳參
4)用例執行(場景跑批)
5)測試報告
6)通知(郵件、企業微信)

四、項目結構:

在這里插入圖片描述

框架目錄詳解

–common:公共方法包

--connect_db.py: SQL操作封裝
--get_path.py:獲取文件路徑方法	
--logger_util.py:輸出日志方法
--parameters_until.py:傳參方式方法封裝	
--requests_util.py:請求方式方法封裝
--yaml_util.py:yaml文件讀取寫入方法

–config: 配置包

--config.yml:配置文件,主要為域名ip地址配置及日志輸出級別--extract.yml:接口上下游串聯時,用例文件做參數化截取返回值后自動輸出保存到該文件

–data: 用于存放csv傳參文件包(可用可不用,具體根據實際情況)

--get_token.csv:存放csv文件參數

–logs: 日志輸出文件,會自動生成

–reports: 測試報告文件

–testcase: 測試用例文件集

	--fenmi:項目測試用例--login.yml:接口參數傳參  # 如:-   name: 1、獲取UUID#    base_url: https://XXXXX.combase_url: ${get_base_url(base_fenmi_url)}request:method: geturl: /fenmi/codeheaders:Authorization: '{{access_token}}'params:Accept: application/json, text/plain, */*Accept-Encoding: gzip, deflate, br, zstdAccept-Language: zh-CN,zh;q=0.9Connection: keep-aliveextract:uuid: '"uuid":"(.*?)"'validate:-   equals: {code: 200}-   equals: {msg: "操作成功"}                # 解釋:name:為接口名稱         base_url:讀取config.yml文件的域名IP            request:請求參數           method:請求方式           url:接口地址          headers:請求頭,比如token,'{{access_token}}'為取上游接口返回值做變量進行參數化,做參數化為固定寫法'{{變量名}}'       params: 請求參數,具體需要看接口請求傳參方式         extract:用于存在上下游接口關聯時對返回值進行取值,固定寫法,'"uuid":"(.*?)"'為正則表達式取值,也可用json提取,固定寫法'"變量名":正則表達式'          validate:斷言           --test_fenmi.py: 單用例執行器,執行式傳入對應yaml文件地址即可import allureimport pytestfrom common.requests_util import Requestutilfrom common.parameters_until import read_file@allure.epic('XX互聯')@allure.feature('登錄并查詢服務收入細項列表數據')class Testrequests:# 獲取access_token(get請求)@allure.story('獲取uuid并登錄獲取token')@allure.severity("normal")@pytest.mark.parametrize("caseinfo",read_file('/testcases/fenmi/login.yml'))def test_get_token(self,caseinfo):allure.dynamic.title(caseinfo['name'])allure.dynamic.description(caseinfo['name'])Requestutil().analysis_yaml(caseinfo)

–all.py: 主運行程序

–conftest.py: 測試配置工具,clean_extract方法為重跑時清除原文件數據

–debugtalk.py:自定義函數,用于存放公共函數和變量的文件

–environment.properties:用于生成allure測試報告時,配置展示環境數據

–pytest.ini: pytest測試運行配置文件,用于配置pytest運行時指定一些參數

[pytest]
addopts = -vs --alluredir=reports/temp --clean-alluredir            運行時清除原先的測試報告及臨時文件
; testpaths = testcases/fenmi                                       執行單個項目測試文件時可選一個testcase目錄
testpaths = testcases/fenmi testcases/weixin testcases/Zgen         執行多個項目測試文件時可選多個testcase目錄   
python_files = test_*.py                                            執行的文件,及測試用例
python_classes = Test*                                              執行對應測試用例目錄所有Test開頭的類
python_functions = test_*                                           執行對應類下所有的test開頭的方法

五、用例集

1)Yaml用例文件說明:

在這里插入圖片描述

2)用例執行文件說明:

在這里插入圖片描述

3)CSV文件用例讀取:

data參數:

在這里插入圖片描述

Yaml文件參數化:

在這里插入圖片描述

4)testcase文件:為用例集可在用例集新增對應測試項目可按對應項目命名

5)yaml文件:為對應接口請求參數,可在yaml文件添加一條或者多條用例請求參數

6)test_*.py文件:通過pytest框架封裝讀取yaml文件參數并可運行的用例運行器

六、接口自動化框架規則

1.必須有的四個一級關鍵字:name,base_url,requests,validate
2.request關鍵字必須包含兩個二級關鍵字:method,url
3.傳參方式:在request一級關鍵字下,通過二級關鍵字參數傳參。
如果是get請求,通過params傳參。如:

  params:grant_type: client_credentialappid: XXXXXsecret: XXXX
如果是post請求:傳json格式,通過json關鍵字傳參。如:json: {"tag": {"id": 100, "name": "XXXaaa" }}傳表單格式,通過data關鍵字傳參。如:data:{"tag": {"id": 100, "name": "XXXCaaa" }}傳文件格式,通過files關鍵字傳參。如:files:media: "E:/Tanzl.jpg"

4.如果需要做接口關聯,那么必須使用一級關鍵字:extract
提取:

如:json提取方式
extract:access_token: access_token
如:正則表達式提取方式
extract:access_token: '"access_token":"(.*?)"'取值:如:access_token={{access_token}}

5.熱加載,當yaml文件需要使用動態參數時,那么可以在debugtalk.py中寫方法調用。

  注意:傳參時,需要什么類型的數據,需要做強轉。int(mix),int(max),如:# 獲取隨機數def get_random_number(self,mix,max):return random.randint(int(mix),int(max))熱加載取值:${get_random_number(100000,999999)}

6.此框架支持兩種斷言方式:分別是equals和contains斷言:
如:

validate:
-   equals: {status_code: 200}
-   equals: {expires_in: 7200}
-   contains: access_token

7.數據驅動使用csv和一級關鍵字parameters實現:如:

yaml寫法:parameters:name-appid-secret-grant_type-assert_str: data/get_token.csv
csv寫法:name,appid,secret,grant_type,assert_str獲取access_token統一鑒權碼,wx9b755d429f6fb216,b963db0b97c8487b0cb920a240bd78e3,client_credential,access_tokenappid必填項檢查,"",b963db0b97c8487b0cb920a240bd78e3,client_credential,errcodesecret必填項檢查,wx9b755d429f6fb216,"",client_credential,errcode

8.config.yml日志監控,異常處理,以及基礎路徑的設置。

七、測試報告

在這里插入圖片描述

1)測試報告概述

  1. 可進行篩選成功或失敗的用例
  2. 可查看該用例的詳情
  3. 測試套可查看對應測試模塊用例集合
  4. 功能模塊可查看對應場景化用例集合
    在這里插入圖片描述

在這里插入圖片描述

2)測試報告詳情

可查看具體用例請求參數及返回報文

在這里插入圖片描述

八、Jenkins拉取GitLab集成及運行

1)GitLab倉庫代碼

在這里插入圖片描述

2)框架主運行程序改動點(如果沒有Jenkins沒報Allure不是內部命令可不改)

在這里插入圖片描述

3)配置Jenkins環境變量及對應執行腳本

在這里插入圖片描述

4)配置Allure測試報告

在這里插入圖片描述

5)Jenkins拉取GitLab倉庫代碼及對應工作空間

在這里插入圖片描述

6)運行構建項目

在這里插入圖片描述
在這里插入圖片描述

7)集成推送企業微信信息

在這里插入圖片描述

8)Jenkins集成Allure測試報告展示

在這里插入圖片描述

9)生成Allure報告后報告顯示字段內容及含義

在這里插入圖片描述

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

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

相關文章

Python 類與對象:深入理解與應用

在 Python 中,類是一種抽象數據類型,用于描述具有相同屬性和方法的對象集合。類通過屬性(變量)和方法(函數)來定義對象的行為。對象是類的實例化結果,它可以具備類定義的所有特性。Python 中的類…

ROS2 RQT

1. RQT是什么 RQT是一個GUI框架,通過插件的方式實現了各種各樣的界面工具。 強行解讀下:RQT就像插座,任何電器只要符合插座的型號就可以插上去工作。 2.選擇插件 這里我們可以選擇現有的幾個RQT插件來試一試,可以看到和話題、參…

金蝶云星空字段之間連續觸發值更新

文章目錄 金蝶云星空字段之間連續觸發值更新場景說明具體需求:解決方案 金蝶云星空字段之間連續觸發值更新 場景說明 字段A配置了字段B的計算公式,字段B配置了自動C的計算公式,修改A的時候,觸發了B的重算,但是C觸發不…

【云原生】Kubernetes----ETCD數據的備份與恢復

目錄 引言 一、ETCD數據備份 (一)確定備份策略 (二)使用etcdctl工具進行備份 1.安裝etcdctl命令 2.設置ETCDCTL_API環境變量 (三)執行備份 二、數據還原 (一)創建新資源 &…

XMind2TestCase:高效測試用例設計工具

XMind2TestCase:高效測試用例設計工具 引言傳統測試用例設計的問題1. Excel表格的局限性2. 傳統測試管理工具的不足3. 自研測試管理工具的挑戰 思維導圖在測試用例設計中的應用思維導圖的優勢思維導圖的挑戰 簡介安裝使用方式命令行調用使用Web界面 使用示例XMind文…

廣州自閉癥機構哪家好

在廣州,眾多的自閉癥康復機構中,星貝育園自閉癥兒童康復學校以其獨特的優勢脫穎而出。 一、專業的師資團隊 我們擁有一支經驗豐富、專業素養極高的師資隊伍。每位老師都經過嚴格的專業培訓,深入了解自閉癥兒童的特點和需求。他們不僅…

蒼穹外賣項目 常用注解 + 動態sql

常用注解 常見的注解解析方法有兩種: 編譯期直接掃描:編譯器在編譯 Java 代碼的時候掃描對應的注解并處理,比如某個方法使用Override 注解,編譯器在編譯的時候就會檢測當前的方法是否重寫了父類對應的方法。運行期通過反射處理&…

SAP_ABAP相關日語單詞

基本概念 1. プログラミング言語 (プログラミングげんご, Puroguramingu gengo) - 編程語言 2. 開発 (かいはつ, Kaihatsu) - 開發 3. システム (システム, Shisutemu) - 系統 4. モジュール (モジュール, Mojūru) - 模塊 5. トランザクションコード (トランザクションコード,…

探索旅游卡項目的八大黃金賽道,你離月入十幾萬僅一步之遙!

作為旅游卡項目的推廣精英,我深知在這個充滿機遇與挑戰的時代,選擇正確的賽道至關重要。今天,我將從定位、內容、產品、流量、變現這五個核心維度出發,為你揭秘旅游卡項目的八大熱門方向。如果你正對旅游充滿熱情,或擁…

【基于R語言群體遺傳學】-3-計算等位基因頻率

書接上文,我們講完了哈代溫伯格基因型頻率,也使用數據進行了擬合,那么接下來就是考慮一些計算的問題: 【基于R語言群體遺傳學】-1-哈代溫伯格基因型比例-CSDN博客 【基于R語言群體遺傳學】-2-模擬基因型(simulating …

【leetcode--最小棧】

設計一個支持 push ,pop ,top 操作,并能在常數時間內檢索到最小元素的棧。 實現 MinStack 類: MinStack() 初始化堆棧對象。void push(int val) 將元素val推入堆棧。void pop() 刪除堆棧頂部的元素。int top() 獲取堆棧頂部的元素。int get…

TextInput是用于在用戶界面中輸入文本的控件,通常應用于表單、搜索框等需要用戶輸入文字的場景

TextInput是用于在用戶界面中輸入文本的控件,通常應用于表單、搜索框等需要用戶輸入文字的場景。以下是對TextInput的詳細解釋,涵蓋其各個方面的功能和屬性。 基本屬性 text 描述:TextInput中當前顯示的文本。用法:text: "示…

WebKey備受矚目的Web3.0新敘事,硬件與加密生態完美融合特性成為數字世界的新入口

在當今迅速發展的科技領域,Web3.0正在引領一場顛覆性的變革。而作為這一變革的先鋒,WebKey無疑是備受矚目的創新項目。它不僅代表了一種全新的技術趨勢,更是數字世界中硬件與加密生態完美融合的典范。 硬件與加密生態的完美融合 WebKey的核心…

Java基礎面試題(簡單版):

1.java的8個基本數據類型? 整型: byte(占用1個字節) short(占用2個字節) int(占用4個字節) long(占用8個字節) 浮點型: float(占用4個字節)、double(占用8個字節) 字符型: char 布爾型: boolean 2.ArrayList和LinkedList的區別? 可以說ArrayList和LinkedList除了是同屬于集合…

【QT】輸入類控件

目錄 Line Edit 核心屬性 核心信號 正則表達式 示例:使用正則表達式驗證輸入框內容 示例:切換輸入框密碼模式下的顯示狀態 Text Edit 核心屬性 核心信號 示例:獲取多行輸入框的內容同步顯示到label 示例:獲取文本的選…

三生隨記——眉筆詭事

在一個被遺忘的古鎮上,流傳著一個關于眉筆的詭異傳說。這個古鎮坐落在群山的環抱中,鮮少有人知曉它的存在。而在這片土地上,卻有著一件被視為詛咒之源的眉筆。 眉筆的來歷無人知曉,只知它在一夜之間出現在鎮上的古董店中。那支眉筆…

一文講懂npm link

前言 在本地開發npm模塊的時候,我們可以使用npm link命令,將npm 模塊鏈接到對應的運行項目中去,方便地對模塊進行調試和測試 用法 包鏈接是一個兩步過程: 1.為依賴項創建全局軟鏈npm link。一個符號鏈接,簡稱軟鏈&a…

0702_ARM5

練習:使用usart4 main.c #include "uart4.h"int main() {// 初始化 UART4hal_uart4_init();while (1) {// 發送一個字符串//hal_put_char( hal_get_char());hal_put_string(hal_get_string());}return 0; } usart4.c #include "uart4.h"//**…

c# 操作mysql的幫助類

MySqlHelper 的靜態類,其中包含了一些用于執行 MySQL 數據庫操作的方法。這些方法包括執行存儲過程、插入、更新、刪除操作以及執行數據庫事務查詢操作等。 該類中的方法主要有: ExecuteNonQuery 方法:用于執行存儲過程、插入、更新、刪除操…

如何降低布隆過濾器的誤判率

降低布隆過濾器的誤判率(也稱為假陽性率)是布隆過濾器應用中一個關鍵的問題。誤判率主要來源于哈希碰撞,即不同的元素可能被哈希到相同的位置。為了降低誤判率,可以從以下幾個方面進行優化: 1. 增加哈希函數的個數 原…