ความต้องการ
ในการทำ performance testing ของระบบนั้น
มีเครื่องมือมากมายให้ใช้งาน ตัวที่ชอบใช้งานบ่อย ๆ คือ wrk
แต่ติดตรงที่ถ้าต้องการให้ dynamic หน่อย
ก็ต้องเขียน script ด้วยภาษา Lua
ทำให้อาจจะลำบากขึ้นมานิดหน่อย
ความต้องการที่อยากได้คือ
- ทำการอ่านข้อมูลที่จะส่งไปในแต่ละ request จากไฟล์ CSV
- ส่งไปยังระบบที่ต้องการทดสอบ
- บันทึกผลการทดสอบลงไฟล์ CSV
เลยต้องมานั่งเขียน code กันนิดหน่อย
วิธีการก็ต้องเขียน Lua script
โดยที่ใน repository ของ wrk ก็มีตัวอย่างไว้ให้แล้ว
เพียงแค่ต้องมานั่งทำความเข้าใจกันหน่อย
ว่าในแต่ละ function มันทำงานตอนไหน แล้วเราจะต้องเขียนอะไร อย่างไร
ซึ่งก็ไม่ยากมากนัก ดังนี้
- function setup(thread) คือ function การ setup ข้อมูลต่าง ๆ ของแต่ละ thread จะถูกเรียกครั้งเดียวในแต่ละ thread
- function init(args) คือ function แรกที่จะถูกเรียกโดยส่ง arguments ต่าง ๆ จาก command line ของ wrk เข้ามา จะถูกเรียกครั้งเดียวในแต่ละ thread
- function request() คือ function ที่แต่ละ thread จะสร้างและส่ง request ไปยังระบบที่จะทดสอบ
- function response(status, headers, body) คือ function ที่จะรอรับ response กลับมาในแต่ละ request ที่ส่งออกไป
- function done() คือ function ที่ถูกเรียกครั้งเดียวเมื่อทำงานเสร็จสิ้นทั้งหมด
สามารถลองเขียน code เพื่อดูการทำงานง่าย ๆ ได้ดังนี้
คำว่า Thread และ Request แสดงด้วยภาพนี้น่าจะเข้าใจได้ง่ายสุด ๆ
เมื่อพอเข้าใจว่าแต่ละ function ทำงานอะไรแล้ว
ก็ลงมือเขียน code ตามที่การใช้งานดีกว่า
- อ่านข้อมูลจากไฟล์ CSV
- แต่ละ request ใช้ข้อมูลจากไฟล์ CSV ในแต่ละ row
- ส่วนของผลการทดสอบบันทึกลงไฟล์ CSV
เริ่มจากการอ่านข้อมูลจากไฟล์ CSV ออกมา
โดยจะกระจายข้อมูลแต่ละ row ไปยังแต่ละ request
ถ้าถึงบรรทัดสุดท้ายก็กลับมายัง row แรกวนไป
ในภาษา Lua นั้น index ของ array จะเริ่มที่ตำแหน่งที่ 1
ลองเขียนมั่ว ๆ ดูได้ประมาณนี้
จากนั้นในส่วนของผลการทดสอบที่ได้ทั้งหมด
ให้ทำการบันทึกลงไฟล์ CSV ก็เขียนข้อมูลที่ต้องการใน function done() ดังนี้
เพียงเท่านี้ก็สามารถใช้งานแบบง่าย ๆ แล้ว