国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

代碼測試用例指南

chinafgj / 2958人閱讀

摘要:測試的通用規則測試單元應該集中于小部分的功能,并且證明它是對的。通過去除依賴盡量使測試單元快速運行。實現來持續集成通過代碼提交的本地或者來持續集成測試你的代碼。

原文鏈接:http://blog.speedx.com/backend-test-guide

將測試代碼和運行代碼一起寫是一種非常好的習慣。聰明地使用這種方法將會幫助你更加精確地定義代碼的含義,并且代碼的耦合性更低。

測試的通用規則:

測試單元應該集中于小部分的功能,并且證明它是對的。

每個測試單元應該完全獨立。

通過Mock去除依賴

盡量使測試單元快速運行。

實現鉤子來持續集成

我們通過一個簡單的python程序及unittest作為示例來為大家介紹如何進行測試,這里推薦大家使用python3來運行示例。

我們先創建一個將會使用的測試目錄

mkdir /tmp/TestHookTest
cd /tmp/TestHookTest
測試單元應該集中于小部分的功能,并且證明它是對的

下圖為unittest包中包含的斷言

我們現在來寫一個通過用戶名獲得github信息的一個函數,并對這個函數進行測試

# 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運行

每個測試單元應該完全獨立

每個都能夠多帶帶運行,除了調用的命令,都需在測試套件中。要想實現這個規則,測試單元應該加載最新的數據集,之后再做一些清理。

如果有數據庫依賴,在每次測試前創建測試數據庫,結束后銷毀該數據庫,測試應該有多帶帶的數據庫,不要在生產和開發環境測試,避免數據變化引起的測試失敗

通過Mock去除依賴

假設我們現在想把取得的用戶數據保存到本地,并測試是否正確保存

# 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中的返回數據,現實情況中會遇到更為復雜的依賴,為了一個測試用例,我們可能需要構建大量的初始化數據。我們可以通過mock來解除這個依賴,讓test_save_data專注于測試保存數據部分

# 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"])
盡量使測試單元快速運行

如果一個多帶帶的測試單元需要較長的時間去運行,開發進度將會延遲,測試單元將不能如期常態性運行。有時候,因為測試單元需要復雜的數據結構,并且當它運行時每次都要加載,所以其運行時間較長。把運行吃力的測試單元放在多帶帶的測試組件中,并且按照需要運行其它測試單元。

實現hook來持續集成

通過代碼提交的本地hook或者webhook來持續集成測試你的代碼。

舉個git本地hook的例子(這可假設你了解git hook的工作原理)。

> git init
> vim .git/hooks/pre-commit

.git/hooks/pre-commit文件中寫入

#!/bin/sh

cd /tmp/TestHookTest && python3 -m unittest test

執行:

> 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

在遠程代碼倉庫部署的webhook能更好的測試全部代碼。

Python指南-測試你的代碼

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/38439.html

相關文章

  • 100天漲薪4k!從功能測試到自動化測試,我整理的超全學習指南

    摘要:事實上,自動化測試是相對于手動的。減少人為的錯誤自動化測試是機器完成,不存在執行過程中人為的疏忽和錯誤,測試設計完全決定了測試的質量,可以降低減少人為造成的錯誤。而接口自動化測試,主要是對接口進行測試。 今年6月份,由于經濟壓力讓我下定決心進階自動化測試,已經24的我做了3年功能測試,坐標廣...

    TwIStOy 評論0 收藏0
  • 無頭瀏覽器測試可視化:Laravel Dusk 控制臺入門指南

    摘要:通過添加此功能,該程序包將啟用記錄請求和響應信息所需的功能。是一條普通控制器路由,用于輸出控制臺的視圖。收集瀏覽器行為這是整個擴展包最乏味的部分。 Laravel Dusk 控制臺是一款 Laravel 擴展包,能夠為你的 Dusk 測試套件提供漂亮的可視面板。通過它,你可以可視化運行 Dusk 測試時涉及的各個步驟,以及查看每個步驟的 DOM 快照。這對于調試瀏覽器測試、并搞清楚后臺...

    levius 評論0 收藏0
  • Maven_00

    摘要:例如,可以提供更改日志用源碼管理工具生成交叉引用郵件列表依賴清單單元測試報告含覆蓋率提供開發過程的最佳實踐指南通過收集現行的開發最佳實踐,來指導用構建的項目。 本文大約1026個字,閱讀時間4分鐘。 主要介紹了Maven名字的由來、Maven產生的背景和Maven的主要功能。 問題:Maven是啥? 大多數人都用Maven來管理Java項目的依賴,這個應該是Maven的主要功能沒跑了,...

    booster 評論0 收藏0
  • 錄制回放模式創建測試用例 - Katalon Studio

    摘要:的這個功能支持錄制測試用例,并可在多種瀏覽器中回放。允許用戶對所捕獲的對象選擇定位模式。這樣做有助于重用及維護對象。步驟打開并點擊主工具欄上的首個測試用例按鍵。步驟記錄下來的對象和動作會象以下顯示的那樣保存到測試用例中。 對于自動化測試菜鳥來說,開始學習自動化最簡單的方法是測試錄制。識別應用系統上的對象是一件費時且痛苦的事情。Web Recorder Utility(網頁錄制功能)?捕...

    姘擱『 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<