摘要:測試的通用規(guī)則測試單元應(yīng)該集中于小部分的功能,并且證明它是對的。通過去除依賴盡量使測試單元快速運行。實現(xiàn)來持續(xù)集成通過代碼提交的本地或者來持續(xù)集成測試你的代碼。
原文鏈接:http://blog.speedx.com/backend-test-guide
將測試代碼和運行代碼一起寫是一種非常好的習(xí)慣。聰明地使用這種方法將會幫助你更加精確地定義代碼的含義,并且代碼的耦合性更低。
測試的通用規(guī)則:
測試單元應(yīng)該集中于小部分的功能,并且證明它是對的。
每個測試單元應(yīng)該完全獨立。
通過Mock去除依賴
盡量使測試單元快速運行。
實現(xiàn)鉤子來持續(xù)集成
我們通過一個簡單的python程序及unittest作為示例來為大家介紹如何進(jìn)行測試,這里推薦大家使用python3來運行示例。
我們先創(chuàng)建一個將會使用的測試目錄
mkdir /tmp/TestHookTest cd /tmp/TestHookTest測試單元應(yīng)該集中于小部分的功能,并且證明它是對的
下圖為unittest包中包含的斷言
我們現(xiàn)在來寫一個通過用戶名獲得github信息的一個函數(shù),并對這個函數(shù)進(jìn)行測試
# test.py import unittest import json import requests def fetch_github_profile(username): response = requests.get("https://api.github.com/users/" + username) return response.json() class SaveDataTest(unittest.TestCase): def test_fetch_github_profile(self): username = "ZhangBohan" data = fetch_github_profile("ZhangBohan") self.assertEqual(data["login"], username)
通過python3 -m unittest test運行
每個測試單元應(yīng)該完全獨立每個都能夠多帶帶運行,除了調(diào)用的命令,都需在測試套件中。要想實現(xiàn)這個規(guī)則,測試單元應(yīng)該加載最新的數(shù)據(jù)集,之后再做一些清理。
如果有數(shù)據(jù)庫依賴,在每次測試前創(chuàng)建測試數(shù)據(jù)庫,結(jié)束后銷毀該數(shù)據(jù)庫,測試應(yīng)該有多帶帶的數(shù)據(jù)庫,不要在生產(chǎn)和開發(fā)環(huán)境測試,避免數(shù)據(jù)變化引起的測試失敗
通過Mock去除依賴
假設(shè)我們現(xiàn)在想把取得的用戶數(shù)據(jù)保存到本地,并測試是否正確保存
# test.py import unittest import json import requests def fetch_github_profile(username): response = requests.get("https://api.github.com/users/" + username) return response.json() def save_data(data): with open("data.json", "w") as f: f.write(json.dumps(data)) class SaveDataTest(unittest.TestCase): def test_fetch_github_profile(self): username = "ZhangBohan" data = fetch_github_profile("ZhangBohan") self.assertEqual(data["login"], username) def test_save_data(self): data = fetch_github_profile("ZhangBohan") save_data(data) with open("data.json") as f: file_data = json.loads(f.read()) self.assertIsNotNone(file_data) self.assertEqual(data["id"], file_data["id"])
在這個測試中我們的test_save_data中的data依賴fetch_github_profile中的返回數(shù)據(jù),現(xiàn)實情況中會遇到更為復(fù)雜的依賴,為了一個測試用例,我們可能需要構(gòu)建大量的初始化數(shù)據(jù)。我們可以通過mock來解除這個依賴,讓test_save_data專注于測試保存數(shù)據(jù)部分
# test.py import unittest import json from unittest.mock import MagicMock import requests def fetch_github_profile(username): response = requests.get("https://api.github.com/users/" + username) return response.json() def save_data(data): with open("data.json", "w") as f: f.write(json.dumps(data)) FAKE_PROFILE_DATA = { "login": "ZhangBohan", "id": 2317407 } class SaveDataTest(unittest.TestCase): def test_fetch_github_profile(self): username = "ZhangBohan" data = fetch_github_profile("ZhangBohan") self.assertEqual(data["login"], username) def test_save_data(self): fetch_github_profile = MagicMock(return_value=FAKE_PROFILE_DATA) data = fetch_github_profile("ZhangBohan") save_data(data) with open("data.json") as f: file_data = json.loads(f.read()) self.assertIsNotNone(file_data) self.assertEqual(data["id"], file_data["id"])盡量使測試單元快速運行
實現(xiàn)hook來持續(xù)集成如果一個多帶帶的測試單元需要較長的時間去運行,開發(fā)進(jìn)度將會延遲,測試單元將不能如期常態(tài)性運行。有時候,因為測試單元需要復(fù)雜的數(shù)據(jù)結(jié)構(gòu),并且當(dāng)它運行時每次都要加載,所以其運行時間較長。把運行吃力的測試單元放在多帶帶的測試組件中,并且按照需要運行其它測試單元。
通過代碼提交的本地hook或者webhook來持續(xù)集成測試你的代碼。
舉個git本地hook的例子(這可假設(shè)你了解git hook的工作原理)。
> git init > vim .git/hooks/pre-commit
在.git/hooks/pre-commit文件中寫入
#!/bin/sh cd /tmp/TestHookTest && python3 -m unittest test
執(zhí)行:
> chmod +x .git/hooks/pre-commit > git add test.py > git commit -m "test hook" . ---------------------------------------------------------------------- Ran 1 test in 0.000s OK [master (root-commit) b390117] test hook 1 file changed, 9 insertions(+) create mode 100644 test.py
在遠(yuǎn)程代碼倉庫部署的webhook能更好的測試全部代碼。
Python指南-測試你的代碼
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/38439.html
摘要:事實上,自動化測試是相對于手動的。減少人為的錯誤自動化測試是機器完成,不存在執(zhí)行過程中人為的疏忽和錯誤,測試設(shè)計完全決定了測試的質(zhì)量,可以降低減少人為造成的錯誤。而接口自動化測試,主要是對接口進(jìn)行測試。 今年6月份,由于經(jīng)濟壓力讓我下定決心進(jìn)階自動化測試,已經(jīng)24的我做了3年功能測試,坐標(biāo)廣...
摘要:通過添加此功能,該程序包將啟用記錄請求和響應(yīng)信息所需的功能。是一條普通控制器路由,用于輸出控制臺的視圖。收集瀏覽器行為這是整個擴展包最乏味的部分。 Laravel Dusk 控制臺是一款 Laravel 擴展包,能夠為你的 Dusk 測試套件提供漂亮的可視面板。通過它,你可以可視化運行 Dusk 測試時涉及的各個步驟,以及查看每個步驟的 DOM 快照。這對于調(diào)試瀏覽器測試、并搞清楚后臺...
摘要:的這個功能支持錄制測試用例,并可在多種瀏覽器中回放。允許用戶對所捕獲的對象選擇定位模式。這樣做有助于重用及維護(hù)對象。步驟打開并點擊主工具欄上的首個測試用例按鍵。步驟記錄下來的對象和動作會象以下顯示的那樣保存到測試用例中。 對于自動化測試菜鳥來說,開始學(xué)習(xí)自動化最簡單的方法是測試錄制。識別應(yīng)用系統(tǒng)上的對象是一件費時且痛苦的事情。Web Recorder Utility(網(wǎng)頁錄制功能)?捕...
閱讀 5076·2023-04-25 19:30
閱讀 2173·2023-04-25 15:09
閱讀 2618·2021-11-16 11:45
閱讀 2171·2021-11-15 18:07
閱讀 1458·2021-11-11 17:22
閱讀 2115·2021-11-04 16:06
閱讀 3576·2021-10-20 13:47
閱讀 3036·2021-09-22 16:03