SlideShare a Scribd company logo
1 of 69
Download to read offline
Joe @ EDiT 2014
Tip for Editors
給新手的測試入門課
Joe @ EDiT 2014
Tip for Editors
給新手的測試入門課
Testing (in Python)
今天的參與者
Outline
• Basic Concepts
• Unit / Integration / Functional Testing
• Testing Frameworks/ Tools in Python
• Conclusion
世界上有很多測試方法
你可能已經 try 過一些 ...
Eye Testing
白目測試法
測一
情境
程式寫完了!
看起來沒問題,就直接上
傳到助教的 FTP 吧!
評估
• 「目測」不算是真正的測試
• 會對其他測試方法產生依賴性
• 需要有無與倫比的 confidence 來執行 ...
SomeBody Testing
有人 測試法
測二
情境
終於改到最後一份作業了 ... 讓
我解壓縮 ... 編譯 ... 執行 ...
當掉了 ?
給 0 分
評估
• 「有人測」意思就是由客戶測
• 助教、國 x 會、資 x 會、工 x 院、網站/App 的用戶 ...
• 風險高
• 建議採用下一種測試法 ...
i Testing
自己程式自己測
測三
情境 (with eye)
執行!
成功!
讓我瞧瞧 ... 看起來是對的
情境 (with code)
先準備一份預期的輸入輸出結果核對表
跑完收工
用程式執行程式 & 用程式驗證程式
評估
• 自己程式自己測
• 如果有蟲自己抓 <= 成本最低
• 是否要寫程式來測試自己的程式?
• 工人智慧 vs 人工智慧
閒聊結束
剛剛其實是笑點測試 ...
想想看
• 寫程式的目的是什麼?
• 滿足客戶的需求
• 怎麼知道程式有滿足客戶的需求?
• 測試(自己測 => 成本低 & 別人測 => 風險高)
• 如何讓測試有效率?
• 自動化測試流程
開發 vs 測試
一體兩面、相輔相成
自然
撰寫測試
來看更多例子
進入下一主題
Outline
• Basic Concepts
• Unit / Integration / Functional Testing
• Testing Frameworks/ Tools in Python
• Conclusion
如何驗證這段程式的正確性?
解一:Print 大法
評估
• 最好上手
• 只是印出來,判斷需要依賴工人智慧
• 一次性的動作
• 之後會刪掉 / 註解掉 / 忘記拿掉
解二:
Assert 斷言
評估
• 語法精簡、語義清楚
• 失敗就直接噴 error
• 一次性的動作
• 之後會刪掉 / 註解掉 / 忘記拿掉
重構
修改測試
把測試抽離到另一個檔案
把註解轉成測試 function
解決噴 Error 的問題
ToDo List
• 消去重複的程式碼
• 用一個 Loop 去執行所有測試 function
• 整個架構如果會動以後,可以寫成 class 或是
自己的測試執行函式庫 ...
• 這是好的軟體開發觀念
等等
函式庫 .. ?
我是全世界第一個寫測試
函式庫的人的機率
就跟馬皇握手不出事的機率 ...
Python 內建的 unittest
好消息
誰辭職下台?
已完成第一個unit test
恭喜(雖然是超簡化爛扣版本 XD)
Unit Testing
• 對程式中的一個 unit 進行測試
• 可能是 function ,更多機會會是 method
• 目的是驗證這個 unit 運作正不正常
• 讓對外界的依賴不要影響這個 unit 的測試
• 假設外界的狀態改變/行為/影響皆符合預期
• 一般來講,隔絕依賴後,測試執行的速度會比較快
• 所以可以更常執行測試
怎麼寫 unit test ?
卡關:因為沒有隔絕依賴 ...
重構:
使用 stub/mock/fake 隔絕依賴
簡言之
透過*許多*隔絕該 unit 對外界依賴的
手法,我們就能撰寫出 unit test
也代表
我們寫出的 unit 會具有更能適應改變
的特質 ... Ex: 如果我們要換掉 DB ?
先不聊
怎麼撰寫 unit test 因為時間不夠 XD ... 
請愛用 Google
仔細想想假設我們已經對系統內所有 unit 寫好完善的 unit tests
那麼 units 對於被隔絕的外部依賴,是正常運作的嗎?
(DB/外部API 沒有真的連過,放心嗎?)
Integration Testing
• 讓程式中的 unit/外部依賴 如接上齒輪般 動起來
• 連到真實 DB (測試用)...
• 目的是驗證 integration 的情況正不正常
• 一般來講,測試執行的速度較慢
• 有時候會使用 CI 系統,協助執行 Integration testing
Integration & Unit
偏向白箱測試
Functional Testing
黑箱測試
Functional Testing
• 從外部來測試系統 (System Testing)
• 不(管)知內部狀況
• 目的是驗證功能運作是否正常
• 例如人工點擊測試網頁/App
• 測試程式仍然可以(應該)自動化
Unit Integration Functional
在不同粒度之下驗證程式的正確性
值得研究
進入下一個主題
Outline
• Basic Concepts
• Unit / Integration / Functional Testing
• Testing Frameworks/ Tools in Python
• Conclusion
doctest
unittest
nose
py.test
lettuce
lettuce
lettuce
還有很多
沒時間了,直接進入結論
Outline
• Basic Concepts
• Unit / Integration / Functional Testing
• Testing Frameworks/ Tools in Python
• Conclusion
軟體開發
順利地完成任務
順利地完成任務
寫快一點?
完成的定義?
有哪些任務?
開發 / 測試 / 需求
今天沒辦法進入下一個主題:TDD
工商服務
Tainan.py x MOSUT
Kaosiung.py 聚會

Testing in Python

5/26 19:00
Tainan.py 聚會

Testing in Python
TDD in Python
資料分析用 Python
Simple Recommemder System
Using KNN and fp-growth

5/31 14:00
聯絡我
EDiTors
Thank you !
QA
不可能有時間吧 XD

More Related Content

Viewers also liked

PyConAPAC2014 Tainan.py 介紹
PyConAPAC2014 Tainan.py 介紹PyConAPAC2014 Tainan.py 介紹
PyConAPAC2014 Tainan.py 介紹Chun-Yu Tseng
 
當資訊科技撞上臺南牛肉湯的那些事兒 @ 2014 NCKU EDiT 科技啓蒙
當資訊科技撞上臺南牛肉湯的那些事兒 @ 2014 NCKU EDiT 科技啓蒙當資訊科技撞上臺南牛肉湯的那些事兒 @ 2014 NCKU EDiT 科技啓蒙
當資訊科技撞上臺南牛肉湯的那些事兒 @ 2014 NCKU EDiT 科技啓蒙小均 張
 
PyConAPAC2014 BoF Introduction
PyConAPAC2014 BoF IntroductionPyConAPAC2014 BoF Introduction
PyConAPAC2014 BoF IntroductionChun-Yu Tseng
 
Rubypython - 用 ruby 愛上 python
Rubypython - 用 ruby 愛上 pythonRubypython - 用 ruby 愛上 python
Rubypython - 用 ruby 愛上 pythonHonda Dai
 
Testing in python 2.7.3
Testing in python 2.7.3Testing in python 2.7.3
Testing in python 2.7.3Wen Liao
 
MLDM Monday -- Optimization Series Talk
MLDM Monday -- Optimization Series TalkMLDM Monday -- Optimization Series Talk
MLDM Monday -- Optimization Series TalkJerry Wu
 

Viewers also liked (6)

PyConAPAC2014 Tainan.py 介紹
PyConAPAC2014 Tainan.py 介紹PyConAPAC2014 Tainan.py 介紹
PyConAPAC2014 Tainan.py 介紹
 
當資訊科技撞上臺南牛肉湯的那些事兒 @ 2014 NCKU EDiT 科技啓蒙
當資訊科技撞上臺南牛肉湯的那些事兒 @ 2014 NCKU EDiT 科技啓蒙當資訊科技撞上臺南牛肉湯的那些事兒 @ 2014 NCKU EDiT 科技啓蒙
當資訊科技撞上臺南牛肉湯的那些事兒 @ 2014 NCKU EDiT 科技啓蒙
 
PyConAPAC2014 BoF Introduction
PyConAPAC2014 BoF IntroductionPyConAPAC2014 BoF Introduction
PyConAPAC2014 BoF Introduction
 
Rubypython - 用 ruby 愛上 python
Rubypython - 用 ruby 愛上 pythonRubypython - 用 ruby 愛上 python
Rubypython - 用 ruby 愛上 python
 
Testing in python 2.7.3
Testing in python 2.7.3Testing in python 2.7.3
Testing in python 2.7.3
 
MLDM Monday -- Optimization Series Talk
MLDM Monday -- Optimization Series TalkMLDM Monday -- Optimization Series Talk
MLDM Monday -- Optimization Series Talk
 

Similar to Tip for Editors

Beta testing with CI
Beta testing with CIBeta testing with CI
Beta testing with CILiyao Chen
 
使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)Max Lai
 
Mobile app的測試v2
Mobile app的測試v2Mobile app的測試v2
Mobile app的測試v2Mr PM
 
Angular Testing for Book Club Online of Angular Taiwan
Angular Testing for Book Club Online of Angular TaiwanAngular Testing for Book Club Online of Angular Taiwan
Angular Testing for Book Club Online of Angular Taiwan志龍 陳
 
單元測試-到底單什麼元,測什麼試
單元測試-到底單什麼元,測什麼試單元測試-到底單什麼元,測什麼試
單元測試-到底單什麼元,測什麼試option0417
 
Legacy code 讀書會 1st (Ch1 - Ch5)
Legacy code 讀書會 1st (Ch1 - Ch5)Legacy code 讀書會 1st (Ch1 - Ch5)
Legacy code 讀書會 1st (Ch1 - Ch5)Fong Liou
 
Foundation of software development 1
Foundation of software development 1Foundation of software development 1
Foundation of software development 1netdbncku
 
银弹!银弹! 徐毅@Italk salon 2011
银弹!银弹! 徐毅@Italk salon 2011银弹!银弹! 徐毅@Italk salon 2011
银弹!银弹! 徐毅@Italk salon 2011Yi Xu
 
豆瓣I os自动化测试实践和经验
豆瓣I os自动化测试实践和经验豆瓣I os自动化测试实践和经验
豆瓣I os自动化测试实践和经验drewz lin
 
Tcon分享 芈峮
Tcon分享 芈峮Tcon分享 芈峮
Tcon分享 芈峮mijun_hlp
 
除錯、測試與效能
除錯、測試與效能除錯、測試與效能
除錯、測試與效能Justin Lin
 
Test corner #20 誰說只有測試金字塔
Test corner #20 誰說只有測試金字塔Test corner #20 誰說只有測試金字塔
Test corner #20 誰說只有測試金字塔yinwilliam
 
例外處理與單元測試
例外處理與單元測試例外處理與單元測試
例外處理與單元測試國昭 張
 
Angular 深入淺出測試篇:單元測試入門
Angular 深入淺出測試篇:單元測試入門Angular 深入淺出測試篇:單元測試入門
Angular 深入淺出測試篇:單元測試入門志龍 陳
 
The way to continuous delivery
The way to continuous deliveryThe way to continuous delivery
The way to continuous deliveryQiao Liang
 
前端单元测试
前端单元测试前端单元测试
前端单元测试LC2009
 
敏捷自动化测试中的教训 45min 中文
敏捷自动化测试中的教训 45min   中文敏捷自动化测试中的教训 45min   中文
敏捷自动化测试中的教训 45min 中文Shuyong Lin
 
從理想、到現實的距離,開啟品味軟體測試之路 - 台灣軟體工程協會 (20220813)
從理想、到現實的距離,開啟品味軟體測試之路 - 台灣軟體工程協會 (20220813)從理想、到現實的距離,開啟品味軟體測試之路 - 台灣軟體工程協會 (20220813)
從理想、到現實的距離,開啟品味軟體測試之路 - 台灣軟體工程協會 (20220813)Rick Hwang
 

Similar to Tip for Editors (20)

Beta testing with CI
Beta testing with CIBeta testing with CI
Beta testing with CI
 
使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)
 
Mobile app的測試v2
Mobile app的測試v2Mobile app的測試v2
Mobile app的測試v2
 
單元測試
單元測試單元測試
單元測試
 
Angular Testing for Book Club Online of Angular Taiwan
Angular Testing for Book Club Online of Angular TaiwanAngular Testing for Book Club Online of Angular Taiwan
Angular Testing for Book Club Online of Angular Taiwan
 
單元測試-到底單什麼元,測什麼試
單元測試-到底單什麼元,測什麼試單元測試-到底單什麼元,測什麼試
單元測試-到底單什麼元,測什麼試
 
Legacy code 讀書會 1st (Ch1 - Ch5)
Legacy code 讀書會 1st (Ch1 - Ch5)Legacy code 讀書會 1st (Ch1 - Ch5)
Legacy code 讀書會 1st (Ch1 - Ch5)
 
Foundation of software development 1
Foundation of software development 1Foundation of software development 1
Foundation of software development 1
 
银弹!银弹! 徐毅@Italk salon 2011
银弹!银弹! 徐毅@Italk salon 2011银弹!银弹! 徐毅@Italk salon 2011
银弹!银弹! 徐毅@Italk salon 2011
 
豆瓣I os自动化测试实践和经验
豆瓣I os自动化测试实践和经验豆瓣I os自动化测试实践和经验
豆瓣I os自动化测试实践和经验
 
Tcon分享 芈峮
Tcon分享 芈峮Tcon分享 芈峮
Tcon分享 芈峮
 
除錯、測試與效能
除錯、測試與效能除錯、測試與效能
除錯、測試與效能
 
Test corner #20 誰說只有測試金字塔
Test corner #20 誰說只有測試金字塔Test corner #20 誰說只有測試金字塔
Test corner #20 誰說只有測試金字塔
 
Python系列1
Python系列1Python系列1
Python系列1
 
例外處理與單元測試
例外處理與單元測試例外處理與單元測試
例外處理與單元測試
 
Angular 深入淺出測試篇:單元測試入門
Angular 深入淺出測試篇:單元測試入門Angular 深入淺出測試篇:單元測試入門
Angular 深入淺出測試篇:單元測試入門
 
The way to continuous delivery
The way to continuous deliveryThe way to continuous delivery
The way to continuous delivery
 
前端单元测试
前端单元测试前端单元测试
前端单元测试
 
敏捷自动化测试中的教训 45min 中文
敏捷自动化测试中的教训 45min   中文敏捷自动化测试中的教训 45min   中文
敏捷自动化测试中的教训 45min 中文
 
從理想、到現實的距離,開啟品味軟體測試之路 - 台灣軟體工程協會 (20220813)
從理想、到現實的距離,開啟品味軟體測試之路 - 台灣軟體工程協會 (20220813)從理想、到現實的距離,開啟品味軟體測試之路 - 台灣軟體工程協會 (20220813)
從理想、到現實的距離,開啟品味軟體測試之路 - 台灣軟體工程協會 (20220813)
 

More from Chun-Yu Tseng

驚呆了!這些 Python 題目刷掉 7 成面試者
驚呆了!這些 Python 題目刷掉 7 成面試者驚呆了!這些 Python 題目刷掉 7 成面試者
驚呆了!這些 Python 題目刷掉 7 成面試者Chun-Yu Tseng
 
5 minutes 介紹台南拍 (2022 ver.)
5 minutes 介紹台南拍 (2022 ver.)5 minutes 介紹台南拍 (2022 ver.)
5 minutes 介紹台南拍 (2022 ver.)Chun-Yu Tseng
 
Tenet: 2020 Taiwan PyCon Host We How
Tenet: 2020 Taiwan PyCon Host We HowTenet: 2020 Taiwan PyCon Host We How
Tenet: 2020 Taiwan PyCon Host We HowChun-Yu Tseng
 
Build and Host Real-world Machine Learning Services from Scratch @ pycontw2019
Build and Host Real-world Machine Learning Services from Scratch @ pycontw2019 Build and Host Real-world Machine Learning Services from Scratch @ pycontw2019
Build and Host Real-world Machine Learning Services from Scratch @ pycontw2019 Chun-Yu Tseng
 
from ai.backend import python @ pycontw2018
from ai.backend import python @ pycontw2018from ai.backend import python @ pycontw2018
from ai.backend import python @ pycontw2018Chun-Yu Tseng
 
Essential TDD @ pycontw2016
Essential TDD @ pycontw2016Essential TDD @ pycontw2016
Essential TDD @ pycontw2016Chun-Yu Tseng
 
從蟒蛇到神龍 - 從 1 接關繼續打造爬蟲程式
從蟒蛇到神龍 - 從 1 接關繼續打造爬蟲程式從蟒蛇到神龍 - 從 1 接關繼續打造爬蟲程式
從蟒蛇到神龍 - 從 1 接關繼續打造爬蟲程式Chun-Yu Tseng
 
Agile x API x Documentation @ NGO [[MOPCON2015]]
Agile x API x Documentation @ NGO [[MOPCON2015]]Agile x API x Documentation @ NGO [[MOPCON2015]]
Agile x API x Documentation @ NGO [[MOPCON2015]]Chun-Yu Tseng
 
快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015
快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015
快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015Chun-Yu Tseng
 
程式 x 設計 @ MOPCON 2014
程式 x 設計 @ MOPCON 2014程式 x 設計 @ MOPCON 2014
程式 x 設計 @ MOPCON 2014Chun-Yu Tseng
 
介紹 MOSUT @ 2014.09.26 自由軟體開發與社群發展
介紹 MOSUT @ 2014.09.26 自由軟體開發與社群發展介紹 MOSUT @ 2014.09.26 自由軟體開發與社群發展
介紹 MOSUT @ 2014.09.26 自由軟體開發與社群發展Chun-Yu Tseng
 
OO x Python @ Tainan.py x MOSUT x FP 2014.09.27
OO x Python  @ Tainan.py x MOSUT x FP 2014.09.27OO x Python  @ Tainan.py x MOSUT x FP 2014.09.27
OO x Python @ Tainan.py x MOSUT x FP 2014.09.27Chun-Yu Tseng
 
用路人小幫手 x 回報大改造 @ 2014 台南黑客松
用路人小幫手 x 回報大改造 @ 2014 台南黑客松用路人小幫手 x 回報大改造 @ 2014 台南黑客松
用路人小幫手 x 回報大改造 @ 2014 台南黑客松Chun-Yu Tseng
 
暖場 @ Tainan.py 2013.11.30
暖場 @ Tainan.py 2013.11.30 暖場 @ Tainan.py 2013.11.30
暖場 @ Tainan.py 2013.11.30 Chun-Yu Tseng
 
API 文件大亂鬥 @ MOPCON 2013
API 文件大亂鬥 @ MOPCON 2013API 文件大亂鬥 @ MOPCON 2013
API 文件大亂鬥 @ MOPCON 2013Chun-Yu Tseng
 
暖場與 Web 相關的小玩具 @ Tainan.py 2013.09.28
暖場與 Web 相關的小玩具 @ Tainan.py 2013.09.28暖場與 Web 相關的小玩具 @ Tainan.py 2013.09.28
暖場與 Web 相關的小玩具 @ Tainan.py 2013.09.28Chun-Yu Tseng
 

More from Chun-Yu Tseng (17)

驚呆了!這些 Python 題目刷掉 7 成面試者
驚呆了!這些 Python 題目刷掉 7 成面試者驚呆了!這些 Python 題目刷掉 7 成面試者
驚呆了!這些 Python 題目刷掉 7 成面試者
 
5 minutes 介紹台南拍 (2022 ver.)
5 minutes 介紹台南拍 (2022 ver.)5 minutes 介紹台南拍 (2022 ver.)
5 minutes 介紹台南拍 (2022 ver.)
 
Tenet: 2020 Taiwan PyCon Host We How
Tenet: 2020 Taiwan PyCon Host We HowTenet: 2020 Taiwan PyCon Host We How
Tenet: 2020 Taiwan PyCon Host We How
 
Build and Host Real-world Machine Learning Services from Scratch @ pycontw2019
Build and Host Real-world Machine Learning Services from Scratch @ pycontw2019 Build and Host Real-world Machine Learning Services from Scratch @ pycontw2019
Build and Host Real-world Machine Learning Services from Scratch @ pycontw2019
 
from ai.backend import python @ pycontw2018
from ai.backend import python @ pycontw2018from ai.backend import python @ pycontw2018
from ai.backend import python @ pycontw2018
 
導讀 Clean Code
導讀 Clean Code導讀 Clean Code
導讀 Clean Code
 
Essential TDD @ pycontw2016
Essential TDD @ pycontw2016Essential TDD @ pycontw2016
Essential TDD @ pycontw2016
 
從蟒蛇到神龍 - 從 1 接關繼續打造爬蟲程式
從蟒蛇到神龍 - 從 1 接關繼續打造爬蟲程式從蟒蛇到神龍 - 從 1 接關繼續打造爬蟲程式
從蟒蛇到神龍 - 從 1 接關繼續打造爬蟲程式
 
Agile x API x Documentation @ NGO [[MOPCON2015]]
Agile x API x Documentation @ NGO [[MOPCON2015]]Agile x API x Documentation @ NGO [[MOPCON2015]]
Agile x API x Documentation @ NGO [[MOPCON2015]]
 
快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015
快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015
快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015
 
程式 x 設計 @ MOPCON 2014
程式 x 設計 @ MOPCON 2014程式 x 設計 @ MOPCON 2014
程式 x 設計 @ MOPCON 2014
 
介紹 MOSUT @ 2014.09.26 自由軟體開發與社群發展
介紹 MOSUT @ 2014.09.26 自由軟體開發與社群發展介紹 MOSUT @ 2014.09.26 自由軟體開發與社群發展
介紹 MOSUT @ 2014.09.26 自由軟體開發與社群發展
 
OO x Python @ Tainan.py x MOSUT x FP 2014.09.27
OO x Python  @ Tainan.py x MOSUT x FP 2014.09.27OO x Python  @ Tainan.py x MOSUT x FP 2014.09.27
OO x Python @ Tainan.py x MOSUT x FP 2014.09.27
 
用路人小幫手 x 回報大改造 @ 2014 台南黑客松
用路人小幫手 x 回報大改造 @ 2014 台南黑客松用路人小幫手 x 回報大改造 @ 2014 台南黑客松
用路人小幫手 x 回報大改造 @ 2014 台南黑客松
 
暖場 @ Tainan.py 2013.11.30
暖場 @ Tainan.py 2013.11.30 暖場 @ Tainan.py 2013.11.30
暖場 @ Tainan.py 2013.11.30
 
API 文件大亂鬥 @ MOPCON 2013
API 文件大亂鬥 @ MOPCON 2013API 文件大亂鬥 @ MOPCON 2013
API 文件大亂鬥 @ MOPCON 2013
 
暖場與 Web 相關的小玩具 @ Tainan.py 2013.09.28
暖場與 Web 相關的小玩具 @ Tainan.py 2013.09.28暖場與 Web 相關的小玩具 @ Tainan.py 2013.09.28
暖場與 Web 相關的小玩具 @ Tainan.py 2013.09.28
 

Tip for Editors