快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015

45
快快快快快快 Coding Ninja (by pytest) Chun-Yu Tseng

Transcript of 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015

Page 1: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015

快快樂樂成為 Coding Ninja (by pytest)

Chun-Yu Tseng

Page 2: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015

快快樂樂成為 Coding Ninja (by pytest)

Joe a.k.a. 魯蛇喬

Page 3: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015

First year

寫 API ..

寫出更多 API ..

寫出更多 API .. 以及 bugs

半年後開始撰寫測試(沒有用 testing tool )

Page 4: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015

Second year

寫 Web (few tests)

寫 API (try ATDD)

已經開始用 pytest (level 0)

Page 5: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015

Third year

我放假半年 XD

寫寫 API 賺零用錢、辦 Tainan.py 聚會、吃雞排看 TDD 大戰、看看 Agile 、設計心理學、被 Haskell 電爆 … 認真學習 pytest 怎麼用

Page 6: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015

Fourth year -

加入一個傳說中有很多 python code 的非營利組織

結果其實天殺的 js 更多

寫一點 e2e tests 徵人

Page 7: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015

測試二三事的小心得

專業測試很難

開發者仍需有基本的測試思維

學習基本概念的門檻略高(都是 xUnit Style )

Page 8: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015

據說今天的演講目的

讓新手快快樂樂上手 pytest 及接觸測試思維

讓進階者 …

呃 … 天涼就加件外套吧!

Page 9: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015

大綱(如果時間夠的話?)

為什麼你不寫測試?

pytest 是啥?

快快樂樂上手貼司挺

邁向 Coding Ninja 之路!

Page 10: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015

大綱(如果時間夠的話?)

為什麼你不寫測試?

pytest 是啥?

快快樂樂上手貼司挺

邁向 Coding Ninja 之路!

Page 11: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015

幹嘛要測試軟體?

Page 12: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015
Page 13: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015

你選擇用哪種方式來測試?

Page 14: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015

用人來測:

自己來

讓同事測(交情大考驗)

讓老闆 /PM 測(薪水大考驗)

讓使用者測(人品大考驗之時間不夠的密技)

Page 15: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015

用機器來測:

在開發環境跑 unit testing

在 CI server 跑 integration/functional testing

Page 16: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015

為什麼你不寫測試?

Page 17: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015

不讓機器幫忙測試的理由

理由一:不需要測

理由二:不好測

理由三:不會寫

理由四:懶得寫

Page 18: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015

不讓機器幫忙測試的理由排行榜

理由一:不需要測

理由二:不好測

理由三:不會寫

理由四:懶得寫

立馬來解決這兩個問題!

Page 19: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015

Live Demo: 解決不會寫!

Page 20: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015

寫得有點 … 隨性 ?

這是很實際的測試方式

但是不實用 …

所以我們會使用 testing framework 來協助我們測試(撰寫上要遵守特定的規則)

Page 21: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015

Live Demo: 解決太隨性的問題?

Page 22: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015

從此以後可以開心的寫測試?

Page 23: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015

從此以後可以開心的寫測試?才怪

Page 24: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015

完全讓人懶得寫測試啊啊啊

要寫好多 Code

莫名的 assertEqual API …

滿滿的 Old xUnit Style …

setUp / tearDown

Page 25: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015

Ref: 去年在 Taipei.py 的分享

Page 26: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015

讓我們來解決懶得寫的問題!

Page 27: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015

大綱(如果時間夠的話?)

為什麼你不寫測試?

pytest 是啥?

快快樂樂上手貼司挺

邁向 Coding Ninja 之路!

Page 28: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015

pytest

另一個 testing framework

採用更加 Pythonic 的方式來協助測試

並且向下支援 xUnit Style 的測試程式碼

玩玩看就知道了!

Page 29: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015

Live Demo: 解決懶得寫的問題

Page 30: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015

發現了嗎? pytest …

No-boilerplate testing ( 不用再繼承 … )

Assert 打天下

偏好用扁平化的方式組織測試程式碼

Page 31: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015

Live Demo: fixture system

Page 32: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015

pytest 的 fixture 超好用!

可以用 yield 的方式製造出 fixture

再也不用擔心 db.close(), f.close() 的問題

可以自訂 fixture 的生存 scope

function/class/file/module/session

支援用 fixture 生成 fixture

Page 33: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015

pytest 的其他功能

Test discovery

Mark system ( 分群組、 skipif …)

Parametrized test functions

Plugins趕快到 官網 瞧瞧!

Page 34: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015

大綱(如果時間夠的話?)

為什麼你不寫測試?

pytest 是啥?

快快樂樂上手貼司挺

邁向 Coding Ninja 之路!

Page 35: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015

寫個 unit test 先

Page 36: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015

再寫個 integration test

Page 37: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015

KO 掉 functional test

Page 38: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015

大綱(如果時間夠的話?)

為什麼你不寫測試?

pytest 是啥?

快快樂樂上手貼司挺

邁向 Coding Ninja 之路!

Page 39: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015

快速回顧

告訴你測試的好處

解決不會寫、懶得寫的問題

簡介 pytest

寫了三種類型的入門測試

Page 40: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015

Coding Ninja 至少還需要 …

更加熟悉 testing tool (pytest/nose/unittest ..)

更深入地探討三種測試

了解 (OO) Design 相關的原則與 patterns

嘗試看看 TDD/*DD

Page 41: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015

標題是 Coding Ninja 非 Testing Ninja

最終目的仍然是「開發」

不要過度測試

自己去判斷該不該測

Page 42: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015

加快 feedback loop 與保持 confidence 是秘訣

成為 Coding Ninja 的不二法門

Done

Page 43: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015

工商服務(上)均一教育平台招募:實習生、正職員工

http://junyiacademyhr.weebly.com/

Page 44: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015

工商服務(下)Tainan.py 六月份聚會暫定於 6/27 於台南舉辦

https://www.facebook.com/groups/mosut

Page 45: 快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015

assert QA.time == False

Thank You