網站首頁 編程語言 正文
前言
今天呢,筆者想和大家聊聊python+pytest接口自動化中將代碼進行封裝,只有將測試代碼進行封裝,才能被測試框架識別執行。
例如單個接口的請求代碼如下:
import requests
headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36"
}
url = "https://mp.toutiao.com/profile_v4/"
res = requests.get(url=h_url, headers=headers)
假設我們需要將上面這段代碼編寫成測試框架能執行的測試用例,僅僅只是這樣寫代碼顯然是不夠的,還需要進行如下補充:
需要將代碼封裝成單元測試框架 (pytest或unittest) 能識別的測試函數或測試類,否則將不會被識別執行。需要加上斷言,即結果與期望之間的對比,單元測試框架才能判定該用例執行結果是否通過,結果==期望則說明通過,否則失敗。
python中函數以及類的封裝這里不做過多說明,這篇文章的目的是讓大家明白在接口自動化測試中一般怎樣封裝測試代碼。
一、測試用例封裝的一般規則
測試用例的封裝有兩種,測試函數和測試類,封裝的一般規則如下:
一個測試函數對應一條測試用例。測試類中可定義多個測試方法,一個測試方法對應一條測試用例,測試類可以看作是一個測試用例集。pytest中測試函數或測試方法的命名必須以test開頭,測試類名必須以Test開頭。具體命名規則可以參考我之前的文章pytest(3)-測試命名規則。對于單接口的測試校驗,一個單接口的測試用例只包含一個接口請求,即將一個接口請求封裝成一個測試函數或測試方法。對于場景(多接口) 的測試校驗,一條場景測試用例需請求多個接口,因此需要將多個接口請求封裝在同一個測試函數或方法中。一般封裝一個接口的正向校驗、異常校驗封裝成不同的方法,并封裝在同一個測試類中。如定義一個登陸的測試類,正確用戶名、密碼請求封裝成一個方法 (即一條測試用例),正確用戶名、錯誤密碼請求封裝成另一個方法 (即另一條測試用例)。也可以將某個功能點或功能相關聯的接口用例封裝在同一個測試類中。比如個人中心涉及到的接口,可以封裝在同一個測試類中二、測試函數的封裝
一般而言,一個測試函數對應一條用例。上面的代碼編寫成一條測試用例,示例如下:
?強調,pytest中測試函數命名必須以test開頭,如test_get_home。
三、測試類/方法的封裝
一個測試類相當于一個測試用例集,類中的每個方法對應一條測試用例。以登錄接口為例,封裝成測試類,示例如下:
?強調,pytest中測試類命名需要以Test開頭,如TestLogin,且測試類中不能有init方法。測試類中測試方法必須以test開頭,如test_login_normal。
四、示例代碼
pytest中可以使用命令行或者使用代碼方式即 pytest.main() 執行用例,具體可參考文章pytest(1)-簡介。
完整的示例代碼如下:
import requests
import pytest
import json
def test_get_home():
'''
請求首頁接口
:return:
'''
headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36"
}
url = "https://www.cnblogs.com/lfr0123/"
res = requests.get(url=url, headers=headers)
# 斷言,判斷返回結果的code是否等于200,當然實際接口測試中一般返回結果中還會有別的字段需要斷言
assert res.status_code == 200
class TestLogin:
'''
登錄接口校驗
'''
url = "http://127.0.0.1:5000/login"
headers = {"Content-Type": "application/json;charset=utf8"}
def test_login_normal(self):
'''正確用戶名、正確密碼登錄'''
data = {
"username": "AndyLiu",
"password": "123456"
}
res = requests.post(url=self.url, json=data, headers=self.headers)
# 斷言
assert res.status_code == 200
assert json.loads(res.text)["token"]
def test_login_error(self):
'''正確用戶名、錯誤密碼登錄'''
data = {
"username": "AndyLiu",
"password": "111111"
}
res = requests.post(url=self.url, json=data, headers=self.headers)
# 斷言
assert res.status_code == 200
assert not json.loads(res.text)["token"]
if __name__ == '__main__':
pytest.main()
總結
- 測試函數、測試類/測試方法的封裝,其實不管是什么單元測試框架,遵循的方式都一樣。
- 而在命名方式上各有自己的要求,比如pytest與unittest中測試命名方法有一定的區別。
- 把一個有自己斷言的函數或方法看成是一條測試用例,那么測試類其實就是一個含有一條或者多條測試用例的測試用例集,類中的每個方法對應一條測試用例。
- 一個測試類中放置哪些測試方法,換句話說一個測試用例集中應該包含哪些測試用例,這個可以按照項目自身情況而定,也可按照測試人員自己的想法而定,主旨就是要清晰明了
原文鏈接:https://blog.csdn.net/ifling99/article/details/125322607
相關推薦
- 2022-08-16 C語言超詳細講解函數指針的運用_C 語言
- 2023-01-27 C#實現拆分合并Word表格中的單元格_C#教程
- 2023-07-16 uniapp 小程序 filters 過濾日期
- 2023-04-22 python統計函數被調用次數的實現_python
- 2022-07-29 Linux進程管理方法介紹_linux shell
- 2022-04-26 Jquery實現多選下拉列表左右移動_jquery
- 2023-10-31 SpringBoot手動獲取實例
- 2021-12-10 linux中的軟連接和硬連接詳解_Linux
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支