python+pytest接口自動化(12)-自動化用例編寫思路 (使用pytest編寫一個測試腳本)

經過之前的學習鋪墊,我們嘗試著利用pytest框架編寫一條接口自動化測試用例,來厘清接口自動化用例編寫的思路。

我們在百度搜索天氣查詢,會出現如下圖所示結果:

接下來,我們以該天氣查詢接口為例,編寫接口測試用例腳本。

一,明確測試對象

針對某個功能做接口測試,首先我們需要確定實現這個功能調用的是哪個接口,這個接口的具體信息(如功能、協議、URL、請求方法、請求參數說明、響應參數說明等等)可以通過查看開發提供的接口文檔獲取,也可以通過抓包(在沒有接口文檔的情況下)獲取。找到對應的接口也就是測試對象之后,才能有目的的進行下一步。

1,這里顯然是沒有接口文檔提供接口相關的信息的,我們甚至都不知道請求url,那么先Fiddler抓包獲取接口信息。

?如果你想學習自動化測試,我這邊給你推薦一套視頻,這個視頻可以說是B站播放全網第一的自動化測試教程,同時在線人數到達1000人,并且還有筆記可以領取及各路大神技術交流:798478386????

【已更新】B站講的最詳細的Python接口自動化測試實戰教程全集(實戰最新版)_嗶哩嗶哩_bilibiliicon-default.png?t=N7T8https://www.bilibili.com/video/BV17p4y1B77x/?spm_id_from=333.337.search-card.all.click通過抓包我們抓取到了該接口的信息如下:

請求url:https://weathernew.pae.baidu.com/weathernew/pc請求方式:GET請求參數:

2,抓取到以上這些接口信息后,我們先編寫簡單的腳本請求該接口,如下:

url = "https://weathernew.pae.baidu.com/weathernew/pc"
params = {"query": "浙江杭州天氣","srcid": 4982
}
res = requests.get(url=url, params=params)
print(res.status_code)
print(res.text)

?運行代碼,接口調試通過,能獲取到結果,如下:

3,明確需求,確定用例。

我們在針對某個接口做自動化測試時,需要先明確用例需要驗證的測試點。有些接口既要進行正向的校驗,也要進行異常的校驗,而有些接口可能在自動化時只需要進行正向校驗就夠了,無需做異常校驗。

我們來分析一下示例的這個天氣查詢接口,主要有兩個測試點:

  • 正向請求:輸入存在的城市,能查找對應城市的天氣

  • 異常請求:輸入不存在的城市,提示錯誤

二,編寫測試用例

編寫測試用例時,我們需要將代碼進行封裝,可以封裝成測試類/方法、測試函數。pytest中對用例封裝的命名方式有要求,詳細請參考我之前的文章pytest測試命名規則。

至于封裝成類還是函數,其實沒什么特定的要求,一般同一個場景同一個測試點相關的接口可以定義成一個類。

同時用例還需要設置斷言,用于校驗返回內容是否為期望的內容。測試用例一定要進行斷言,否則毫無意義

構造請求數據

正向請求,數據如下:

params = {"query": "浙江杭州天氣","srcid": 4982
}

?異常請求,數據如下:

params = {"query": "微信公眾號:測試上分之路","srcid": 4982
}

正向請求的結果我們在上面調試請求該接口的時候已經拿到了,如上面的截圖。

我們來看下異常請求的結果,為后續設置斷言做準備,結果如下:

發送異常請求后,返回的code也是200,結果中會出現暫未開通此城市查詢,且沒有出現正向請求中的window.tplData內容。

封裝測試代碼

這里是針對同一個接口的兩條不同的測試用例,我們直接封裝一個測試類,專門用于測試該接口。示例代碼如下:

class TestWeather:'''校驗百度天氣查詢接口:https://weathernew.pae.baidu.com/weathernew/pc'''def test_get_weather_normal(self):'''正向校驗-查詢存在的城市的天氣'''url = "https://weathernew.pae.baidu.com/weathernew/pc"params = {"query": "浙江杭州天氣","srcid": 4982}res = requests.get(url=url, params=params)def test_get_weather_error(self):'''異常校驗-查詢不存在的城市的天氣'''url = "https://weathernew.pae.baidu.com/weathernew/pc"params = {"query": "微信公眾號:測試上分之路","srcid": 4982}res = requests.get(url=url, params=params)

?注意,代碼里還沒有進行斷言,不能算是完整的用例。這里我只是為了說明流程而把斷言放到下一步,分析后再寫斷言。

斷言設置

斷言,即校驗結果是否是我們期望的內容。pytest怎么進行斷言請參考文章pytest-斷言。

設置斷言時,我們需要先明確校驗哪些字段。一般而言,接口響應的code都需要斷言,status_code == 200則說明接口請求通了。然后再去斷言其他必要字段,從而校驗接口功能是否實現。

由上面的結果可知,正向請求可以進行如下斷言:

# 斷言code是否等于200,存在則該斷言通過
assert res.status_code == 200# 斷言結果中是否存在"window.tplData",存在則該斷言通過
assert "window.tplData" in res.text

由上面的結果可知,異常請求可以進行如下斷言:

# 斷言code是否等于200,存在則該斷言通過
assert res.status_code == 200# 斷言結果中是否存在"window.tplData",注意這里是不存在則該斷言通過
assert "window.tplData" not in res.text# 斷言結果中是否存在"暫未開通此城市查詢",存在則該斷言通過
assert "暫未開通此城市查詢" in res.text

三,執行腳本獲取測試結果

使用pytest框架管理執行用例時,需要先安裝pytest,并在模塊中import,不清楚的同學可以查看我的pytest系列文章,這里不做過多說明。

完整示例代碼如下:

# @time: 2022-03-20
# @author: 給你一頁白紙import requests
import pytestclass TestWeather:'''校驗百度天氣查詢接口:https://weathernew.pae.baidu.com/weathernew/pc'''def test_get_weather_normal(self):'''正向校驗-查詢存在的城市的天氣'''url = "https://weathernew.pae.baidu.com/weathernew/pc"params = {"query": "浙江杭州天氣","srcid": 4982}res = requests.get(url=url, params=params)# print(res.status_code)# print(res.text)assert res.status_code == 200assert "window.tplData" in res.textdef test_get_weather_error(self):'''異常校驗-查詢不存在的城市的天氣'''url = "https://weathernew.pae.baidu.com/weathernew/pc"params = {"query": "微信公眾號:測試上分之路","srcid": 4982}res = requests.get(url=url, params=params)print(res.status_code)print(res.text)assert res.status_code == 200assert "window.tplData" not in res.textassert "暫未開通此城市查詢" in res.textif __name__ == '__main__':# 使用pytest執行用例pytest.main()

當然,這里因為url是共用的,我們最好是將它提取出來,而不是每個測試方法都去定義一次這個變量,如下圖所示:

執行結果如下:

?

四,總結

單個接口自動化測試用例,我們可以按照上面的步驟來進行,即 明確測試對象-->編寫測試用例-->編寫測試腳本-->執行腳本、獲取測試結果。通過這些步驟,我們便對自動化用例的編寫有了基本的思路(這一點對于我們自動化測試思維的形成很重要),為我們后續的學習實踐打下基礎。

事實上使用編程語言對項目進行自動化測試時,幾乎不可能只存在一條測試用例,那么在有多條測試用例的情況下,需要怎樣管理用例、執行用例、獲取測試結果?這就是單元測試框架需要解決的問題。

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

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

相關文章

錯題總結(三)

1.寫代碼將三個整數數按從大到小輸出。 例如&#xff1a; 輸入&#xff1a;2 3 1 輸出&#xff1a;3 2 1 int main() {int a 0;int b 0;int c 0;int tep 0;scanf("%d%d%d", &a, &b, &c);if (a < b){tep a;a b;b tep;}if (b < c){tep b…

每日一練2023.12.9—— 矩陣A乘以B【PTA】

題目鏈接&#xff1a;L1-048 矩陣A乘以B 題目要求&#xff1a; 給定兩個矩陣A和B&#xff0c;要求你計算它們的乘積矩陣AB。需要注意的是&#xff0c;只有規模匹配的矩陣才可以相乘。即若A有Ra?行、Ca?列&#xff0c;B有Rb?行、Cb?列&#xff0c;則只有Ca?與Rb?相等時&a…

Linux Shell 基礎命令

Linux 是一個開源的操作系統&#xff0c;其命令行界面是它的重要組成部分。在這個界面下&#xff0c;Shell 是一個能夠與操作系統進行交互的工具。Shell 是一種程序&#xff0c;它能夠接收用戶輸入的命令&#xff0c;并將這些命令發送到操作系統中進行處理。 在 Linux 中&…

Docker實戰筆記 三 Docker私有庫

1.拉取私有庫image rootcenots-7.5:/root#docker pull registry Using default tag: latest latest: Pulling from library/registry c926b61bad3b: Pull complete 5501dced60f8: Pull complete e875fe5e6b9c: Pull complete 21f4bf2f86f9: Pull complete 98513cca25bb: P…

VINS-MONO代碼解讀5----vins_estimator(marginalization部分)

文章目錄 0. 前言1.1 Marginalization Pipiline 1. marg factor構建1.1 變量及維度理解1.2 IMUFactor1.3 ProjectionTdFactor(ProjectionFactor)1.4 MarginalizationFactor( e p e_p ep?推導更新&#xff0c;FEJ解決的問題)1.4.1 先驗殘差的更新1.4.2 先驗Jacobian的更新 2. R…

windows install git

refer: https://developers.weixin.qq.com/miniprogram/dev/devtools/wechatvcs.html https://blog.csdn.net/weixin_40228200/article/details/128451324 在使用小程序的時候&#xff0c;需要初始化項目&#xff0c;需要注冊Git賬號 1.在本地確認cmd沒有安裝Git,進入Git官網…

docker:安裝mysql以及最佳實踐

文章目錄 1、拉取鏡像2、運行容器3、進入容器方式一方式二方式三容器進入后連接mysql和在宿主機連接mysql的區別 持久化數據持久化數據最佳實踐 1、拉取鏡像 docker pull mysql2、運行容器 docker run -d -p 3307:3306 --name mysql-container -e MYSQL_ROOT_PASSWORD123456 …

Botton進一步了解(點擊事件)

點擊事件和長按事件 監聽器&#xff1a;專門監聽控件的動作行為。只有控件發生了指定的動作&#xff0c;監聽器才會觸發開關區執行對應的代碼邏輯。按鈕控件有兩種常用的監聽器&#xff1a; 點擊監聽器&#xff1a;通過setOnClickListener方法設置。按鈕被按住少于500ms時會觸…

2023濟南大學acm新生賽題解

通過答題情況的難度系數&#xff1a; 簽到&#xff1a;ACI 銅牌題&#xff1a;BG 銀牌題&#xff1a;EF 金牌題&#xff1a;DHJKO 賽中暫未有人通過&#xff1a;LMNP A - AB Problem 直接根據公式計算就行。 #include<stdio.h> int main(){int a,b;scanf("%…

安卓MediaRecorder(2)錄制源碼分析

文章目錄 前言JAVA new MediaRecorder() 源碼分析android_media_MediaRecorder.cpp native_init()MediaRecorder.java postEventFromNativeandroid_media_MediaRecorder.cpp native_setup() MediaRecorder 參數設置MediaRecorder.prepare 分析MediaRecorder.start 分析MediaRec…

當前 .NET SDK 不支持面向 .NET X.0 (如8.0)問題的解決方案

如果您加載方案或運行時出現如下錯誤時&#xff1a; 當前 .NET SDK 不支持面向 .NET 8.0。請面向 .NET 7.0 或更低版本&#xff0c;或者使用支持 .NET 8.0 的 .NET SDK 版本。從 https://aka.ms/dotnet/download 下載 .NET SDK (項目名稱).Domain C:\Program Files\dotnet\…

Windows在cmd中執行bat腳本

在Linux中執行腳本常用的是sh或者直接輸入腳本名稱即可。 sh shell腳本.sh # 或者 shell腳本.sh在Windows中類似&#xff0c;使用start或者直接輸入腳本名稱。 start bat腳本.bat :: 或者 bat腳本.bat

【Angular開發】Angular在2023年之前不是很好

做一個簡單介紹&#xff0c;年近48 &#xff0c;有20多年IT工作經歷&#xff0c;目前在一家500強做企業架構&#xff0e;因為工作需要&#xff0c;另外也因為興趣涉獵比較廣&#xff0c;為了自己學習建立了三個博客&#xff0c;分別是【全球IT瞭望】&#xff0c;【架構師酒館】…

SSL證書更新

首先&#xff0c;我們需要理解為什么需要更新SSL證書。SSL證書的有效期通常為一年。一旦證書過期&#xff0c;瀏覽器會顯示警告&#xff0c;提示用戶該網站的SSL證書已經過期&#xff0c;這可能會導致用戶對網站的信任度下降&#xff0c;甚至直接離開網站。此外&#xff0c;一些…

【Python】手把手教你用tkinter設計圖書管理登錄UI界面(一)

下一篇&#xff1a; 本項目將分段設計“圖書管理登錄UI界面”的用戶登錄、用戶注冊、用戶賬號找回等。主要圍繞GUI標準庫tkinter、以及類的繼承&#xff08;重點&#xff09;來設計本項目。 首先新建一個文件夾命名為“圖書管理系統項目”&#xff0c;并在其目錄下新建文件夾…

【分治】最接近點對Python實現

文章目錄 [toc]問題描述一維最接近點對算法Python實現 二維最接近點對算法分治算法時間復雜性Python實現 問題描述 給定平面上 n n n個點&#xff0c;找其中的一對點&#xff0c;使得在 n n n個點組成的所有點對中&#xff0c;該點對的距離最小 一維最接近點對算法 Python實…

LED透鏡粘接UV膠是一種特殊的UV固化膠,用于固定和粘合LED透鏡。

LED透鏡粘接UV膠是一種特殊的UV固化膠&#xff0c;用于固定和粘合LED透鏡。 它具有以下特點&#xff1a; 1. 高透明度&#xff1a;LED透鏡粘接UV膠具有高透明度&#xff0c;可以確保光線的透過性&#xff0c;不影響LED的亮度和效果。 2. 快速固化&#xff1a;經過UV紫外線照射…

CPU、MCU、MPU、DSP、FPGA各是什么?有什么區別?

1、CPU 中央處理器&#xff0c;簡稱 CPU&#xff08;Central Processing Unit&#xff09;&#xff0c;中央處理器主要包括兩個部分&#xff0c;即控制器、運算器&#xff0c;其中還包括高速緩沖存儲器及實現它們之間聯系的數據、控制的總線。 電子計算機三大核心部件就是CPU…

力扣257. 二叉樹的所有路徑(遞歸回溯與迭代)

題目&#xff1a; 給你一個二叉樹的根節點 root &#xff0c;按 任意順序 &#xff0c;返回所有從根節點到葉子節點的路徑。 葉子節點 是指沒有子節點的節點。 示例 1&#xff1a; 輸入&#xff1a;root [1,2,3,null,5] 輸出&#xff1a;["1->2->5","…

[隴劍杯 2021]簡單日志分析

[隴劍杯 2021]簡單日志分析 題目做法及思路解析&#xff08;個人分享&#xff09; 問一&#xff1a;某應用程序被攻擊&#xff0c;請分析日志后作答&#xff1a; 黑客攻擊的參數是______。&#xff08;如有字母請全部使用小寫&#xff09;。 題目思路&#xff1a; 分析…