快快樂樂成為 coding ninja (by pytest) @ pyconapac2015
TRANSCRIPT
![Page 1: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015](https://reader037.vdocuments.net/reader037/viewer/2022102514/55b78fd6bb61eb05278b45ef/html5/thumbnails/1.jpg)
快快樂樂成為 Coding Ninja (by pytest)
Chun-Yu Tseng
![Page 2: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015](https://reader037.vdocuments.net/reader037/viewer/2022102514/55b78fd6bb61eb05278b45ef/html5/thumbnails/2.jpg)
快快樂樂成為 Coding Ninja (by pytest)
Joe a.k.a. 魯蛇喬
![Page 3: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015](https://reader037.vdocuments.net/reader037/viewer/2022102514/55b78fd6bb61eb05278b45ef/html5/thumbnails/3.jpg)
First year
寫 API ..
寫出更多 API ..
寫出更多 API .. 以及 bugs
半年後開始撰寫測試(沒有用 testing tool )
![Page 4: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015](https://reader037.vdocuments.net/reader037/viewer/2022102514/55b78fd6bb61eb05278b45ef/html5/thumbnails/4.jpg)
Second year
寫 Web (few tests)
寫 API (try ATDD)
已經開始用 pytest (level 0)
![Page 5: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015](https://reader037.vdocuments.net/reader037/viewer/2022102514/55b78fd6bb61eb05278b45ef/html5/thumbnails/5.jpg)
Third year
我放假半年 XD
寫寫 API 賺零用錢、辦 Tainan.py 聚會、吃雞排看 TDD 大戰、看看 Agile 、設計心理學、被 Haskell 電爆 … 認真學習 pytest 怎麼用
![Page 6: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015](https://reader037.vdocuments.net/reader037/viewer/2022102514/55b78fd6bb61eb05278b45ef/html5/thumbnails/6.jpg)
Fourth year -
加入一個傳說中有很多 python code 的非營利組織
結果其實天殺的 js 更多
寫一點 e2e tests 徵人
![Page 7: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015](https://reader037.vdocuments.net/reader037/viewer/2022102514/55b78fd6bb61eb05278b45ef/html5/thumbnails/7.jpg)
測試二三事的小心得
專業測試很難
開發者仍需有基本的測試思維
學習基本概念的門檻略高(都是 xUnit Style )
![Page 8: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015](https://reader037.vdocuments.net/reader037/viewer/2022102514/55b78fd6bb61eb05278b45ef/html5/thumbnails/8.jpg)
據說今天的演講目的
讓新手快快樂樂上手 pytest 及接觸測試思維
讓進階者 …
呃 … 天涼就加件外套吧!
![Page 9: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015](https://reader037.vdocuments.net/reader037/viewer/2022102514/55b78fd6bb61eb05278b45ef/html5/thumbnails/9.jpg)
大綱(如果時間夠的話?)
為什麼你不寫測試?
pytest 是啥?
快快樂樂上手貼司挺
邁向 Coding Ninja 之路!
![Page 10: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015](https://reader037.vdocuments.net/reader037/viewer/2022102514/55b78fd6bb61eb05278b45ef/html5/thumbnails/10.jpg)
大綱(如果時間夠的話?)
為什麼你不寫測試?
pytest 是啥?
快快樂樂上手貼司挺
邁向 Coding Ninja 之路!
![Page 11: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015](https://reader037.vdocuments.net/reader037/viewer/2022102514/55b78fd6bb61eb05278b45ef/html5/thumbnails/11.jpg)
幹嘛要測試軟體?
![Page 12: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015](https://reader037.vdocuments.net/reader037/viewer/2022102514/55b78fd6bb61eb05278b45ef/html5/thumbnails/12.jpg)
![Page 13: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015](https://reader037.vdocuments.net/reader037/viewer/2022102514/55b78fd6bb61eb05278b45ef/html5/thumbnails/13.jpg)
你選擇用哪種方式來測試?
![Page 14: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015](https://reader037.vdocuments.net/reader037/viewer/2022102514/55b78fd6bb61eb05278b45ef/html5/thumbnails/14.jpg)
用人來測:
自己來
讓同事測(交情大考驗)
讓老闆 /PM 測(薪水大考驗)
讓使用者測(人品大考驗之時間不夠的密技)
![Page 15: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015](https://reader037.vdocuments.net/reader037/viewer/2022102514/55b78fd6bb61eb05278b45ef/html5/thumbnails/15.jpg)
用機器來測:
在開發環境跑 unit testing
在 CI server 跑 integration/functional testing
![Page 16: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015](https://reader037.vdocuments.net/reader037/viewer/2022102514/55b78fd6bb61eb05278b45ef/html5/thumbnails/16.jpg)
為什麼你不寫測試?
![Page 17: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015](https://reader037.vdocuments.net/reader037/viewer/2022102514/55b78fd6bb61eb05278b45ef/html5/thumbnails/17.jpg)
不讓機器幫忙測試的理由
理由一:不需要測
理由二:不好測
理由三:不會寫
理由四:懶得寫
![Page 18: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015](https://reader037.vdocuments.net/reader037/viewer/2022102514/55b78fd6bb61eb05278b45ef/html5/thumbnails/18.jpg)
不讓機器幫忙測試的理由排行榜
理由一:不需要測
理由二:不好測
理由三:不會寫
理由四:懶得寫
立馬來解決這兩個問題!
![Page 19: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015](https://reader037.vdocuments.net/reader037/viewer/2022102514/55b78fd6bb61eb05278b45ef/html5/thumbnails/19.jpg)
Live Demo: 解決不會寫!
![Page 20: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015](https://reader037.vdocuments.net/reader037/viewer/2022102514/55b78fd6bb61eb05278b45ef/html5/thumbnails/20.jpg)
寫得有點 … 隨性 ?
這是很實際的測試方式
但是不實用 …
所以我們會使用 testing framework 來協助我們測試(撰寫上要遵守特定的規則)
![Page 21: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015](https://reader037.vdocuments.net/reader037/viewer/2022102514/55b78fd6bb61eb05278b45ef/html5/thumbnails/21.jpg)
Live Demo: 解決太隨性的問題?
![Page 22: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015](https://reader037.vdocuments.net/reader037/viewer/2022102514/55b78fd6bb61eb05278b45ef/html5/thumbnails/22.jpg)
從此以後可以開心的寫測試?
![Page 23: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015](https://reader037.vdocuments.net/reader037/viewer/2022102514/55b78fd6bb61eb05278b45ef/html5/thumbnails/23.jpg)
從此以後可以開心的寫測試?才怪
![Page 24: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015](https://reader037.vdocuments.net/reader037/viewer/2022102514/55b78fd6bb61eb05278b45ef/html5/thumbnails/24.jpg)
完全讓人懶得寫測試啊啊啊
要寫好多 Code
莫名的 assertEqual API …
滿滿的 Old xUnit Style …
setUp / tearDown
![Page 25: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015](https://reader037.vdocuments.net/reader037/viewer/2022102514/55b78fd6bb61eb05278b45ef/html5/thumbnails/25.jpg)
Ref: 去年在 Taipei.py 的分享
![Page 26: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015](https://reader037.vdocuments.net/reader037/viewer/2022102514/55b78fd6bb61eb05278b45ef/html5/thumbnails/26.jpg)
讓我們來解決懶得寫的問題!
![Page 27: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015](https://reader037.vdocuments.net/reader037/viewer/2022102514/55b78fd6bb61eb05278b45ef/html5/thumbnails/27.jpg)
大綱(如果時間夠的話?)
為什麼你不寫測試?
pytest 是啥?
快快樂樂上手貼司挺
邁向 Coding Ninja 之路!
![Page 28: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015](https://reader037.vdocuments.net/reader037/viewer/2022102514/55b78fd6bb61eb05278b45ef/html5/thumbnails/28.jpg)
pytest
另一個 testing framework
採用更加 Pythonic 的方式來協助測試
並且向下支援 xUnit Style 的測試程式碼
玩玩看就知道了!
![Page 29: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015](https://reader037.vdocuments.net/reader037/viewer/2022102514/55b78fd6bb61eb05278b45ef/html5/thumbnails/29.jpg)
Live Demo: 解決懶得寫的問題
![Page 30: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015](https://reader037.vdocuments.net/reader037/viewer/2022102514/55b78fd6bb61eb05278b45ef/html5/thumbnails/30.jpg)
發現了嗎? pytest …
No-boilerplate testing ( 不用再繼承 … )
Assert 打天下
偏好用扁平化的方式組織測試程式碼
![Page 31: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015](https://reader037.vdocuments.net/reader037/viewer/2022102514/55b78fd6bb61eb05278b45ef/html5/thumbnails/31.jpg)
Live Demo: fixture system
推
![Page 32: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015](https://reader037.vdocuments.net/reader037/viewer/2022102514/55b78fd6bb61eb05278b45ef/html5/thumbnails/32.jpg)
pytest 的 fixture 超好用!
可以用 yield 的方式製造出 fixture
再也不用擔心 db.close(), f.close() 的問題
可以自訂 fixture 的生存 scope
function/class/file/module/session
支援用 fixture 生成 fixture
![Page 33: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015](https://reader037.vdocuments.net/reader037/viewer/2022102514/55b78fd6bb61eb05278b45ef/html5/thumbnails/33.jpg)
pytest 的其他功能
Test discovery
Mark system ( 分群組、 skipif …)
Parametrized test functions
Plugins趕快到 官網 瞧瞧!
![Page 34: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015](https://reader037.vdocuments.net/reader037/viewer/2022102514/55b78fd6bb61eb05278b45ef/html5/thumbnails/34.jpg)
大綱(如果時間夠的話?)
為什麼你不寫測試?
pytest 是啥?
快快樂樂上手貼司挺
邁向 Coding Ninja 之路!
![Page 35: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015](https://reader037.vdocuments.net/reader037/viewer/2022102514/55b78fd6bb61eb05278b45ef/html5/thumbnails/35.jpg)
寫個 unit test 先
![Page 36: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015](https://reader037.vdocuments.net/reader037/viewer/2022102514/55b78fd6bb61eb05278b45ef/html5/thumbnails/36.jpg)
再寫個 integration test
![Page 37: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015](https://reader037.vdocuments.net/reader037/viewer/2022102514/55b78fd6bb61eb05278b45ef/html5/thumbnails/37.jpg)
KO 掉 functional test
![Page 38: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015](https://reader037.vdocuments.net/reader037/viewer/2022102514/55b78fd6bb61eb05278b45ef/html5/thumbnails/38.jpg)
大綱(如果時間夠的話?)
為什麼你不寫測試?
pytest 是啥?
快快樂樂上手貼司挺
邁向 Coding Ninja 之路!
![Page 39: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015](https://reader037.vdocuments.net/reader037/viewer/2022102514/55b78fd6bb61eb05278b45ef/html5/thumbnails/39.jpg)
快速回顧
告訴你測試的好處
解決不會寫、懶得寫的問題
簡介 pytest
寫了三種類型的入門測試
![Page 40: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015](https://reader037.vdocuments.net/reader037/viewer/2022102514/55b78fd6bb61eb05278b45ef/html5/thumbnails/40.jpg)
Coding Ninja 至少還需要 …
更加熟悉 testing tool (pytest/nose/unittest ..)
更深入地探討三種測試
了解 (OO) Design 相關的原則與 patterns
嘗試看看 TDD/*DD
![Page 41: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015](https://reader037.vdocuments.net/reader037/viewer/2022102514/55b78fd6bb61eb05278b45ef/html5/thumbnails/41.jpg)
標題是 Coding Ninja 非 Testing Ninja
最終目的仍然是「開發」
不要過度測試
自己去判斷該不該測
![Page 42: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015](https://reader037.vdocuments.net/reader037/viewer/2022102514/55b78fd6bb61eb05278b45ef/html5/thumbnails/42.jpg)
加快 feedback loop 與保持 confidence 是秘訣
成為 Coding Ninja 的不二法門
Done
![Page 44: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015](https://reader037.vdocuments.net/reader037/viewer/2022102514/55b78fd6bb61eb05278b45ef/html5/thumbnails/44.jpg)
工商服務(下)Tainan.py 六月份聚會暫定於 6/27 於台南舉辦
https://www.facebook.com/groups/mosut
![Page 45: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015](https://reader037.vdocuments.net/reader037/viewer/2022102514/55b78fd6bb61eb05278b45ef/html5/thumbnails/45.jpg)
assert QA.time == False
Thank You