Woody in house mobile farm เมื่อไม่มีถูกใจ ก็สร้างมันขึ้นมาซะเลย

Doppio_Toasty-EDlT0R

Other

March 24, 2026

Table of Content

เรื่องมันมีอยู่ว่า ผมจำได้ดีเลยวันนั้นเป็นวันหนึ่งในฤดูหนาว ที่อากาศหนาวกว่าทุกๆวัน……ไม่ใช่ละ…นิยายผีญี่ปุ่นปะนิ….เอาใหม่….จริงๆสิ่งที่อยากจะเอามาเล่าในวันนี้เป็นสิ่งที่ใช้ใน Doppio มาประมาณสักปีนึงแล้วแหละ แต่ไม่มีเวลาได้มาเขียนมาแชร์ ช่วงนี้พอมีเวลา เลยอยากเอามาแชร์ให้เพื่อนๆได้อ่านกัน เรื่องมีอยู่ว่า ตอนที่ Doppio ตั้งบริษัทขึ้นมาแรกๆ แล้วเริ่มมีงาน automation ของ Mobile application เข้ามา ด้วย Concept ว่า Automation ที่ทำไปต้องใช้งานได้จริง มี reliability และ stability ที่ดี เราจึงต้องมีการ setup CI ขึ้นมาเพื่อ keep running test เพื่อจุดประสงค์

  1. ทำให้แน่ใจว่า script ที่เรา develop ยังใช้งานได้อยู่ และมีความ stable
  2. เราสามารถนำผลการรันรอบล่าสุดไปใช้ได้เลยหากมีการต้องทำ regression test ในวันนั้น (โดยต้องมีการ cross check timeline/version การdeploy กับ Developer อีกครั้งก่อนนำไปใช้)

และเนื่องด้วยพอเป็น mobile application automation ซึ่งเราใช้ Appium เป็น framework หลัก เราเลยจำเป็นที่จะต้องมีเครื่องที่รัน Emulator หรือ Simulator ของ iOS / Android ไว้ทำการรัน ในยุคแรกเราก็ใช้วิธีแบบลูกทุ่งๆ คือ ซื้อ mac mini มาวางไว้สำหรับแต่ละโปรเจคที่ต้องทำ CI เพราะงั้นในยุคแรกๆ ไม่แปลกที่เราจะมี conversation ว่า เฮ้ยๆ ลูกค้า A นี่ใช้ Mac mini เบอร์ไรนะ เพราะว่า Mac mini ที่เราซื้อมาจะถูก allocate ให้โปรเจคแต่ละโปรเจคของใครของมัน

ลักษณะการใช้งาน Mac mini ในยุคแรกของ Doppio

เวลาก็ผ่านไปอย่างรวดเร็ว ลูกค้าของบริษัทก็เยอะขึ้นเรื่อยๆ จนเราเริ่มมี Mac mini เยอะขึ้นๆ และเราก็เริ่มมีคำถามกับตัวเองว่า เราต้องมี Mac mini เยอะขนาดนี้เลยเหรอวะ นี่เราใกล้จะเปิด Apple store ได้แล้วนะ เราก็เลยมานั่งดูกันอย่างจริงจังๆว่า Mac mini 1 เครื่องของเรา จริงๆ แล้วในแต่ละวัน เราใช้งานมันมากน้อยแค่ไหน แล้วเราก็พบว่า จริงๆ Mac mini แต่ละเครื่องของเรา เราใช้งานมันไม่ได้ตลอด 24 ชั่วโมง บางเครื่องอาจจะใช้อยู่ 4 ชั่วโมง บางเครื่องใช้อยู่ 8 ชั่วโมง ขึ้นกับว่าโปรเจคที่ใช้งาน Mac mini พวกนั้นอยู่ มันรันเทสนานแค่ไหน และรันเทสถี่แค่ไหน (ในทางเทคนิค เราจะเรียกสิ่งนี้ว่า utilization rate ซึ่งถ้าเจ้า rate นี้ใกล้ 100% แค่ไหน ก็แปลว่าเราใช้เครื่องคุ้มแบบสุดๆ เต็มเม็ดเต็มหน่วย) ทีนี้เราก็เลยนั่งคิดต่อว่า ทำยังไงที่จะใช้ Mac mini ที่มีอยู่ให้คุ้มค่าที่สุด และซื้อเครื่องเพิ่มเมื่อมันจำเป็นจริงๆ เท่านั้น โดยปัญหาที่เราต้องแก้ก็คือ ในช่วงเวลาใดเวลาหนึ่ง ทำยังไงให้โปรเจค X มันรู้ว่าเครื่อง Mac เครื่องนี้มันมีโปรเจค Y ใช้อยู่ และไม่ไปแย่งเครื่องกันใช้จนทำให้ resource ของเครื่อง Mac นั้นมันไม่พอ คิดไปคิดมา มันก็เลยเกิดไอเดียว่า มันต้องมีคนกลางคนนึงเป็นคนคอยคุมการใช้เครื่องเหล่านี้ โดยเราคิดโมเดลคล้ายๆกับโมเดลการยืมหนังสือของห้องสมุด แล้วจำลองว่า Emulator / Simulator แต่ละเครื่องที่รันอยู่ใน Mac mini นั้น ก็เปรียบเหมือนกับหนังสือ ถ้าใครอยากจะหยิบไปใช้งาน ก็จะต้องมาแจ้งการยืม กับ บรรณารักษ์ห้องสมุดในตอนที่ยืม และ ในตอนที่คืนหนังสือ ก็ต้องมาคืนกับบรรณารักษ์ห้องสมุดเช่นกัน ห้ามมีใครคนใดคนนึงเดินไปหยิบหนังสือจากชั้นหนังสือได้ด้วยตัวเอง เราเรียกสิ่งนี้ว่า Farm manager (ใน Doppio เรียกสิ่งนี้ว่า Woody) Concept ของ Woody ก็โชว์แบบง่ายได้ตามรูปด้านล่าง

ลักษณะการทำงานของ Farm manager (Woody)

จากภาพด้านบนจะเห็นว่า ตัว Automation code จะมีหน้าที่ที่จะต้องส่ง API request มาขอยืมเครื่องจาก Farm manager โดยระบุข้อมูลคร่าวๆดังนี้

  1. API key (เพื่อแสดงสิทธิ์การใช้งานของตัวเอง โดยแต่ละ API key จะมีโควต้าสูงสุดที่ใช้งานเครื่องได้พร้อมๆกัน กำหนดไว้อยู่)
  2. Spec ของเครื่องที่ต้องการจะยืมเช่น Android / iOS , Version , ขนาดหน้าจอเป็นต้น

หลังจากนั้นสิ่งที่ตัว Farm manager ทำคือการทำสิ่งที่เรียกว่า Manage and prepare นั่นคือการตรวจสอบดูว่า ใน Farm มี Mac mini เครื่องไหนที่ยังว่างอยู่ และทำการส่งคำสั่งไปจัดเตรียมเครื่อง emulator เหล่านั้นให้เรียบร้อย ไม่ว่าจะเป็นการ Start Appium server , Start emulator , จัดเตรียม live view (เดี๋ยวจะอธิบายทีหลังว่ามันคืออะไร) เมื่อทำการ Manage and prepare เสร็จเรียบร้อยแล้ว ก็จะทำการเอาข้อมูลของ Emulator ตอบไปใน Response ของ API request ที่ตัว automation code เรียกใช้งานมา และหลังจากนั้นตัว Automation code ก็นำข้อมูลเหล่านั้นไปใช้งานเพื่อ connect ไปหา emulator ที่ตัวเองยืม โดยหลังจากที่ตัว Automation code ใช้งานเสร็จแล้ว ก็จะมีการยิง API request กลับมาหาตัว Farm manager อีกครั้ง เพื่อทำสิ่งที่เรียกว่า Return process เพื่อให้ Farm manager นำเครื่อง emulator กลับเข้าสู่สถานะ Free อีกครั้ง จะเห็นว่า สิ่งที่เราได้เพิ่มขึ้นมาจากการมี farm manager คือ สองอย่าง

  1. Utilization ของ เครื่อง Mac mini เพราะเราสามารถใช้งาน Mac mini ได้คุ้มค่าขึ้นจากการที่มี farm manager คอยจัดการ
  2. Scalability จากเดิมที่ถ้าไม่มี farm manager คอยจัดการ ในหนึ่งโปรเจค เราอาจจะมี mac mini ให้หนึ่งเครื่อง เราอาจจะรัน parallel สูงสุดได้แค่ 3 emulators (เท่าที่สังขารของ mac mini เราจะอำนวย) แต่ตอนนี้ด้วยการที่เรามี farm manager เราสามารถทำให้เทสของเรารันกระจายไปบน mac mini 5 เครื่องก็ได้ (โดยในเครื่องเดียวกัน ก็อาจจะมี emulator ของโปรเจคอื่นรันอยู่ด้วย) ทำให้การ scale เครื่องขึ้นทำได้ง่ายมากขึ้น

ปัญหาคนไม่คืนหนังสือ

ปัญหาคลาสสิคของห้องสมุด (แม้ทั้งผมและทีม engineer ที่เขียนเจ้า framework นี้ขึ้นมาจะไม่เคยประกอบอาชีพเป็นบรรณารักษ์ก็ตาม) คือการที่คนยืมหนังสือไปแล้วไม่คืน ยืมแล้วหายไปเลย ไม่มี ไม่หนี ไม่จ่าย ไม่ปรากฎตัว ซึ่งถ้าเกิดปัญหานี้ขึ้นกับตัว framework เราสิ่งที่จะเกิดขึ้นก็คือ เครื่องไม่พอนั่นเอง คือ เวลามีใครจะมายืมเครื่อง ตัว Farm manager ของเราจะตอบว่า เครื่องไม่พอจ้าาาา วันหลังค่อยมาใหม่น้า แบบนี้อยู่ร่ำไป เราก็เลยสร้างโปรแกรมเล็กๆขึ้นมาอีกตัว ให้ Farm manager เราเรียกสิ่งนี้ว่า Auditor โดยเจ้าตัว Auditor นี้จะทำหน้าที่คอยตรวจตรา Farm ว่า มี Emulator / Simulator ตัวไหนที่โดนยืมไปแต่ไม่ได้มีการใช้งานหรือเปล่า ถ้าตรวจเจอปุ๊ป สิ่งที่ Auditor ทำคือการ Force return หรือแปลเป็นไทยง่ายๆคือ ยึดคืนนั่นเอง

ลักษณะการทำงานของ Farm Auditor

ทำไปทำมาบานปลายฟีเจอร์มากขึ้นเรื่อยๆ

ตอนแรกที่ทำออกมาตัว Woody นี่ก็ประสบความสำเร็จดี utilization rate ของเครื่อง Mac สูงขึ้นและเราใช้เครื่อง Mac กันได้คุ้มค่ามากขึ้น หลังจากนั้นก็เริ่มมี request เพิ่มมาว่า อยากดูหน้าจอของมือถือตอนที่มันรัน Automate อยู่ได้ไหม บางทีมันรันแล้วตาย แล้วมันจินตนาการยากว่ามันตายยังไง อยากเห็นตอนรัน มันก็เลยเกิดฟีเจอร์ live view ขึ้นมาเพื่อให้เราสามารถเข้าไปดูหน้าจอสดๆ ตอนที่มันรันได้สำหรับแต่ละ emulator หลังจากนั้นไม่พอ ก็มี request ต่อมาอีกว่า เนี้ยบางทีมันรันต่อไม่ได้ อ่ะ อยากลองเอาเม้าส์ไปกดตอนจังหวะนั้นเลยว่ามันเป็นบัคหรือเปล่า ดูอย่างเดียวไม่พอ แต่อยาก control ได้ด้วย ทีมงานเราก็ทำเพิ่มไปอีกเป็นฟีเจอร์ live control ทำไปทำมาบานปลายกลายเป็น website ไว้ ใช้ in house mobile farm อย่างที่โชว์ด้านล่าง

หน้า Main หลักเพื่อโชว์ Quota ของ Slot ที่มีอยู่ของ Account นั้นๆ พร้อมกับจำนวน In use
หน้า Live view list เพื่อเลือกดูหน้าจอ Live view ของเครื่อง Emulator นั้นๆ ในขณะที่ใช้งาน
หน้า Live view ของ Emulator ขณะที่ View ผ่านหน้าเว็บไซต์

ทำไมไม่ใช้ On Cloud Mobile farm service

เป็นคำถามที่หลายมักจะถามว่า มีบริการ Mobile farm service มากมายไม่ว่า เช่น pCloudy, AWS mobile farm, browser stack , lambda test ต่างๆ ทำไมเราถึงไม่ไปใช้ service พวกนี้ที่มีอยู่ อันนี้ต้องบอกก่อนว่า ไม่ได้บอกว่า บริการพวกนี้ไม่ดี เพียงแต่จากประสบการณ์และลักษณะการใช้งานที่เราเคยเจอคือ ราคาของบริการพวกนี้ค่อนข้างแพงถึงแพงมาก สำหรับเรา เนื่องจากส่วนใหญ่มักเป็นบริการที่ใช้ Real device ในการให้บริการ และอย่างที่สองที่เป็นปัจจัยหลักเลยคือ บริการพวกนี้ส่วนใหญ่มักมี Data center อยู่ในต่างประเทศ (ใกล้สุดก็ Singapore) ทำให้บางที latency เวลาใช้งานค่อนข้างสูงในการส่งคำสั่งแต่ละคำสั่งกลับไปกลับมา ระหว่างเครื่องที่รันเทสกับเครื่องที่ทำหน้าที่เป็น emulator ทำให้เกิดปัญหา เทสรันช้า หรือเกิดความ Flaky สูง (บางเจ้าอาจจะมีบริการให้ upload test script ทั้งยวงขึ้นไปรันบนเครื่องเค้าเลย ซึ่งก็ช่วยแก้ปัญหาตรงนี้ได้ แต่ส่วนตัวเราไม่ค่อยชอบท่านี้เท่าไหร่ เนื่องจากเวลาจะทำการรัน parallel มันต้องมีการทำ shading แบ่งงานที่จะรันตั้งแต่ก่อนรัน เพื่อแยกไปรันในแต่ละเครื่อง)

สุดท้ายแล้วขอขายของหน่อย

หลังจากที่ทำใช้ภายในบริษัทมาสักพัก ก็มีลูกค้าหลายคนทั้งที่เป็นลูกค้าของ Doppio อยู่แล้วและไม่ได้เป็น เข้ามาถามว่า อยากใช้บ้างขอเช่าใช้ด้วยได้ไหม ซึ่งก็มีลูกค้าหลายเจ้าที่เช่าใช้งานอยู่ สำหรับใครที่สนใจหา Mobile farm เพื่อรัน CI ของ automation test ตัวเอง ก็ลองติดต่อมาสอบถามได้นะคร้าบ ที่ connect@doppiotech.com จ้าาาาาา

สุดท้ายแต่ไม่ท้ายสุด แม้เราจะสาธยายมายืดยาวถึงวิธีการทำงานของ Framework และไอเดียเบื้องหลังต่างๆ แต่สิ่งเหล่านี้จะเกิดขึ้นมาไม่ได้เลย และคงเป็นแค่ไอเดียบนกระดาษแผ่นนึง หากไม่มีน้องๆ ในทีม Doppio ที่ช่วยกันสร้างและพัฒนาสิ่งเหล่านี้ให้เกิดขึ้น เก่งมากจร้าาาา หวังว่าบทความนี้คงเป็นประโยชน์กับใครหลายๆคนนะครับ วันนี้ลาไปก่อน บ๊ายบาย

Related Blog

Other

QA career — Soft Skill กับ Attitude นั้นสำคัญไฉน

จากประสบการณ์การทำงานมา 20 ปีของพี่ (พูดแล้วก็รู้สึกแก่ 😅) ทำงาน QA มาตั้งแต่เรียนจบเป็น Junior ตัวกระจ๊อย จนมาทำงานในบริษัทยักษ์ใหญ่ สร้างทีม QA ร้อยกว่าคน จนสร้างบริษัทที่มี QA ร่วม 200 คน สิ่งที่สังเกตุเห็นมาตลอดและแอบเป็นสิ่งน่าเศร้าคือ ไม่ค่อยมีใครสอน หรือ พูดถึงความสำคัญของ Attitude หรือ Soft skill ที่จำเป็นสำหรับสายงานนี้ (จริงๆคือไม่ค่อยเห็นการพูดถึงเรื่องพวกนี้ในงาน Tech ทั้งหมดด้วยแหล่ะ) ทั้งๆที่มันเป็นสิ่งสำคัญมากนะ เริ่มตั้งแต่ทำให้คนๆนึงได้งาน ถัดมามันเป็น skill ที่ทำให้คนๆนั้นอยู่รอดกับการทำงานในช่วงแรก และในที่สุดมีส่วนสำคัญในการแยกความแตกต่างระหว่าง QA ธรรมดาที่เดินไปถึงจุดตัน (ถึงแม้จะมี technical skill ที่ดีเยี่ยมก็ตาม) กับ QA ที่เติบโตไปเรื่อยๆจนเป็น A player ใน market ทุกวันนี้ส่วนตัวพี่เอง แทบไม่ได้สอน Technical skill ให้น้องๆด้วยตัวเองละนะเพราะมีคนช่วยสอนเยอะหล่ะ แต่จะใช้เวลาส่วนใหญ่ในการค่อยๆสอน Soft Skill…

QA

QA คนไหนมี Hardskill ดีแล้ว อย่าลืมฝึก Softskill ไว้ด้วยนะ #doppiotech #สายเทค #softwaretester

QA เก่งแค่ Hard Skill พอไหม? ทำไม Soft Skill ถึงเป็นอาวุธลับที่ทำให้คุณกลายเป็น "Star" ในทีม ในคอมมูนิตี้ของคนทำงานสายเทคและ QA มักจะมีคำถามยอดฮิตว่า "ถ้าอยากเก่งขึ้นต้องเรียนรู้อะไร?" หรือ "อยากย้ายสายต้องฝึกสกิลไหน?" ซึ่งคำตอบส่วนใหญ่มักจะพุ่งเป้าไปที่ Hard Skill เช่น การทำ Automation, การเรียนรู้เครื่องมือใหม่ๆ หรือเทคนิคการเขียน Test Case แต่ในมุมมองของผู้สัมภาษณ์งานและหัวหน้าทีม ความจริงที่น่าสนใจคือ มีผู้สมัครจำนวนมากที่ไปเรียนรู้ทักษะทางเทคนิคมาสารพัด แต่กลับไม่มีความโดดเด่นเพียงพอที่ทำให้บริษัทรู้สึกว่า "ต้องรับคนนี้เข้าทำงานให้ได้" Hard Skill คือพื้นฐาน แต่ความเก๋าอยู่ที่ "การจัดการ" สำหรับ QA ที่มีประสบการณ์ 4-5 ปี การเขียน Test Case ให้ดีเป็นเรื่องที่ควรทำได้อยู่แล้ว แต่ความแตกต่างระหว่าง Test Case ที่สมบูรณ์แบบ (Perfect) กับเกือบสมบูรณ์แบบนั้นไม่ได้สร้างความแตกต่างให้ตัวคุณดู "เฉิดฉาย" ในสายตาหัวหน้าเท่ากับ "สกิลในการจัดการ"…

Other

Shared library คืออะไร และทำไมเราจึงควรใช้ในทีมและองค์กร วันนี้อยากจะมาเล่าเรื่อง Doppio Common Library

สวัสดีครับ บทความนี้อยากจะมาแชร์ไอเดียซึ่งหลายๆ คนอาจจะมีประสบการณ์กับอะไรพวกนี้มาอยู่แล้ว แต่มือใหม่ในด้าน Automation หลายๆ คน อาจจะยังไม่รู้จัก หรือยังไม่เข้าใจว่ามันคืออะไร บทความนี้ผมจะมาอธิบายให้ฟังกันครับ จุดเริ่มต้น หลายๆ คนที่ทำ automation อาจจะเคยประสบพบเจอกับเหตุการณ์ว่า พอเราย้ายไปทำโปรเจค automation อันใหม่แล้วบางทีเราก็มักจะเจอกับสิ่งที่เราเคยทำไปแล้ว ยกตัวอย่างเช่น และเหตุการณ์อื่นๆ ในลักษณะคล้ายกัน คือ เรา หรือเพื่อนร่วมทีมของเราที่อาจจะอยู่คนละโปรเจคหรือคนละทีม ได้เจอโจทย์คล้ายๆกันมาบ้างแล้ว และสิ่งที่เราต้องการในสถานการณ์นี้ก็คือ ทำยังไงให้เราสามารถสิ่งที่เราหรือใครสักคนในองค์กรเราเคยทำมาแล้ว ให้ได้เร็ว ไม่ต้องไปเสียเวลาเหมือนทำใหม่อีกรอบ ณ จุดเริ่มต้น (แบบตั้งไข่เลยนะ) เรามักจะมีประโยคคลาสสิคที่เราส่งไปให้เพื่อน “เฮ้ยๆ ขอโค้ดหน่อยดิ” , “เฮ้ยๆ ไป copy ได้ที่ repo ไหนบ้าง” ประมาณนี้ ทีนี้ถามว่ามันก็ตอบโจทย์ที่เราต้องการได้นะ ก็คือ ไม่ต้องเสียเวลาไปทำใหม่ แต่มันก็มีข้อเสียที่ยิ่งใหญ่อยู่ก็คือการที่เราจะต้อง copy กันต่อๆ ไปเรื่อยๆ มันจะมีปัญหาว่า Solution จากปัญหาข้างต้นของการ copy โค้ดไปมา…