<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
今天呢,筆者想和大家聊聊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()
到此這篇關於python+pytest自動化測試函數測試類測試方法的封裝的文章就介紹到這了,更多相關python測試函數內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45