Pytest 與 Mock
這篇是記錄我在看鐵人賽 Python 與自動化測試的敲門磚 的過程 專案練習有同步到 github 上,可以前往 這個網址 pytest-mock 使用情境今天我們要說明該如何再進行測試時,把不想要執行的方法給替換掉,在測試的過程中,有時候只是要測試函式的可用性,但像是發送 email、撰寫檔案等等的函式,往往是不希望被執行的,總不能每執行一次測試就寄一封 mail 給你,這樣信箱會很快就爆炸的,針對這個情況我們就可以透過 pytest-mock 來替我們進行函式的抽換,並回傳假的資料,只要確認函式運行的流程是正確的即可 套件安裝1pip install pytest-mock 抽換屬性建立函式 demo.py建立一個透過 sys 取得 platform 的函式 123456import sysdef get_sys_platform(): platform = sys.platform return platform 建立測試函式 test_demo.py將會用到的 package 全部 import 近來直接在 test case 當中的參數部分打上...
自動化測試 CI/CD
這篇是記錄我在看鐵人賽 Python 與自動化測試的敲門磚 的過程 CI/CD 簡介CI/CD 其實是指兩個部分,分別是 Continuous Integration (持續整合) 以及 Continuous Deployment (持續部屬) CI 持續整合在軟體開發的過程中,通常會由無數個開發人員一起工作,然而隨著程式碼以及人數的增加,專案會越來越難進行整合,這個時候我們就可以透過 CI 來進行。與其說 CI 是個工具,不如說 CI 是一種合作模式,藉由簡單的設定來讓 CI 工具替我們進行測試,就可以降低我們的專案在進行更新、整合時碰到問題的機率。 在 CI 執行的過程中,會建議每個開發人員每天上班前先做一次 pull 的動作,於每天下班前至少執行一次 push 的動作,以此確保 CI 的運行效率。 CD 持續部屬每當我們透過 CI 將專案整合完成後,便可以透過 CD 來進行自動化的部屬,減少我們在測試與部屬之間所耗費的時間 CI/CD 常用工具GitLab於 GitLab 上提供了 CI/CD 的介面,藉由在某處部屬好的...
Linux 複製檔案 cp 指令
複製檔案若要將 source.txt 檔案複製一份到 dest.txt,可以執行: 12# 將 source.txt 複製到 dest.txtcp source.txt dest.txt 複製目錄如果要複製整個目錄以及該目錄下的所有子目錄與檔案,可以加上 -r 參數(或是 -R、–recursive 參數亦可),以遞迴的方式進行複製: 12# 將 myfolder 目錄複製到 /path/to/ 路徑下cp -r myfolder /path/to/ 強制覆蓋檔案如果希望 cp 指令在無法寫入目的檔案時,嘗試刪除目的檔案,再重新複製一份新的檔案,可以加上 -f 或 –force 參數: 1cp -f source.txt dest.txt 不要覆蓋既有檔案如果希望 cp 指令遇到目的檔案已經存在的狀況,不要覆蓋既有的檔案,可以加上 -n 或 –no-clobber 參數: 1cp -n source.txt dest.txt 自動備份檔案若希望 cp 指令在覆蓋檔案時,可以將舊檔案自動備份起來,可以加上 -b 或 –backup 參數: 1cp -b source.txt...
Docker 基本操作 - 進入容器
Docker 進入容器 以下文章是在使用 Docker 時查詢到的好文章 我覺得這篇記錄的很詳細,所以記錄一下 exec 命令docker exec 是Docker內建的命令。下面示範如何使用該命令。 1234567$ sudo docker run -idt ubuntu243c32535da7d142fb0e6df616a3c3ada0b8ab417937c853a9e1c251f499f550$ sudo docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES243c32535da7 ubuntu:latest "/bin/bash" 18 seconds ago Up 17 seconds nostalgic_hypatia$sudo...
Selenium 自動化測試
這篇是記錄我在看鐵人賽 Python 與自動化測試的敲門磚 的過程 套件安裝selenium:用來建立模擬器webdriver_manager:用來協助我們做驅動程式的安裝,可以無需實際下載瀏覽器的驅動程式 12pip install seleniumpip install webdriver_manager 快速入門程式解析: 透過 make_webdriver 內的程式碼,可以建立一個 Chrome 物件,習慣上我們會將此物件命名為 driver透過實作該方法得到 driver透過 driver.get() 對網址進行請求,這個時候 driver 就會實際替我們開啟一個瀏覽器為了展示開啟成功,使用 time.sleep() 讓瀏覽器畫面停止一下使用 driver.quit() 來確保瀏覽器完全關閉,不會殘留在記憶體當中 12345678910111213141516171819import timefrom selenium.webdriver import Chromefrom webdriver_manager.chrome import...
TDD 測試驅動開發流程
這篇是記錄我在看鐵人賽 Python 與自動化測試的敲門磚 的過程 TDD 簡介TDD 全名為 Test-Driven Development 中文翻譯為 「測試驅動開發」,顧名思義就是藉著撰寫測試程式,來一步一步建構出我們的系統,其倡導的概念為,先撰寫測試程式,再撰寫實際相對應的 function,因此程式開發者需要先行和 PM 或使用者討論系統需求,並逐步擬定測試計畫,最後才會真正開始撰寫程式 採用 TDD 開發的優缺點 好處 壞處 無須事後再補寫測試程式 若系統需求溝通不良,會容易造成系統設計不良 每一位 RD 都可以透過測試程式了解每個 function 的內容,較容易熟悉系統 測試程式有很大的機率只有 RD 部門看得懂,需要花費多於成本溝通 可以確保每個 function 被更動時,可以馬上進行測試,降低錯誤產生 3A 原則在 TDD 當中,對於每個測試程式的撰寫有著 3A 原則 (步驟),分別為 Arrange、Act 以及 Assert,下面按照順序來進行說明 下面這段程式碼是我們在 demo 3A...
在Windows上安裝 pnpm
前言因為練習Next.js 開發blog 需要安裝 pnpm 紀錄一下 windows 上如何安裝pnpm 後來在這篇文章找到解決方法 參考影片: https://www.youtube.com/watch?v=q5iDjNR1O7Y&ab_channel=GeekyScript 打開CMD執行以下指令1set-ExecutionPolicy RemoteSigned -Scope CurrentUser 以上是一個 PowerShell 命令set-ExecutionPolicy:這是 用於設置執行策略。 RemoteSigned:這是一個執行策略的值。在這種情況下,它表示允許執行本地(在本機計算機上)簽名過的腳本,但來自遠程位置(例如網絡上的腳本)的腳本需要經過簽名才能執行。這有助於提高安全性,因為它可以防止遠程未經信任的腳本在你的系統上運行。 -Scope CurrentUser:這部分指定了執行策略的作用範圍。在這種情況下,它設置執行策略只對當前使用者(CurrentUser)生效,而不會影響其他使用者。這是一種局部的設置,只影響當前使用者的...
使用docker執行jenkins
使用docker執行jenkins拉取docker hub上的jenkins image1docker pull jenkinsci/blueocean 運行docker 鏡像命令12345678910docker run \ -u root \ --rm \ -d \ -p 8081:8080 \ -p 50000:50000 \ -v jenkins-data:/root/docker/jenkins_home \ -v $PWD/allure-results:/allure-results \ -v /var/run/docker.sock:/var/run/docker.sock \ jenkinsci/blueocean 執行後可以看見docker 運行的狀況 打開8081 port,登入jenkins首頁http://localhost:8081/ 進入容器取得管理員密碼點擊docker 點擊 Terminal 輸入 cat...
Pytest 自動測試
Pytest 指令1pytest <.py 檔案位置> 範例:pytest .\day_03\test_demo.py 參數執行1.列出每個 test case 的執行狀況 1pytest -v <目錄 or 檔案位置> 2.會印出在 test case 內有 print 出來的數值 1pytest -s <目錄 or 檔案位置> 3.不同的參數間,也可以進行混用,這邊進行簡單的範例展示 1pytest -s -v <目錄 or 檔案位置>: 產生報表產出 JSON 格式報表安裝 pytest-json-report 套件1pip install pytest-json-report 套件使用1pytest <pytest 原生參數 ex: -s -v> --json-report --json-report-file=<檔案名稱 or ./目錄位置/檔案名稱> <要執行的 .py 檔案 (可省略直接對整個目錄做讀取)> 使用範例:pytest -s -v –json-report...
Python 與自動化測試
前言這篇是記錄我在看鐵人賽 Python 與自動化測試的敲門磚 的過程 主題 主題 日程 簡介 day 01 Pytest day 02 ~ 10 TDD day 11 ~ 12 Selenium day 13 ~ 17 Appium day 18 ~ 21 CI/CD day 22 ~ 26 Jenkins day 27 ~ 29 結語 day 30 PytestPytest 是一種使用在 Python 語言裡面的一中單元測試框架,而 Pytest 基本上就是由 Python 原生自帶的單元測試框架 Unittest 衍生出來的,所以可以看到有些範例可以和 Unittest 的套件互相兼容混用。 Pytest 和 Unittest 相比,有下列幾項優點: 更易於上手,撰寫 testcase 時較為直覺 擴展性高,可以兼容許多外掛套件 可以標註某些 testcase 為失敗是正常的 測試程式撰寫起來相較於 unittest 較為簡潔 TDDTDD 完整名稱為 Test-driven development,中譯為...