使用Pytest進行接口自動化測試(三)

(一)YAML

之前在項目中,我們也是用過YAML來做配置文件,他用于以人類可讀的形式存儲信息,
特點: 一種簡易的可讀語言,用于人和計算機交換數據
? ? ? ? ? 通常用來存儲配置信息
? ? ? ? ? 跟python類似,有著嚴格的縮進
? ? ? ? ? 跟其他配置文件不一樣,沒有多余的符號("",{})等
注: 上篇博客我們還說了.ini文件,與他不同的是,YAML是區分大小寫的,且嚴格遵循縮進

? 他的文件后綴名.yaml或者.yml? YAML支持多種數據類型,具體有點多這里不詳細列出
我們有很多工具可以幫我們把各種格式的文件轉為yml格式的文件
JSON 轉 YAML 工具 | 簡化數據格式轉換 - 嘉澍工具


YAML的使用


我們需要先下載YAML
下載完成后,我們就可以手動寫yml文件,或者使用命令來寫yml文件了
?

import yaml
#追加寫入文件(f即為打開的文件)
def wirte_yaml(filename,data):with open(filename,encoding="utf-8",mode="a")as f:yaml.safe_dump(data,stream=f)
#讀文件
def read_yaml(filename,key):with open(filename,encoding="utf-8",mode="r")as f:data=yaml.safe_load(f)return data[key]
#清空
def clear_yaml(filename):with open(filename,encoding="utf-8",mode="w")as f:f.truncate()
def test01():data={"string":"123"}wirte_yaml("pytest.yml",data)ret=read_yaml("pytest.yml","string")print("ret",ret)clear_yaml("pytest.yml")

yaml.safe_dump:這個函數會將python對象轉為yml格式再給寫入到yml文件中

yml.safe_load:這個函數會將yml格式對象轉換為python對象

文件名.truncate:這個函數用來清空文件中數據
結果如下

(二)JSON Schema

用來校驗json是否符合我們的預期
還是需要我們手動安裝

那具體是如何幫我們驗證json格式是否符合預期?

這是我們JSON的一個代碼塊
我們來看他對應的jsonSchema代碼塊
我們分別再來看一下Json Schema的屬性都是什么
首先就是type,這個用來指定json傳輸的類型

  • 可以是字符串(string)、數字(number)、整數(integer)、對象(object)、數組(array)、布爾值(boolean)或null。

  • 也可以是一個數組,表示允許多種類型。例如:"type": ["string", "null"]表示可以是字符串或null

再來看required,(用于object類型)這個里面表示我們下面的properties哪些是必須要有的

properties 同樣用于object類型,這里面表示object里面的鍵和對應值的數據類型
我們可以使用工具,將JSON轉為Json Schema
但是這個工具可能會出錯(容易把布爾類型,轉成字符串),所以需要我們再校驗一遍
在線JSON轉Schema工具 - ToolTT在線工具箱
我們自己寫個代碼,來看一下
?

from jsonschema.validators import validate
#不要忘記導入jsonschema
def test02():json01={"code":"SUCCESS","error":"","data":False}jsonschema={"type": "object","required": [],"properties": {"code": {"type": "string"},"msg": {"type": "string"},"data": {"type": "boolean"}}
}validate(json01,jsonschema)

然后我們來看結果

我們properties是一個驗證關鍵字,除了要寫json對應的鍵和值的類型外,我們也可以指定一些其他的值,比如

最大最小值

:minimum 和 maximum:指定數值的最小值和最大值
exclusiveMinimum 和 exclusiveMaximum:指定數值必須嚴格大于或在小于某個值
這里舉一個簡單的例子
?

def test02():json01={"code":"SUCCESS","num":-1,"data":False}jsonschema={"type": "object","required": [],"properties": {"code": {"type": "string"},"num": {"type": "number","minimum": 0},"data": {"type": "boolean"}}
}

比如我把num設定為-1,但在jsonschema中,我把num最小數值設定為0,這樣就會報錯

這里來說一下minimum和exclusiveMinimum的區別(maximum同理)

在Draft6之后
minimum就是我們常說的<=,exclusiceMinimum是<,且值都可以為數字
在Draft4之前

exclusiveMinimum必須是布爾值

需要與?minimum配合使用


pattrern字符串特殊校驗

pattern使用正則表達是來驗證字符串是否符合特定的模式
具體正則表達式怎么寫,我們同樣可以使用生成器
正則表達式生成器,常用正則表達式在線生成
?

數組約束


minItems和maxItems:指定數組的最小和最大長度
uniqueItems:確保數組中的元素是唯一的

true代表數組中不可以有重復元素
items:定義數組中每個元素的類型和約束

{"type": "array","items": {"type": "number","minimum": 0}
}

這里定義數組中所有的元素都為number

{"type": "array","items": [{"type": "string"},  // 第一個元素必須是字符串{"type": "number"},  // 第二個元素必須是數字{"type": "boolean"}  // 第三個元素必須是布爾值],"additionalItems": false  // 禁止額外元素
}

也可以使用元組模式定義每個位置元素
contains:必須包含特定元素
?

{"type": "array","contains": {"type": "string","pattern": "^admin$"}
}

對象約束

minProperties和maxProperties:指定對象的最小和最大屬性數量
additionalProperties:控制是否允許對象中出現在在properties中未定義的額外屬性,默認為True
propertyNames- 約束屬性名:通過正則表達式約束properties中屬性名稱
?

{"type": "object","propertyNames": {"pattern": "^[a-z][a-z0-9_]*$","maxLength": 20}
}

必需屬性

通過required關鍵字,Json Schema指定哪些屬性是必須的,如果JSON實例中缺少這些必要屬性,驗證就會失敗

{"type": "object","properties": {"name": { "type": "string" },"email": { "type": "string" }
},"required": ["name", "email"]
}

依賴關系

dependentRequired可以定義屬性之間的依賴關系? ?如果一個屬性存在,則必須存在另一個屬性
?

{"type": "object","properties": {"creditCard": { "type": "string" },"billingAddress": { "type": "string" }},"dependentRequired": {"creditCard": ["billingAddress"]}
}

這就表示我們的creditCard依賴billingAddress當有creditCard時,就一定要有billingAddress
?

logging日志模塊


logging是Python庫中的一個模塊,提供了靈活的日志功能
接下來我們看一下logging是怎樣使用的


import logging# 配置日志:設置級別和格式
logging.basicConfig(level=logging.DEBUG,format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')# 創建日志記錄器
logger = logging.getLogger(__name__)# 記錄不同級別的日志
logger.debug('這是一條調試信息')
logger.info('這是一條普通信息')
logger.warning('這是一條警告信息')
logger.error('這是一條錯誤信息')
logger.critical('這是一條嚴重錯誤信息'

設置日志文件格式我們也可以這樣寫

handler.setFormatter(formatter)將創建的格式器對象設置到處理器上,這樣處理器在接受到日志信息時,就會用這個格式器來格式化日志信息

獲取日志記錄器:logging.getlogger(__name__)獲取一個日志記錄器對象,name為當前模塊的名稱,通過不同文件名稱來區分日志,有助于在大型項目中區分不同模塊日志
設置日志級別:logger.setlevel()將日志記錄器設置級別,當高于或者等于這個級別的日志就會記錄

創建文件處理器:logging.fileHandler(filename="文件名")創建文件處理器,把日志信息寫入到這個文件中
添加文件處理器:logger.addHandler(handler)將文件處理器添加到日志記錄器中

生成測試報告allure


Allure Report由一個框架適配器和allure命令行工具組成,是一個開源工具,用于可視化的查看運行結果(測試報告)
還是需要我們手動的去下載

下載鏈接:?https://github.com/allure-framework/allure2/releases/download/2.30.0/allure-2.30.0.zip
下載后 我們如果想在pycharm中使用,我們需要配置環境變量
找到對應bin文件,然后找到電腦的環境變量

注:allure是一個基于Java的工具,所以我們需要先配置java環境變量,步驟一樣的
配置好后,如果我們想驗證一下,我們可以使用allure --version

若出現我們在cmd中可以用上述命令打印版本,但是pycharm控制臺提示找不到,則需要我們手動修改pycharm命令環境

保存后重啟pycharm即可

安裝好后,我們來看他的使用
首先我們要運行自動化,并指定測試報告的放置路徑

pytest --alluredir=results_dir


此時我們測試報告就已經生成了。那么如何查看測試報告呢?

方法1:
?

 allure serve 生成的測試文件地址

這個測試文件地址,可以是相對地址也可以是絕對地址(絕對地址要加“”,相對不用加)這邊建議寫絕對地址,不容易錯
?我們也可以指定端口號?
?

allure serve --port 8787 .\allure-results\

還有清除上一次生成的測試報告
?

allure serve .\allure-results\ --clean-alluredir

執行后,就會給我們跳出Web版的測試報告

但是通過這樣生成的測試報告,當我們關閉網站 ctrl+c后就會關閉無法再次打開,所以我們可以選擇使用持續集成(CI)工具,或者本地持續運行的服務器或者我們生成靜態的測試報告
通過
?

allure generate .\allure-results\ -o .\allure-report
--clean

allure generate是用來生成我們的測試報告
.\allure-results\`:這是測試結果所在的目錄。
-o --clean:這個選項表示在生成新報告之前,先清理輸出目錄(即.\allure-report)。.\allure-report-o--output的縮寫,用于指定生成的HTML報告的輸出目錄。

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

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

相關文章

算法訓練營day46 647. 回文子串、516.最長回文子序列、動態規劃總結篇

今天是動態規劃的最后一篇內容了&#xff0c;本篇主要是針對回文字符串這種“與眾不同”的遞推規律來進行講解 647. 回文子串 統計并返回這個字符串中 回文子串 的數目 暴力解法 兩層for循環&#xff0c;遍歷區間起始位置和終止位置&#xff0c;然后還需要一層遍歷判斷這個區…

Qt界面優化

1.QSS在網頁前端開發領域中&#xff0c;CSS 是一個至關重要的部分&#xff0c;描述了一個網頁的 “樣式”&#xff0c;從而起到對網頁美化的作用。所謂樣式&#xff0c;包括不限于大小、位置、顏色、背景、間距、字體等等。網頁開發作為 GUI 的典型代表&#xff0c;也對于其他客…

week1+2+3

408 計組 1.基本組成2.數據的表示和運算定點數&#xff1a;把數字分為定點整數和定點小數分開存儲 浮點數&#xff1a;用科學計數法存儲 原碼 -全部取反-> 反碼 反碼 1->補碼 補碼 -符號位取反->移碼帶余除法&#xff1a;設x,m∈Z&#xff0c;m>0則存在唯一的整數q…

java8中javafx包缺少報錯

今天拉取一個jdk1.8的項目里面有一個代碼用到了javafx&#xff0c;這個我記得是jdk中的包&#xff0c;正常不應該報錯的。然后發現jdk中還真沒有&#xff0c;查了一下是因為版本問題。 Java 8 及之前&#xff1a;Oracle JDK 自帶 JavaFX&#xff0c;OpenJDK 通常不包含Java 9 …

day072-代碼檢查工具-Sonar與maven私服-Nexus

文章目錄0. 老男孩思想-選對池塘釣美人魚1. 代碼回滾方案2. SonarQube2.1 代碼檢查工具2.2 部署sonarqube2.2.1 軟件要求2.2.2 安裝軟件2.2.3 啟動sonar2.2.4 部署插件2.3 sonar檢查java代碼2.3.1 創建sona項目2.3.2 分析java代碼2.3.3 Jenkins結合sonar檢查代碼2.4 sonar檢查非…

【前端基礎】15、列表元素、表格元素、表單元素(注:極其粗略的記載。)

一、列表元素 1、什么是列表元素2、有序列表&#xff08;ol、li&#xff09; ol有序列表 直接子元素只能是li。 li列表中的每一項。3、無序列表&#xff08;ul、li&#xff09; ol無序列表 直接子元素只能是li。 li列表中的每一項。4、定義列表&#xff08;dl、dt、dd&#xff…

IRFBG30PBF Vishay威世MOSFET場效應管

IRFBG30PBF Vishay威世&#xff1a;超快MOSFET 場效應管一、產品定位IRFBG30PBF 是Vishay威世推出的600V/30A N溝道功率MOSFET&#xff0c;采用第五代TrenchFET技術&#xff0c;專為開關電源、電機驅動、新能源逆變器等高功率場景設計。以85mΩ超低導通電阻和超快反向恢復&…

【07-AGI的討論】

AI ANI&#xff1a;artificial narrow intelligence; 如 智能音箱&#xff1b;自動駕駛汽車&#xff0c;網絡搜索&#xff0c;其他用于專業特定事項的工具&#xff1b; AGI&#xff1a;artificial general intelligence; building AI systems that could do anything a typical…

[激光原理與應用-225]:機械 - 3D圖與2D圖各自的作用

在機械設計與加工領域&#xff0c;3D圖和2D圖是兩種核心的工程表達方式&#xff0c;它們在產品設計、制造、裝配及維護等環節中扮演不同角色&#xff0c;具有互補性。以下是它們各自的作用及具體應用場景的詳細解析&#xff1a;一、3D圖的作用1. 直觀展示產品全貌三維可視化&am…

【從零開始java學習|第一篇】java中的名詞概念(JDK、JVM、JRE等等)

目錄 一、核心運行環境三要素&#xff08;JVM/JRE/JDK&#xff09; 二、常用開發指令&#xff08;JDK 自帶工具&#xff09; 三、一些其他概念 四、總結核心邏輯鏈 要入門 Java&#xff0c;理解核心概念之間的關系是基礎。以下是 Java 中最核心的基礎概念、工具及相關名詞的…

UVa12345 Dynamic len(set(a[L:R]))

[TOC](UVa12345 Dynamic len(set(a[L:R]))) 題目鏈接 UVA - 12345 Dynamic len(set(a[L:R])) 題意 有編號從 0 到 n?1 的 n 個數&#xff0c;有兩種操作&#xff1a; Q L R 詢問編號 L 到編號 R?1 的數中有多少個不同的數字。M X Y 將編號為 X 的數字改為 Y。 你的任務就是…

[Ubuntu] VNC連接Linux云服務器 | 實現GNOME圖形化

將桌面環境修改為 GNOME 并通過 VNC 遠程訪問的步驟 & TightVNC 的安裝與配置說明&#xff1a;1. 安裝 GNOME 桌面環境 sudo apt update sudo apt install ubuntu-gnome-desktop -y2. 安裝 TightVNC 服務器 sudo apt install tightvncserver -y3. 初始化 VNC Server 并設置…

進程、網絡通信方法

一、進程間通信(IPC)方法 適用于同一臺主機上的進程間數據交換。 管道(Pipe) 匿名管道:單向通信,僅用于父子進程。 命名管道(FIFO):通過文件系統路徑訪問,支持無親緣關系進程。 消息隊列(Message Queue) 結構化消息(類型+數據),按類型讀取,支持異步通信。…

[激光原理與應用-241]:設計 - 266n皮秒深紫外激光器,哪些因素影響激光器紫外光的輸出功率?

一、短期穩定性266nm皮秒深紫外激光器紫外光輸出功率的穩定性受非線性晶體性能、光學系統設計、熱管理效果、重復頻率與脈沖能量匹配度、環境干擾控制等因素影響&#xff0c;具體分析如下&#xff1a;1. 非線性晶體性能晶體選擇與狀態&#xff1a;BBO&#xff08;偏硼酸鋇&…

Django配置sqllite之外的數據庫

當連接到其他數據庫后端時&#xff0c;如 MariaDB、MySQL、Oracle 或 PostgreSQL&#xff0c;將需要額外的連接參數。請參閱下面的 ENGINE 配置&#xff0c;了解如何指定其他數據庫類型。這個例子是針對 PostgreSQL&#xff1a; 在django項目的settings.py文件里&#xff0c;關…

銀河通用招人形機器人強化學習算法工程師了

人形強化學習算法工程師&#xff08;26屆&#xff09;&#xff08;崗位信息已通過jobleap.cn授權&#xff0c;可在csdn發布&#xff09;銀河通用機器人 北京收錄時間&#xff1a; 2025年08月11日職位描述1. 研發基于深度強化學習的足式機器人運動控制算法&#xff0c;提升機器…

使用MongoDB存儲和計算距離

一、MongoDB 計算距離的優勢 優勢說明原生地理空間索引支持 2dsphere 索引&#xff0c;高效處理地理坐標查詢&#xff08;毫秒級響應&#xff09;。內置地理計算函數提供 $near、$geoWithin、$geoNear 等操作符&#xff0c;無需手動實現復雜計算。高性能基于B樹索引優化&#…

鴻蒙開發-ArkUI中@Type作用詳細解答

在鴻蒙&#xff08;HarmonyOS&#xff09;應用開發中&#xff0c;Type 是 ArkUI 框架中用于 類型定義和類型檢查 的關鍵注解&#xff08;裝飾器&#xff09;。它的主要作用是為自定義組件的屬性提供明確的類型約束&#xff0c;確保數據傳遞的類型安全性。 核心作用解析&#xf…

MCU中的存儲器映射(Memory Map)

MCU中的存儲器映射(Memory Map) 在MCU(微控制器單元)中,存儲器映射(Memory Map)是指將不同類型的存儲器(如Flash、RAM、外設寄存器等)和功能模塊分配到統一的地址空間的過程。這種映射方式使得CPU可以通過訪問特定地址來讀寫數據或控制外設,而無需關心物理存儲介質的…

Rust面試題及詳細答案120道(11-18)-- 控制流與函數

《前后端面試題》專欄集合了前后端各個知識模塊的面試題&#xff0c;包括html&#xff0c;javascript&#xff0c;css&#xff0c;vue&#xff0c;react&#xff0c;java&#xff0c;Openlayers&#xff0c;leaflet&#xff0c;cesium&#xff0c;mapboxGL&#xff0c;threejs&…