Skip to main content
0

AutoCannon ยิง Load Test แบบง่าย ๆ สไตล์ Node Dev

สรุปสั้น ๆ

สวัสดีครับ วันนี้ผมจะมาแนะนำเครื่องมือสำหรับทำ Load Test กันครับ สำหรับใครที่เคยใช้เครื่องมืออื่น ๆ อย่างเช่น JMeter มาก่อนหน้า ต้องบอกเอาไว้ก่อนว่าความสามารถของเจ้า AutoCannon อาจจะไม่เยอะเท่า แต่ความง่ายนั้นชนะขาดแน่นอนครับ

เขียนโดย
Sutthinai Boonyingyongchai
MidLevel Software Developer

บทความนี้ตีพิมพ์ และ เผยแพร่เมื่อ 25 สิงหาคม 2566

แนะนำตัว AutoCannon

AutoCannon เป็น “HTTP/1.1 benchmarking tool” หรือก็คือเป็นเครื่องมือ Load Test นั่นแหละ โดยได้แรงบันดาลใจมาจาก wrk และ wrk2 (ที่ผมเองก็ไม่รู้จักมาก่อนเหมือนกัน) แล้วก็ตามที่เกริ่นเอาไว้ในหัวบทความครับ AutoCannon สร้างด้วย Node นั่นเอง เพราะฉะนั้น ตั้งแต่การติดตั้งไปจนกระทั่งการใช้งานก็สะดวกมาก ๆ ถ้าเราติดตั้ง Node ไว้ในเครื่องของเราแล้ว

ติดตั้ง

ใช้ท่าประจำ npm i ติดตั้งแบบ Global ได้เหมือน Package ทั่ว ๆ ไป

npm i autocannon -g

หรือว่าถ้าเรียกใช้ผ่านโค้ดในโปรเจ็กต์ก็ติดตั้งแบบธรรมดาได้

npm i autocannon

ใช้แบบไว ๆ ผ่าน Command Line

เริ่มด้วยวิธีใช้งานที่ง่ายที่สุดก็คือใน Command Line นั่นเอง โดยถ้าหากเราติดตั้งแบบ Global เราก็จะสามารถเรียกใช้งานด้วยชื่อ Package ได้ทุกที่เลย ตอนนี้เรามาลองดูหน้าตาการเรียกใช้กันก่อน

แบบพื้นฐาน

ใช้คำสั่ง autocannon ตามด้วย URL โดยที่ไม่ได้ระบุ Option อะไรเลย

คำสั่ง

autocannon http://localhost:3001

ผลลัพธ์

 

จากผลลัพธ์จะเป็นการทดสอบโดยใช้ค่า Default ทั้งหมด ก็คือสร้าง 10 Connection รุมยิงไปที่ URL ดังกล่าวเป็นเวลา 10 วินาที 

จากรูปผลลัพธ์จะแบ่งเป็น 2 ตาราง ได้แก่ 

  • Request Latency – ระยะเวลาที่ได้รับ Response
  • Request Volume – จำนวน Request และขนาดข้อมูลต่อวินาที

ส่วนหัวตารางทั้งสองอันก็จะมี

  • ตัวเลขผลลัพธ์จากแต่ละ Percentile
  • Avg – Average
  • Stdev – Standard deviation
  • Max –  Request Latency ที่มากที่สุด
  • Min – Request Volume ที่น้อยที่สุด

 

แบบระบุ Options

AutoCannon มี Option ให้ใส่เยอะมาก ตามไปดูเต็ม ๆ ได้ที่ Command Line Usage โดยแต่ละคำสั่งจะเรียกใช้ได้แบบย่อและแบบเต็มแล้วแต่ความชอบ โดยรูปแบบคำสั่งจะเป็นแบบนี้

autocannon [options] URL

Option ที่น่าสนใจ เช่น

  • -c/–connections NUM
    ระบุจำนวน Connection ที่จะใช้ยิง
  • -d/–duration SEC
    ระยะเวลาในการทดสอบหน่วยเป็นวินาที
  • -a/–amount NUM
    จำนวน Request ที่ต้องการยิง ถ้าระบุค่านี้ Option duration จะไม่ถูกนำมาใช้
  • -m/–method METHOD
    HTTP Method ที่จะใช้
  • -b/–body BODY
    Request Body
  • -H/–headers K:V
    Request Header ในรูปแบบของ Key:Value

ตัวอย่าง

  • autocannon -c 100 -d 30 -m POST http://localhost:3000/posts
    • -c 100
      สร้าง 100 Connection 
    • -d 30
      ยิงเป็นเวลา 30 วินาที
    • -m POST
      ด้วย Method POST
  • autocannon -m POST -H “Content-Type: application/json” -b ‘{“key”: “value”}’ http://localhost:3000/posts
    • -m POST
      ใช้ Method POST
    • -H “Content-Type: application/json”
      ใส่ Content-Type: application/json ใน Header
    • -b ‘{“key”: “value”}’
      JSON ที่ส่งใน Body

ใช้แบบเขียนโค้ด

เนื่องจาก AutoCannon สร้างขึ้นมาด้วย Node เพราะฉะนั้น เราจึงสามารถเขียนโค้ดและเรียกใช้งานในโปรเจ็กต์ได้ ถ้าต้องการความซับซ้อนของการทดสอบ ต้องการเอามาใช้ซ้ำ หรือว่าจะเอาไปเป็นส่วนนึงของโปรเจ็กต์ก็สามารถทำได้ไม่ยาก โดย AutoCannon สามารถใช้งานทั้งแบบ Callback และ Async/Await

แบบ Callback

ใช้ console.log เป็น Callback Function

const autocannon = require('autocannon');

autocannon({
  url: 'http://localhost:3000',
  connections: 10,
  duration: 10
}, console.log);

หรือเขียนแบบเต็ม ๆ ก็จะสามารถรับค่า Error ได้ด้วย

const autocannon = require('autocannon');

autocannon({
  url: 'http://localhost:3001',
  connections: 10,
  duration: 10
}, (err, result) => {
  if (err) {
    console.error('Error:', err);
  } else {
    console.log(result);
  }
});

แบบ Async/Await

รอ Result แล้วค่อยเอาไปใช้งานต่อ

const autocannon = require('autocannon');

async function runAutoCannon() {
    const result = await autocannon({
        url: 'http://localhost:3000/posts',
        connections: 10,
        duration: 10
    });

    console.log(result);
}

runAutoCannon();

ผลลัพธ์

ผลลัพธ์จะออกมาเป็น Object ที่ระบุ Option ที่ใช้ แล้วก็ผลลัพธ์ที่ได้ หน้าตาแบบนี้

❯ node main.js
{
  title: undefined,
  url: 'http://localhost:3000/posts',
  socketPath: undefined,
  connections: 10,
  sampleInt: 1000,
  pipelining: 1,
  workers: undefined,
  duration: 10.02,
  samples: 10,
  start: 2023-08-25T10:28:58.427Z,
  finish: 2023-08-25T10:29:08.446Z,
  errors: 0,
  timeouts: 0,
  mismatches: 0,
  non2xx: 0,
  resets: 0,
  '1xx': 0,
  '2xx': 9758,
  '3xx': 0,
  '4xx': 0,
  '5xx': 0,
  statusCodeStats: { '200': { count: 9758 } },
  latency: {
    average: 9.75,
    mean: 9.75,
    stddev: 2.29,
    min: 2,
    max: 43,
    p0_001: 2,
    p0_01: 2,
    p0_1: 3,
    p1: 7,
    p2_5: 8,
    p10: 8,
    p25: 8,
    p50: 9,
    p75: 10,
    p90: 12,
    p97_5: 15,
    p99: 18,
    p99_9: 39,
    p99_99: 43,
    p99_999: 43,
    totalCount: 9758
  },
  requests: {
    average: 975.8,
    mean: 975.8,
    stddev: 87.16,
    min: 805,
    max: 1087,
    total: 9758,
    p0_001: 805,
    p0_01: 805,
    p0_1: 805,
    p1: 805,
    p2_5: 805,
    p10: 805,
    p25: 909,
    p50: 994,
    p75: 1044,
    p90: 1064,
    p97_5: 1087,
    p99: 1087,
    p99_9: 1087,
    p99_99: 1087,
    p99_999: 1087,
    sent: 9768
  },
  throughput: {
    average: 273209.6,
    mean: 273209.6,
    stddev: 24380.55,
    min: 225400,
    max: 304360,
    total: 2732240,
    p0_001: 225407,
    p0_01: 225407,
    p0_1: 225407,
    p1: 225407,
    p2_5: 225407,
    p10: 225407,
    p25: 254591,
    p50: 278527,
    p75: 292351,
    p90: 297983,
    p97_5: 304383,
    p99: 304383,
    p99_9: 304383,
    p99_99: 304383,
    p99_999: 304383
  }
}

สำหรับตัวอย่างการใช้งาน AutoCannon ที่เอามาให้ดูในครั้งนี้ก็เป็นแค่การใช้งานแบบพื้นฐานเท่านั้น ทั้งการใช้งานแบบ Command Line และแบบเขียน Code ยังมี Option อีกเยอะมาก ๆ ให้เลือกใช้งาน ลองแวะเข้าไปอ่าน Doc แบบเต็ม ๆ กันได้ แล้วก็ขอให้สนุกกับการเขียนโค้ดครับ

ระบบฝึกทักษะ การเขียนโปรแกรม

ที่พร้อมตรวจผลงานคุณ 24 ชั่วโมง

  • โจทย์ปัญหากว่า 200 ข้อ ที่รอท้าทายคุณอยู่
  • รองรับ 9 ภาษาโปรแกรมหลัก ไม่ว่าจะ Java, Python, C ก็เขียนได้
  • ใช้งานได้ฟรี ! ครบ 20 ข้อขึ้นไป รับ Certificate ไปเลย !!
เข้าใช้งานระบบ DevLab ฟรี !เรียนรู้เพิ่มเติม

เรียนรู้ไอที “อัพสกิลเขียนโปรแกรม” จากตัวจริง
ปั้นให้คุณเป็น คนสายไอทีระดับมืออาชีพ

1

แนะนำสำหรับคุณ

Close Menu

เราใช้คุกกี้เพื่อพัฒนาประสิทธิภาพ และประสบการณ์ที่ดีในการใช้เว็บไซต์ของคุณ คุณสามารถศึกษารายละเอียดได้ที่ นโยบายความเป็นส่วนตัว และสามารถจัดการความเป็นส่วนตัวเองได้ของคุณได้เองโดยคลิกที่ ตั้งค่า

ตั้งค่าความเป็นส่วนตัว

คุณสามารถเลือกการตั้งค่าคุกกี้โดยเปิด/ปิด คุกกี้ในแต่ละประเภทได้ตามความต้องการ ยกเว้น คุกกี้ที่จำเป็น

ยอมรับทั้งหมด
จัดการความเป็นส่วนตัว
  • คุกกี้ที่จำเป็น
    เปิดใช้งานตลอด

    ประเภทของคุกกี้มีความจำเป็นสำหรับการทำงานของเว็บไซต์ เพื่อให้คุณสามารถใช้ได้อย่างเป็นปกติ และเข้าชมเว็บไซต์ คุณไม่สามารถปิดการทำงานของคุกกี้นี้ในระบบเว็บไซต์ของเราได้
    รายละเอียดคุกกี้

  • คุกกี้สำหรับการติดตามทางการตลาด

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

บันทึกการตั้งค่า