เวลาเราทำ E2E เทส เรามักจะต้องมีขั้นตอนในการ Login ก่อนเสมอ ซึ่งเหมือนเป็นขั้นตอนพื้นฐานก่อนการรันเทสในแต่ละข้อ ซึ่งการ Login ส่วนใหญ่มักจะเป็นขั้นตอนที่ใช้เวลา หรือบางครั้งเป็นขั้นตอนที่ไม่เสถียรกรณี่ที่ระบบ Login เป็นคนละ Application หลักที่จะเทส
วันนี้ผมจะมาแนะนำฟีเจอร์ใหม่ ที่จะใช้แก้ปัญหาด้วยการใช้ Browser State ในการจดจำข้อมูลหลังจากที่เรา Login เสร็จเรียบร้อยแล้ว เพื่อที่เราจะได้ไม่ต้องมา login เข้าระบบซ้ำๆในการรันเทสเคสข้อถัดๆไป ทั้งที่ไม่จำเป็น
Browser State
การที่ฝั่ง Server สามารถระบุได้ว่า Browser เราทำงานอยู่ที่ State ไหน Server จะทำการส่งค่า Reference มาเก็บที่ Browser ของเรา โดย State หลักๆมีดังนี้
- cookie
- local storage
- session storage (ค่อนข้างจะถูกใช้น้อย)
ซึ่งจาก 3 ประเภทหลักๆด้านบน State Management keywords รองรับ cookie และ local storage ให้เราอัตโนมัติครับ
ตัวอย่างการใช้งาน
*** Settings *** Library PuppeteerLibrary Test Setup Open browser to test page Test Teardown Close All Browser Suite Teardown Close Puppeteer *** Variables *** ${DEFAULT_BROWSER} chrome ${HOME_PAGE_URL} https://demoqa.com/login ${PROFILE_PAGE_URL} https://demoqa.com/profile ${USERNAME} qahive ${PASSWORD} Welcome1! *** Test Cases *** Save and Reuse browser authen state into json file Input Text id=userName ${USERNAME} Input Password id=password ${PASSWORD} Click Element id=login Wait Until Page Contains Element id=userName-value Wait Until Page Contains ${USERNAME} # Save State after login success Save Browser Storage State admin Close All Browser # Reopen and bypass login by using state ref ${BROWSER} = Get variable value ${BROWSER} ${DEFAULT_BROWSER} ${HEADLESS} Get variable value ${HEADLESS} ${False} &{options} = create dictionary headless=${HEADLESS} state_ref=admin Open browser ${PROFILE_PAGE_URL} browser=${BROWSER} options=${options} Wait Until Page Contains ${USERNAME} Delete Browser Storage State admin Delete All Browser Storage States *** Keywords *** Open browser to test page ${BROWSER} = Get variable value ${BROWSER} ${DEFAULT_BROWSER} ${HEADLESS} Get variable value ${HEADLESS} ${False} &{options} = create dictionary headless=${HEADLESS} Open browser ${HOME_PAGE_URL} browser=${BROWSER} options=${options} Set Screenshot Directory test-report Capture Page Screenshot
จากตัวอย่างด้านบนจะเห็นว่าหลังจากที่ทำการ Login เสร็จเรียบร้อย และมีการตรวจสอบว่า User profile ขึ้นมาถูกต้องแล้ว ก็จะมีการสั่งคำสั่ง Save Browser Storage State ซึ่งมีการส่งค่าอ้างอิงที่ชื่อ admin โดยคำสั่งนี้จะทำการบันทึก State ของ Browser ลงมาเป็นไฟล์ json และมีรหัสอ้างอิงคือ admin
หลังจากเราทำการปิด Browser ไปและทำการ Open browser มาใหม่ จะมีการส่ง state_ref=admin เพื่อทำการโหลด State ที่เราบันทึกไว้กลับออกมาใช้งาน ทำให้เราสามารถเปิดหน้าเว็บไปที่หน้า Profile page ได้โดยไม่ต้อง login นั่นเอง
สุดท้ายถ้าเราอยากจะลบ State ทิ้ง เราสามารถใช้คำสั่ง
- Delete Browser Storage State เป็นการลบ State จาก State ref นั่นเอง
- Delete All Browser Storage States เป็นการลย State ทั้งหมด ที่เรามีอยู่
ประโยชน์
- ลดเวลาการเทสลงอย่างเห็นได้ชัด ไม่ต้องมา login ซ้ำๆ
- แก้ปัญหาการทำ Authen ที่เป็นระบบภายนอก ไม่ต้องเสี่ยงกับระบบที่ใช้ได้บ้างไม่ได้บ้าง
- สามารถนำมาประยุกต์ใช้ในการเทส state อื่นๆนอกจาก Login ก็ได้ เช่นการซื้อสินค้า
สนใจเรียนรู้แบบเจาะลึก
Basic Robot Framework Puppeteer
Web Automated Test ด้วย
Robot Framework Puppeteer