Learn Python in 30 min - 4cmj
1
‧ 有以下考量,設計出一個堪用的程式
‧ 可閱讀性
‧ 彈性 / 可擴充性
‧ 執行效率 / 開發效率
4
‧ 設計一個可以執行的 binary:SimpleTest
‧ 支援設定檔
‧ 控制測試
‧ 記錄結果
6
‧ 設計一個可以執行的 binary:SimpleTest
‧ 支援設定檔 控制測試參數
‧ 控制測試
‧ 記錄結果
7
‧ 設計一個可以執行的 binary:SimpleTest
‧ 支援設定檔
‧ 控制測試 決定執行哪些測試
‧ 記錄結果
8
‧ 設計一個可以執行的 binary:SimpleTest
‧ 支援設定檔
‧ 控制測試
‧ 記錄結果 儲存結果
9
‧ Functional SPEC 已經有大架構了:三個大功能
‧ 開發流程?
‧ Top-Down
‧ Bottom-Up
10
‧ Day 0
‧ 建議先寫開始的進入點 (執行的 binary)
‧ 設計所有可能的功能
‧ 確定這是你要的
12
‧ SimpleTest -h
‧ 顯示所有操作
‧ 這也暗示你:我只會做這些事情
‧ 處理 User Input 是很累人的
13
還好我們有 argparse
14
‧ 接下來,讀取設定檔
‧ 格式有很多種:config / JSON / XML / YAML
‧ 挑自己喜歡的,反正 Python 都有支援
‧ 這也是說 Python 不支援的不要挑 >.^
20
‧ 要控制測試項目:你就要決定怎樣控制
‧ For 迴圈不錯? (也就是用 List)
‧ 但是測試都有名稱啊。。。
‧ 想要名稱當 Key 又想要存一堆東西?
23
‧ 要控制測試項目:你就要決定怎樣控制
‧ For 迴圈不錯? (也就是用 List)
‧ 但是測試都有名稱啊。。。
‧ 想要名稱當 Key 又想要存一堆東西? Dict
24
‧ 所以需要有一個物件 (至少是 Dict)
‧ 紀錄目前所有的測試
‧ 當 SimpleTest 執行的時候,選擇執行
‧ 但是我很想自動,不想手動加測試項目
25
‧ 使用 from testcases import *
‧ 這樣就可以撈所有 testcases 下的 物件
‧ 同理,也可以 from testcases import Test
‧ dir(Test) 列出所有能力
‧ Package 資料夾下一定要有 __init__.py
‧ 裡面 import 所需要的測試 case
27
‧ 這樣只要寫拼命寫 Test Case
‧ 用 Load Package 的方式拿到所有測試 case
‧ 接下來又改寫原本的 SimpleTest
29
‧ 要記錄檔案:你不會想要頻繁的開關
‧ 所以要把 fd 往下傳
‧ 所有測試使用同一個 fd 來記錄結果
‧ 測試結束在關檔
34
‧ 我們做出這麼多元件,要一起跑才是所需要
‧ 那如何
‧ 組合元件?
‧ 互動?
36
‧ 執行流程為何?
‧ User 決定執行指令 (設定檔 / 測試項目)
‧ 確定設定檔、測試項目是否有效
‧ 開啟 (記錄) 檔案,傳遞測試項目
‧ 測試每個指定的項目
37
‧ 執行流程為何?
‧ User 決定執行指令 (設定檔 / 測試項目)
‧ 確定設定檔、測試項目是否有效
‧ 開啟 (記錄) 檔案,傳遞測試項目
‧ 測試每個指定的項目
38
‧ 執行流程為何?
‧ User 決定執行指令 (設定檔 / 測試項目)
‧ 確定設定檔、測試項目是否有效
‧ 開啟 (記錄) 檔案,傳遞測試項目
‧ 測試每個指定的項目
39
‧ 執行流程為何?
‧ User 決定執行指令 (設定檔 / 測試項目)
‧ 確定設定檔、測試項目是否有效
‧ 開啟 (記錄) 檔案,傳遞測試項目
‧ 測試每個指定的項目
40
開檔 / 縮排 / 傳入 fd
41
‧ 先假設
‧ 你已經寫好 client ro 檔案
‧ 提供一個能力:檢查檔案路徑是否存在
‧ 名稱是:fileExist()
47
‧ Ref
‧ https://docs.python.org/2/library/optparse.html
‧ http://pyyaml.org/wiki/PyYAMLDocumentation
51
Thanks for your attention
52