發表文章

目前顯示的是有「automation」標籤的文章

Automation tests 6 — conclusion

圖片
我花了大概一年吧,在眾多不同語言不同平台的 automation solution 中,選了 cucumber 系列,然後,用OO 的概念,把整個架構架了起來。 其實就是這張圖: 因為我們有三個平台要弄,而這些平台的操作是很類似的,所以我希望能 reuse 越多越好。 如同圖中所示,Gherkins 語法可以完全共用、step_definition 可以部分共用、page_definition 可以完全共用,其他就必須依照各平台的 driver 與 framework 去實作各自的 page_objects 了。 然後,我們把下面的各個 page object 做好後,就可以使用一些 design pattern 去自動產生要測試的組合;甚至我們可以再去進行優化,讓 feature 檔是可以由程式產生的,讓 simulator 不要一直重開等等,但那就比較機密,不方便說了。 做了這麼久,其實我覺得自動化測試或許由 programmer 來寫會比較好,因為現在個平台都有各自平台的自己的自動化測試的解法與框架了,甚至,使用的語言會是跟 production code 一樣的,所以由 programmer 來寫,會又快又好。但是一般而言,通常 programmer 都在努力的衝刺 production code,不太有時間寫自動化測試,所以由 QA 人員來寫,好像是一種不得不的做法。 然後,在 page_definition 的那邊,好像不應該用 module 來實作,這邊我做得不好,讓整個程式看起來很沒有魯味 ( ruby 的味道 ),一看就知道是個 java 的人寫出來的... 0rz 但,自動化測試很好玩 :) 謝謝 Joseph, Jackson 跟 柴叔 教我自動化測試,我也的確把它用出來了。或許還有可以做得更好的地方,但我盡力了就是。 還有就是,我只是把這個架構的骨頭立起來,很多人幫我填了肉進去,在這邊也要謝謝 Jason, Tony, Peter, Regina, River,希望我們在各自的工作崗位上各自加油,都一定會有很不錯的發展的。 繼續加油!

Automation tests 5 — Code Architecture 之三

圖片
再承上,來講這張圖的最下面

Automation tests 5 — Code Architecture 之二

圖片
承上,繼續來講這張圖的中間:

Automation tests 5 — Code Architecture 之一

圖片
以下從上到下介紹:

Automation tests 4 — run

圖片
那要怎麼跑起來咧?

Automation tests 3 — installations

圖片
當然,先把東西裝一裝吧...

Automation tests 2 — Choose Framework

其實 automation tests 就是寫程式去測試程式,而目前做 automation tests 的框架有很多,搭配的語言也不一樣,比如說: cucumber cucumber-JVM SpecFlow Capybara Fit Fitness selendroid Robotium UIAutomation 最後我們選擇的是 cucumber 系列。他的好處是:泛用、無腦,乍看之下他不是程式。

Automation tests 1 — Why Automation

一開始,先用一點篇幅來聊聊,為什麼要做 automation tests。 一般導入自動化測試,無非有以下幾點原因: 把重複性的動作自動執行 把需要人工輸入的動作自動執行 以較低的成本做 regression tests 以較低的成本做壓力測試 但這樣就... 沒什麼了不起。

[AutomationTest] selenium + cucumber + ruby (5)

請先服用 第一集 、 第二集 、 第三集 第四集我寫錯了~~~~ XDD ========= 前情提要 ========= 基本上我們用前三集把一個簡單的 test case 寫出來,並且不斷的優化。到了第四集,使用物件導向的概念把 Page Object 拉出來,並把一致的操作放進去。外面的 Given-When-Then 就可以專心的寫業務目標,方便不懂程式與軟體的人與開發團隊溝通。 這集我們要來說一下小技巧。 ========= 技巧 ========= 1. 只跑一個 scenario 的方法 就是加 tag 在 scenario 前面加個 @tag_name 然後在 console 下 cucumber --tags @tag_name 就可以只跑那個 scenario 2. 只跑一個 feature 檔的方法 就是指定 feature 檔的路徑就好 console 的下法是 cucumber ./features/XXX.feature 就可以只跑那個 feature 檔 3. 參見 第二集 ,如何快速跑出那黃黃的那段,而不開真正的 browser。 就是在 console 下 cucumber --dry-run cucumber 會去比對 feature 檔裡面的東西是不是都有對應的 steps 去實作。 不管是 pre-defined steps 還是 我們自己寫的。 如果有沒對到的,黃黃的就會跑出來,你就可以拿去 copy-and-paste 了。 4. 使用不同的 browser 跑測試 在 console 裡面下: 要用 chrome 的話:cucumber BROWER=chrome 要用 firefox 的話:cucumber BROWER=ff 然後會遇到一點點錯誤,不要慌,基本上照著 cucumber 的錯誤訊息,去某個地方下載某個檔案,放進路徑變數裡,就可以了,這我很久以前做過一次,現在忘了...也無法 reproduce 了。 ========= Retrospective ========= 其實這篇沒什麼好 retro 的,就只是一些指令的下法而已,連圖都沒有貼,cucumber —help 都有寫。 好啦,這大概就是我對 web automation 的所有知識了,剩下就是不斷的練習去熟悉他了。有問題或任何建議也請在下面留...

[AutomationTest] selenium + cucumber + ruby (4)

圖片
請先服用 第一集 、 第二集 與 第三集 。 ========= 前情提要 ========= 在前三集中,我們寫了一個簡短的中文的 test case。 因為是中文的,所以方便溝通。 在實作部分,使用了 ruby 跟 selenium-cucumber 。 ========= 大師提點 ========= 假如有看我的臉書的,就會發現有大師來留言了: 如果是自动化测试,那么Gherkin中通常较少出现操作页面的细节,更多的是这个业务的描述。点击之类的操作通常在是step中,或者更好一点放入page object。最后,关闭浏览器用cucumber的after hook,确保每个scenario执行完后,不管结果如何都会关闭浏览器 留言的大師是Jackson Zhang,是 odd-e 上海的顧問群之一,非常厲害,是技術牛人啊! 也剛好我這篇原本想講的就是 Page 的寫法,所以就合在一起來做看看~~ 1. 业务的描述 Gherkin 就是 Given-When-Then 那些,所以我們來放業務的描述,讓他更平易近人一點。 但因為這個 scenario 實在太簡單,我只好硬著頭皮寫了 ... 程式碼在這裡: Feature: 用yahoo查到台積電的股價 Scenario: 從首頁進去 然後去查詢台積電股價 Given 從yahoo首頁進到yahoo的股市首頁 When 查詢台積電 Then 我會看到台積電的股價在 "50" 到 "500" 之間 為什麼是 50 ~ 500? 因為假設 PO 說台積電的股價超過了這個範圍就一定有問題,一定是我們系統有錯。 (假設的麻) 2. 执行完后 关闭浏览器 這個很簡單,在 support/hooks.rb 裡面,加一行 $driver.quit 即可。 3. 操作通常在是step中,或者放入page object 3-1 $driver 哪來的 有這個錢字號啊,在 ruby 裡面,就是 global 變數,他是在 support/env.rb 裡面被 assign 的。 有興趣的可以去深究,這邊我就先不追了。 3-2 拉出一個 StockPage 的類別 因為這只是個很簡單的範例,所...

[AutomationTest] selenium + cucumber + ruby (3)

圖片
請先服用 第一集 、 第二集 。 ========= 前情提要 ========= 我們用中文寫了一個可以自動執行的 test case,這樣的 test case 讓不懂程式的人有一個共同的平台與溝通方式可以溝通,然後我們就寫了 ruby 的程式來執行測試。 這一篇,我們要來仔細看看那個 ruby 程式。 ========= 手把手教學? ========= 1. 開啟yahoo首頁 這邊就是在第 8 行加入 navigate_to 的敘述,那我是怎麼知道要加這個呢? 就是去 這個連結 然後看到第一行,就覺得用用看,就中了。 2. 到 "股市" 首頁去 也是一樣,click 一個 link 以後,等待 3 秒。 其實這邊有一個 predefined step,在 這個連結 的第 21 ~ 23 行: 所以我就把它的 click 的部分拿出來用了。 後面那個 arg1 是一個參數,這裡是 ruby 的標準寫法,我就跳過不介紹了。 3. When 輸入 "台積電" 在輸入框裡面 這邊的寫法應該有很多種,你也可以像前面一樣,去找 predefined steps的實作方法,然後填入。我的寫法是,用 xpath 找到一個網頁上的 element,然後用 send_keys 這個 api,把字串傳過去,然後傳一個 enter 過去。 那這些資料是哪裡找到的呢? find_element 在 這裡 。 找到的 element 在 這裡 ,你也會在這裡找到這個 class 的 send_keys 方法 那傳一個 enter 出去呢?在 這裡 你可以找到。 4. 我會看到 "2330台積電" 的股價在 "50" 到 "500" 之間 首先,這邊會有三個字串參數傳進來:"2330台積電”、”50"與"500" 。 我分別叫他是 tsmc, low, high,來看看 code: line 23:check_element_presence 這個 method ,我也是先去找 predefined steps,然後去找他的實作,最後在 這裡 找到,在第 39 ~ 42 行,這些參數需要摸索一下XDDD。 line 25 ~ 最後面:幹,我摸索超久...

[AutomationTest] selenium + cucumber + ruby (2)

圖片
請先服用 第一集 ========= 前情提要 ========= 在上一集裡面我用了應該是全球最短的篇幅就把 安裝 跟 執行 selenium, cucumber 講完了這一篇要開始把鹹豬手伸過去 ruby 那邊 ========= 中文版 test case ========= 1. 改成中文版 這是在第一集出現的程式碼: Feature: 用yahoo查到查台積電的股價 Scenario: 從首頁進去 然後去查詢台積電股價 Given I navigate to "https://tw.yahoo.com" When I click on link having text "股市" When I enter "台積電" into input field having xpath ".//*[@id='stock_id']" When I click on element having xpath ".//*[@id='ystkglonav']/table/tbody/tr[3]/td/table/tbody/tr/td[4]/label/input" Then link having text "2330台積電" should be present 我把它改成: Feature: 用yahoo查到查台積電的股價 Scenario: 從首頁進去 然後去查詢台積電股價 Given 開啟yahoo首頁 When 到 "股市" 首頁去 When 輸入 "台積電" 在輸入框裡面 Then 我會看到 "2330台積電" 的股價在 "50" 到 "500" 之間 Then I close browser 是不是平易近人許多? 2. 執行看看,然後哭哭在 console 裡面,打cucumber,結果出現一堆黃字: 3. 解決黃字的方法 囧 4. Copy-and-Paste 大法 先用你的 IDE or editor 開啟 feature/step_definition...

[AutomationTest] selenium + cucumber + ruby (1)

圖片
這一篇來講講怎麼用 selenium + cucumber 來幫 tw.yahoo.com 來做測試 ========= 安裝 ========= 我是用 mac 所以 我很快的帶過安裝的部分 gem install rails gem install cucumber-rails gem install selenium-cucumber gem install selenium-webdriver gem install Selenium gem install selenium-client 假如不知道 gem 是什麼的朋友 請先去 google 一下 然後 我還裝了 firefox 跟他的兩個 plugin: firebug, firepath ========= 準備工作 ========= 1. 開 console,找個資料夾,cd過去 2. 鍵入 selenium-cucumber gen 他會問你 我要做!@#@!#$!@#$!@#$ 事情囉 你確定嗎? 就按下 enter 吧 然後 你會發現多了一個 feature 的 folder 3. cd 進去 feature folder 找一個副檔名是 .feature 的檔 通常是 my_first.feature 用你喜歡的 IDE 或 editor 打開它 我是用 eclipse 你假如發現了 有其他兩個 project 是 android_auto, iOS_auto 沒錯 大概就是他的名字暗示的 以後我再寫怎麼在 android 與 iOS 上 做自動化測試吧~ 4. cucumber 簡單的介紹 cucumber 系列的東西就是由這三個主要的詞組成:Given, When, Then 怎麼用呢? 大概可以先這樣理解: Given 後面寫的是前條件 When 是操作 Then 是預期結果 至於 Feature 跟 scenario 是給人類看的 不影響程式與執行結果 5. 開始想測試 一開始說 我要幫tw.yahoo.com做測試 因為這是第一篇 所以先簡單的: 我想測試能用yahoo查到查台積電的股價的功能 測試場景是 從首頁進去 然後去查詢台積電股價 所以我要打開首頁 按下股市 輸入台積電 螢幕上就會出現2330台積電 6. 把剛剛想的東西翻譯成 given-when-then 以下是程式...