2016年8月18日 星期四

Android 開發(119) cucumber


cucumber 什麼是cucumber ?  cucumber 是一種BDD的工具

使用它有什麼好處?   我們可以看到邏輯



看了上面的code我相信沒有人看得懂在寫什麼

但是看了下面的code我相信每個人都知道我想表達什麼


使用cucumber我們可以將上面的code 轉化成下面單純的幾個步驟,
當然裡面實作的code還是避不掉,但是我們可以將測項,轉化成幾個簡單的字
減低維護的成本,增加可讀性

那使用cucumber有什麼好處了



首先它提供了很醜的介面XD , 不過勉強可以看,

還有一個好處是他可以將截圖直接附在report中



不過目前有個很大的缺點就是,報告只會產生在device的sdcard 中,所以必須想辦法將它取出來


為了能夠順利的將資料取出,所以我設定了特定的位置,將報表放在sdcard的位置裡

接著寫了一個簡單gradle task,在test case 結束的時候將檔案拉到指定位置


利用這種方式,我們可以產生出比原本android studio內建更完整的報表(雖然畫面有點醜...)
有興趣的大家可以試試看,我覺得是蠻實用的,不過要花點時間研究就是了

有時間再將sample code分享給各位看看囉

[經驗分享] 如何避免搶資源?

先講實例:今天有多個任務需要執行,我們希望做個service能夠取得必須執行的任務



以上是架構圖,有多個client,當client有空的時候,就發送request 跟server 要資料,
這個架構看起來很美好,但是實際執行會發現,client常常會拿到同一個任務

why?

因為當多個client 同時執行時,DB的資料會在還沒被改動前就會被讀取數次,
那我們要怎麼避免這件事情發生?

ans: 讓DB只能被一個client存取

所以我修改了設計

可以注意到,原本單純server的地方被改成queue,也就是說所有的request 都會直接進queue,然後queue一次只允許一個client去取得任務,這樣的架構就可以避免同樣的任務被執行多次了

不過目前的架構也會造成許多client在排隊等queue執行完,不過目前這樣的架構已經可以符合我的需求,或許在未來會有其他更優化的架構吧~