JMeter สามารถสร้างตัวอย่างคำขอ HTTP ได้โดยทำหน้าที่เป็นตัวกลางในการบันทึกข้อมูลระหว่างเบราว์เซอร์และแอปพลิเคชันเป้าหมายที่ได้รับอนุญาต เวอร์ชันปัจจุบันเรียกส่วนประกอบนี้ว่าHTTP(S) Test Script Recorderโดยจะบันทึกการเดินทางของเบราว์เซอร์หนึ่งครั้งไปยัง Recording Controller หลังจากนั้นสคริปต์จะต้องได้รับการทำความสะอาด เชื่อมโยง ตรวจสอบความถูกต้อง และดำเนินการทดสอบในระดับโปรโตคอล
JMeter HTTP Proxy Server คืออะไร?
เครื่องบันทึกจะรับฟังผ่านพอร์ตภายในเครื่อง ซึ่งโดยทั่วไปแล้วจะเป็นพอร์ตเดียว 8888เบราว์เซอร์จะส่งคำขอ HTTP และ HTTPS ไปยังพร็อกซีนั้น และ JMeter จะแปลงทราฟฟิกที่ตรงกันให้เป็นแซมpler ภายใต้คอนโทรลเลอร์ที่เลือกไว้ ในระหว่างการเล่นซ้ำ JMeter จะส่งคำขอโดยตรง โดยจะไม่เปิดเบราว์เซอร์สำหรับผู้ใช้เสมือนแต่ละราย
เหตุใดจึงควรบันทึกเสียงแทนการเขียนบทด้วยมือ?
- จำลองลำดับการร้องขอ การเปลี่ยนเส้นทาง แบบฟอร์ม และ API เบื้องหลังได้อย่างสมจริง
- เผยให้เห็นการเรียกใช้ฟังก์ชัน XHR หรือ fetch ที่มักถูกมองข้ามไป
- สร้างข้อมูลพื้นฐานอย่างรวดเร็วสำหรับขั้นตอนการใช้งานที่ซับซ้อน
- ลดข้อผิดพลาดในการถอดความในส่วนหัวและพารามิเตอร์
การสร้าง API ด้วยตนเองนั้นมีความเรียบร้อยกว่าสำหรับ API ขนาดเล็กที่มีเอกสารประกอบ การบันทึกข้อมูลจะช่วยได้เมื่อยังไม่เข้าใจพฤติกรรมเครือข่ายของเบราว์เซอร์ สำหรับคำศัพท์เฉพาะ โปรดดูคู่มือประเภทพร็อกซี ของ เรา
วิธีการบันทึกสคริปต์ใน JMeter 5.x
- เริ่มใช้งาน JMeter ในโหมด GUI เพื่อสร้างสคริปต์
- เพิ่มกลุ่มเธรดลงในแผนการทดสอบ
- เพิ่ม Recording Controller ภายใต้ Thread Group
- เพิ่มการตั้งค่าเริ่มต้นสำหรับการร้องขอ HTTP และตัวจัดการคุกกี้ HTTP ในกรณีที่เหมาะสม
- เพิ่ม HTTP(S) Test Script Recorder และเลือก Recording Controller เป็นเป้าหมาย
- ใช้รูปแบบการรวม/การยกเว้นเพื่อจำกัดปริมาณการรับส่งข้อมูลที่ไม่เกี่ยวข้อง
คู่มือการบันทึกข้อมูล อย่างเป็นทางการของ Apache JMeterเป็นเอกสารอ้างอิงที่เชื่อถือได้สำหรับเวอร์ชันนั้นๆ
ขั้นตอนที่ 1) การตั้งค่าเซิร์ฟเวอร์ HTTP Proxy
8888ตั้งค่าตัวควบคุมเป้าหมาย แล้วคลิก เริ่มต้น.ตั้งค่าเบราว์เซอร์ทดสอบด้วยพร็อกซีโฮสต์ HTTP และ HTTPS 127.0.0.1 และใช้พอร์ตเดียวกัน หากเบราว์เซอร์ทำงานใน VM หรือคอนเทนเนอร์อื่น localhost จะหมายถึงสภาพแวดล้อมนั้น ให้ใช้ที่อยู่ IP ส่วนตัวที่สามารถเข้าถึงได้และได้รับการอนุมัติแทน
Proxy host: 127.0.0.1
Proxy port: 8888
Include: https?://test.example.com/.*
Exclude: .*(.png|.jpg|.gif|.css|.woff2)(?.*)?$
อย่ากรองข้อมูลอย่างเข้มงวดเกินไปในรอบแรก เพราะ API ของแอปพลิเคชันอาจใช้โดเมนย่อยอื่น บันทึกข้อมูลเพียงครั้งเดียว ตรวจสอบโฮสต์ จากนั้นค่อยปรับแต่งรูปแบบ
ขั้นตอนที่ 2) บันทึกกิจกรรมของคุณ
- เริ่มการบันทึกและเชื่อถือใบรับรองชั่วคราวเฉพาะในเบราว์เซอร์ทดสอบที่แยกต่างหากเท่านั้น
- เปิดใช้งานสภาพแวดล้อมการทดสอบที่ได้รับอนุญาต
- ทำการเดินทางที่สะอาดหมดจดหนึ่งครั้งด้วยความเร็วระดับมนุษย์
- หยุดบันทึกทันทีหลังจากดำเนินการทางธุรกิจเสร็จสิ้นครั้งสุดท้าย
- คืนค่าการตั้งค่าพร็อกซีปกติของเบราว์เซอร์
เปลี่ยนชื่อแซมpler ตามการดำเนินการทางธุรกิจ และจัดกลุ่มคำขอที่เกี่ยวข้องไว้ภายใต้ตัวควบคุมธุรกรรม ลบข้อมูลวิเคราะห์ โฆษณา การอัปเดตเบราว์เซอร์ วิดเจ็ตแชท และทรัพยากรคงที่ที่ซ้ำกัน เว้นแต่จะระบุไว้อย่างชัดเจนในขอบเขต
ตรวจสอบตัวอย่างข้อมูลทุกตัวเพื่อหาความลับ รหัสผ่านควรมาจากข้อมูลรันไทม์ที่ได้รับการปกป้อง ในขณะที่การเปลี่ยนแปลงโทเค็นต้องอาศัยความสัมพันธ์กัน
ขั้นตอนที่ 3) เรียกใช้แผนการทดสอบของคุณ
ตรวจสอบผู้ใช้หนึ่งรายและรอบการทำงานหนึ่งรอบก่อนที่จะเพิ่มปริมาณข้อมูล ใช้ View Results Tree ชั่วคราว ตรวจสอบการเปลี่ยนเส้นทางและเนื้อหาการตอบกลับ และเพิ่มการตรวจสอบเพื่อยืนยันผลลัพธ์ทางธุรกิจที่คาดหวังไว้ HTTP 200 เพียงอย่างเดียวไม่ได้พิสูจน์ว่าการเข้าสู่ระบบหรือการชำระเงินสำเร็จ
Threads: 1
Ramp-up: 1 second
Loop Count: 1
หลังจากแก้ไขข้อผิดพลาดแล้ว ให้ลบตัวรับฟังที่ใช้ทรัพยากรมากออก และเรียกใช้แบบไม่มี GUI:
jmeter -n -t recorded-test.jmx -l results.jtl -e -o html-report
โฟลเดอร์รายงานต้องเป็นโฟลเดอร์ใหม่หรือว่างเปล่า ค่อยๆ เพิ่มภาระงานและตรวจสอบระบบเป้าหมายรวมถึง JMeter ด้วย
ขั้นตอนที่ 4) บันทึกผลการทดสอบของคุณ
บันทึกแผนที่สามารถนำกลับมาใช้ใหม่ได้เป็น .jmx จัดเก็บไฟล์และแยกข้อมูลที่สร้างขึ้นต่างหาก:
- เจเอ็มเอ็กซ์: ตัวสุ่มตัวอย่าง ตัวควบคุม การยืนยัน ตัวจับเวลา ตัวแปร และการกำหนดค่า
- เจทีแอล: ผลการวิเคราะห์ตัวอย่างดิบ
- แดชบอร์ด HTML: เปอร์เซ็นไทล์, อัตราการประมวลผล, ข้อผิดพลาด และเธรดที่ทำงานอยู่
- ตัวชี้วัดเซิร์ฟเวอร์: ข้อมูลการวัดระยะทางของ CPU, หน่วยความจำ, ฐานข้อมูล, คิว และการให้บริการ
จัดทำเวอร์ชันของแผนโดยใช้คุณสมบัติที่ไม่เป็นความลับและข้อมูลทดสอบ บันทึกเวอร์ชันของ JMeter และ Java, บิลด์เป้าหมาย, สภาพแวดล้อม, จำนวนผู้ใช้, ระยะเริ่มต้น และระยะเวลา
การบันทึกข้อมูลการรับส่ง HTTPS และใบรับรอง
สำหรับ HTTPS นั้น JMeter จะสร้างใบรับรองผู้มีอำนาจออกใบรับรองชั่วคราวเมื่อเริ่มการบันทึก นำเข้าใบรับรองนี้เฉพาะในเบราว์เซอร์ทดสอบที่ใช้โดยเฉพาะ บันทึกเว็บไซต์ที่ได้รับอนุญาต แล้วลบออก
- เริ่มการบันทึกสคริปต์ทดสอบ HTTP(S)
- ค้นหาใบรับรอง ApacheJMeterTemporaryRootCA ที่สร้างขึ้น
- นำเข้าเป็นแหล่งข้อมูลที่เชื่อถือได้ในโปรไฟล์ที่แยกต่างหาก
- บันทึกเส้นทางการใช้งาน HTTPS ที่ได้รับการอนุมัติ
- เมื่อใช้งานเสร็จแล้ว ให้ลบใบรับรองออก
การตรึงใบรับรอง (Certificate pinning), TLS แบบร่วมกัน (Mutual TLS), เบราว์เซอร์แบบจัดการ (Managed browsers), แอปพลิเคชันบนมือถือ และโปรโตคอลการขนส่งรุ่นใหม่ๆ สามารถป้องกันการดักฟังได้ อย่าลดทอนมาตรการควบคุมความปลอดภัยในสภาพแวดล้อมการใช้งานจริง ให้ใช้เวอร์ชันสำหรับการทดสอบ (staging build), ข้อกำหนด API หรือวิธีการดักฟังทางเลือกที่ได้รับการอนุมัติ
ความสัมพันธ์: การทำให้สคริปต์ที่บันทึกไว้สามารถเล่นซ้ำได้
รหัสเซสชัน โทเค็น CSRF สถานะ OAuth ลายเซ็นคำขอ และรหัสทรัพยากรจะเปลี่ยนแปลงไปในแต่ละรอบการทำงาน การวิเคราะห์ความสัมพันธ์จะดึงค่าใหม่จากคำตอบหนึ่งและแทนที่ลงในคำขอครั้งต่อๆ ไป
- ค้นหาคำตอบแรกที่มีค่าแบบไดนามิกอยู่
- เพิ่มตัวแยกข้อมูล JSON, CSS, XPath หรือ Regular Expression
- บันทึกผลลัพธ์ลงในตัวแปร JMeter ที่ตั้งชื่อไว้
- แทนที่ค่าคงที่ที่กำหนดไว้ในภายหลังด้วยการอ้างอิงตัวแปร
- แสดงข้อผิดพลาดอย่างชัดเจนเมื่อการดึงข้อมูลไม่พบรายการที่ตรงกัน
JSON Extractor
Variable: csrfToken
JSON Path: $.csrf.token
Default: NOT_FOUND
Later header:
X-CSRF-Token: ${csrfToken}
การกำหนดพารามิเตอร์จะให้ข้อมูลผู้ใช้ที่เป็นอิสระ ซึ่งมักมาจากไฟล์ CSV ในขณะที่การหาความสัมพันธ์จะรวบรวมข้อมูลที่เซิร์ฟเวอร์สร้างขึ้นระหว่างการดำเนินการ แผนงานที่สมจริงมักต้องการทั้งสองอย่าง
การแก้ไขปัญหา
| ปัญหา | สาเหตุน่าจะ | แก้ไขปัญหา |
|---|---|---|
| ไม่มีการบันทึกคำขอใดๆ | พร็อกซีไม่ถูกต้อง, เครื่องบันทึกหยุดทำงาน, พอร์ตขัดแย้ง หรือกฎการบายพาส | ยืนยันโฮสต์และพอร์ต เริ่มการบันทึก และลบการยกเว้นเป้าหมาย |
| คำเตือน HTTPS | บัตรประจำตัวชั่วคราวหายหรือหมดอายุ | สร้างใบรับรองเครื่องบันทึกใหม่และนำเข้าเฉพาะในโปรไฟล์ทดสอบเท่านั้น |
| การจราจรหนาแน่นเกินไป | ส่วนขยาย ข้อมูลการวัดระยะทาง แท็บอื่นๆ หรือรูปแบบกว้างๆ | ใช้โปรไฟล์ที่สะอาดและปรับแต่งตัวกรองการรวม/การยกเว้นให้เหมาะสม |
| การเล่นซ้ำการเข้าสู่ระบบล้มเหลว | คุกกี้ โทเค็น กระบวนการ OAuth หรือการเชื่อมโยงข้อมูลหายไป | เพิ่มตัวจัดการคุกกี้ ดึงค่าแบบไดนามิก และตรวจสอบการเปลี่ยนเส้นทาง |
| หลังจากนั้นเบราว์เซอร์จะออฟไลน์ | มันยังคงชี้ไปยังพร็อกซีท้องถิ่นที่หยุดทำงานอยู่ | คืนค่าการตั้งค่าอัตโนมัติหรือการตั้งค่าที่ไม่ใช้พร็อกซี |
| ข้อผิดพลาดหน่วยความจำของ JMeter | ตัวรับฟัง GUI หรือพื้นที่จัดเก็บการตอบสนองขนาดใหญ่ | ใช้โหมดที่ไม่ใช่ GUI และจำกัดจำนวนข้อมูลการตอบกลับที่บันทึกไว้ |
| แตกต่างจากเบราว์เซอร์ | JMeter ไม่แสดงผลหรือเรียกใช้ JavaScript ของหน้าเว็บ | ทดสอบ API พื้นฐานและใช้เครื่องมือของเบราว์เซอร์ในการแสดงผลเมตริก |
JMeter เป็นเครื่องมือวัดประสิทธิภาพโปรโตคอล ไม่สามารถวัดเหตุการณ์ด้านภาพ เช่น Largest Contentful Paint ได้ด้วยตัวเอง
คำถามที่พบบ่อย
ใน JMeter ชื่อ HTTP Proxy Server ถูกแทนที่ด้วยอะไร?
ขณะนี้ส่วนประกอบดังกล่าวมีชื่อว่า HTTP(S) Test Script Recorder
ฉันควรใช้พอร์ตบันทึกเสียงใด
พอร์ตท้องถิ่นใดก็ได้ที่ไม่ได้ใช้งานก็ใช้ได้ พอร์ต 8888 เป็นพอร์ตที่ใช้กันทั่วไป และเบราว์เซอร์ต้องใช้ค่าเดียวกัน
JMeter สามารถบันทึกการรับส่งข้อมูล HTTPS ได้หรือไม่?
ใช่ เมื่อเบราว์เซอร์ทดสอบที่แยกต่างหากเชื่อถือใบรับรองการบันทึกชั่วคราวของ JMeter แล้ว
เหตุใดสคริปต์ที่บันทึกไว้จึงเล่นซ้ำไม่ได้?
โทเค็นแบบไดนามิก คุกกี้ กระบวนการตรวจสอบสิทธิ์ ความแตกต่างของโฮสต์ และข้อมูลที่ขาดหายไป มักต้องอาศัยการเชื่อมโยงและการกำหนดพารามิเตอร์
JMeter สามารถบันทึกการทำงานของ Chrome ได้หรือไม่?
ใช่แล้ว ตั้งค่าโปรไฟล์ Chrome ที่สะอาดหมดจดเพื่อใช้ตัวบันทึกข้อมูลในเครื่องของ JMeter
ฉันควรทำการทดสอบโหลดผ่าน GUI ของ JMeter หรือไม่?
ไม่ครับ สร้างและดีบักในโหมด GUI ก่อน จากนั้นจึงเรียกใช้ฟังก์ชันโหลดในโหมดที่ไม่ใช่ GUI
JMeter ทำงานเหมือนเบราว์เซอร์จริงหรือไม่?
ไม่ มันส่งคำขอโปรโตคอล แต่ไม่ได้แสดงผล HTML หรือเรียกใช้ JavaScript ของเบราว์เซอร์
การบันทึกการเข้าสู่ระบบในระบบการผลิตนั้นปลอดภัยหรือไม่?
ควรเลือกใช้บัญชีสำหรับทดสอบและใช้งานในสภาพแวดล้อมจำลอง การบันทึกข้อมูลในสภาพแวดล้อมใช้งานจริงต้องได้รับการอนุญาตอย่างชัดเจนและมีการจัดการความลับอย่างเข้มงวด
