ความต้องการ
ในการทำ 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() ดังนี้

เพียงเท่านี้ก็สามารถใช้งานแบบง่าย ๆ แล้ว