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

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

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

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

一,明確測試對象

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

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

通過抓包我們抓取到了該接口的信息如下:

請求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內容。

?自動化測試相關教程推薦:

2023最新自動化測試自學教程新手小白26天入門最詳細教程,目前已有300多人通過學習這套教程入職大廠!!_嗶哩嗶哩_bilibili

2023最新合集Python自動化測試開發框架【全棧/實戰/教程】合集精華,學完年薪40W+_嗶哩嗶哩_bilibili

測試開發相關教程推薦

2023全網最牛,字節測試開發大佬現場教學,從零開始教你成為年薪百萬的測試開發工程師_嗶哩嗶哩_bilibili

postman/jmeter/fiddler測試工具類教程推薦

講的最詳細JMeter接口測試/接口自動化測試項目實戰合集教程,學jmeter接口測試一套教程就夠了!!_嗶哩嗶哩_bilibili

2023自學fiddler抓包,請一定要看完【如何1天學會fiddler抓包】的全網最詳細視頻教程!!_嗶哩嗶哩_bilibili

2023全網封神,B站講的最詳細的Postman接口測試實戰教學,小白都能學會_嗶哩嗶哩_bilibili

封裝測試代碼

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

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/164371.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/164371.shtml
英文地址,請注明出處:http://en.pswp.cn/news/164371.shtml

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

相關文章

JVM 之 class文件詳解

目錄 一. 前言 二. class文件結構 2.1. 文件格式 2.2. 魔數與版本號 2.3. 常量池 2.4. 訪問標志 2.5. 類索引、父類索引和接口索引集合 2.6. 字段表集合 2.7. 方法表集合 2.8. 屬性表集合 2.8.1. Code 屬性表 2.8.2. Exceptions 屬性 2.8.3. LineNumberTable 屬性…

R語言數據縮放-1到1

目錄 普通scale -1到1限定范圍scale 普通scale R語言實戰:scale()函數 - 知乎 (zhihu.com) scale(x, center TRUE, scale TRUE) 過程: 對每個變量(列)計算平均值(mean)和標準…

QT中樣式表常見屬性與顏色的設置與應用

常見樣式表屬性 在Qt中的樣式表(QSS)中,有一些特定的英文單詞和關鍵字用于指定不同的樣式屬性。以下是常見的一些英文單詞和關鍵字: 顏色(Colors): color: 文本顏色 background-color: 背景顏色 border-color: 邊框顏色 字體(Fonts): font: 字體 font-family: 字體…

任意文件下載漏洞(CVE-2021-44983)

簡介 CVE-2021-44983是Taocms內容管理系統中的一個安全漏洞,可以追溯到版本3.0.1。該漏洞主要源于在登錄后臺后,文件管理欄存在任意文件下載漏洞。簡言之,這個漏洞可能讓攻擊者通過特定的請求下載系統中的任意文件,包括但不限于敏…

python3實現grep命令

由于windows上面沒有類似linux上面的grep命令,所以下面的python腳本來代替其能力。 grep.py import argparse import reif __name__ __main__:arg_parser argparse.ArgumentParser()arg_parser.add_argument("grep")arg_parser.add_argument("fil…

圖像導向濾波

導向濾波(Guided Filter)是一種基于局部線性模型的濾波方法,用于圖像處理中的去噪、圖像增強和邊緣保留等任務。它結合了引導圖像(guide image)和輸入圖像來實現對輸入圖像的濾波操作。 原理 數學原理: …

文件名稱管理文件:抓關鍵字歸類文件,讓文件管理變得簡單明了

在當今數字時代,每天都要處理大量的文件,無論是文本、圖片、視頻還是其他類型的文件。如何有效地管理這些文件,能夠迅速找到所需的信息,已經成為了一個重要的問題。文件名稱是文件內容的第一反映,也是識別和檢索文件的…

408-數據結構-代碼題

2014 2014 二叉樹&#xff08;鏈式存儲&#xff09; #include<iostream> #include<bits/stdc.h> using namespace std;typedef struct Node{struct Node *left;struct Node *right;int high0;double weight; }node;double sum0;void visit(node *t){int lop0;if…

算法刷題-動態規劃2(繼續)

算法刷題-動態規劃2 珠寶的最高價值下降路徑最小和使用最小花費爬樓梯整數拆分 珠寶的最高價值 題目 大佬思路 多開一行使得代碼更加的簡潔 移動到右側和下側 dp[ i ][ j ]有兩種情況&#xff1a; 第一種是從上面來的禮物最大價值&#xff1a;dp[ i ][ j ] dp[ i - 1 ][ j ]…

【CCF-PTA】第03屆Scratch第02題 -- 計算天數

計算天數 【題目描述】 一年有 365 天還是有 366 天呢&#xff1f;要看這一年是不是閏年。有個計算方法可以幫助我們判斷&#xff0c;那就是閏年能夠除盡 4 但不能除盡 100 或者能夠除盡 400 的年份。如果這一年是閏年&#xff0c;2 月份的天數就是 29 天。小明決定編寫一個程…

排序算法--希爾排序

實現邏輯 ① 先取一個小于n的整數d1作為第一個增量&#xff0c;把文件的全部記錄分成d1個組。 ② 所有距離為d1的倍數的記錄放在同一個組中&#xff0c;在各組內進行直接插入排序。 ③ 取第二個增量d2小于d1重復上述的分組和排序&#xff0c;直至所取的增量dt1(dt小于dt-l小于……

JSP:Servlet

Servlet處理請求過程 B/S請求響應模型 Servlet介紹 JSP是Servlet的一個成功應用&#xff0c;其子集。 JSP頁面負責前臺用戶界面&#xff0c;JavaBean負責后臺數據處理&#xff0c;一般的Web應用采用JSPJavaBean就可以設計得很好了。 JSPServletJavaBean是MVC Servlet的核心…

【實驗筆記】C語言實驗——降價提醒機器人

降價提醒機器人 題目&#xff1a; 小 T 想買一個玩具很久了&#xff0c;但價格有些高&#xff0c;他打算等便宜些再買。但天天盯著購物網站很麻煩&#xff0c;請你幫小 T 寫一個降價提醒機器人&#xff0c;當玩具的當前價格比他設定的價格便宜時發出提醒。 輸入格式&#xf…

人工智能教程(一):基礎知識

目錄 前言 什么是人工智能&#xff1f; 教學環境搭建 向量和矩陣 前言 如果你是關注計算機領域最新趨勢的學生或從業者&#xff0c;你應該聽說過人工智能、數據科學、機器學習、深度學習等術語。作為人工智能系列文章的第一篇&#xff0c;本文將解釋這些術語&#xff0c;并搭…

k8s部署-kuboard安裝(工具kuboard-spary)

Kuboard-Spray Kuboard-Spray 是一款可以在圖形界面引導下完成 Kubernetes 高可用集群離線安裝的工具 配置要求 對于 Kubernetes 初學者&#xff0c;在搭建K8S集群時&#xff0c;推薦在阿里云或騰訊云采購如下配置&#xff1a;&#xff08;您也可以使用自己的虛擬機、私有云等…

HCIP --- HCIA(部分匯總)--- 點對點網絡

抽象語言 --- 電信號 抽象語言 --- 編碼 編碼 --- 二進制 二進制 --- 電信號 處理電信號 OSI/RM ---- 開放式系統互聯參考模型 --- 1979 --- ISO --- 國際標準化組織 核心思想 --- 分層 應用層 --- 提供各種應用程序&#xff0c;抽象語言轉換成編碼&#xff0c;人機交互…

Docker 命令詳解

1. 容器生命周期管理 命令說明文檔run創建一個新的容器并運行一個命令Docker run 命令start/stop/restart啟動、停止、重啟容器Docker start/stop/restart 命令kill殺掉一個運行中的容器Docker kill 命令rm刪除一個或多個容器Docker rm 命令pause/unpause暫停 恢復容器中所有的…

Arm64版本的centos編譯muduo庫遇到的問題的歸納

環境&#xff1a;Mac m2 pro下的VMware虛擬機中Arm64 centos ./build.sh 執行后提示如下 cmake -DCMAKE_BUILD_TYPErelease -DCMAKE_INSTALL_PREFIX…/release-install-cpp11 -DCMAKE_EXPORT_COMPILE_COMMANDSON /root/package/muduo-master – Boost version: 1.69.0 – Co…

[git] 忽略已經提交的文件或文件夾

文件已經被Git跟蹤 如果某個文件已經被Git跟蹤過&#xff08;即已經添加到版本控制中&#xff09;&#xff0c;.gitignore文件對該文件將不起作用。您需要使用以下命令將該文件從Git中移除&#xff1a; git rm --cached 支持文件夾 -r <文件夾>