โปรเซสเซอร์ใน JMeter: ตัวประมวลผลล่วงหน้า & ตัวประมวลผลภายหลัง

⚡ สรุปอย่างชาญฉลาด

โปรเซสเซอร์ใน JMeter แก้ไขคำขอ Sampler ก่อนหรือหลังการดำเนินการ PreProcessor จะเตรียมข้อมูลคำขอ ในขณะที่ PostProcessor จะดำเนินการtracค่า ts และการควบคุมขั้นตอนการทดสอบ ช่วยให้สามารถเชื่อมโยงข้อมูล กำหนดพารามิเตอร์แบบไดนามิก และสร้างพฤติกรรมการทดสอบประสิทธิภาพที่เชื่อถือได้

  • ⚙️ คำจำกัดความหลัก: ตัวประมวลผลจะแก้ไข Sampler ภายในขอบเขตการทำงานของตน โดยจะดำเนินการก่อนการร้องขอหรือหลังการตอบกลับ
  • 🔍 บทบาทของพรีโปรเซสเซอร์: ตัวประมวลผลล่วงหน้าจะตั้งค่าตัวแปรและเขียนทับใหม่ URLประมวลผลลิงก์ HTML และใช้พารามิเตอร์ของผู้ใช้ก่อนที่ Sampler จะเริ่มทำงาน
  • 📤 บทบาทของตัวประมวลผลหลังการประมวลผล: ตัวประมวลผลหลังการอ่านจะอ่านการตอบสนอง เช่นtracแปลงค่าไดนามิกเป็นตัวแปร และตัดสินใจว่าการทดสอบที่กำลังดำเนินอยู่จะดำเนินต่อไปหรือไม่
  • 🧩 Extracการเลือก tor: นิพจน์ปกติ (Regular Expression), ขอบเขต (Boundary), JSON, CSS/jQuery และ XPath เป็นต้นtracแต่ละตัวเลือกเหมาะกับรูปแบบการตอบกลับที่แตกต่างกัน
  • 🛑 การควบคุมการไหล: ตัวจัดการสถานะผลลัพธ์จะหยุดการทำงานของเธรดหนึ่งเธรดหรือการทดสอบทั้งหมดเมื่อ Sampler ล้มเหลว
  • 🧪 ตัวอย่างการใช้งาน: หกขั้นตอนในการสร้างแผนที่จะหยุดการทำงานโดยอัตโนมัติเมื่อเส้นทางที่ไม่ถูกต้องส่งผลให้เกิดข้อผิดพลาดจากเซิร์ฟเวอร์

โปรเซสเซอร์ใน JMeter

โปรเซสเซอร์ใน Apache JMeter เป็นองค์ประกอบในแผนการทดสอบที่แก้ไข Sampler ภายในขอบเขตของมัน โดยจะทำงานโดยอัตโนมัติ ก่อนที่คำขอจะถูกส่งออกไป JMeter หรือทันทีหลังจากได้รับคำตอบ ซึ่งทำให้เป็นกลไกหลักในการจัดการข้อมูลแบบไดนามิกในระหว่างนั้น การทดสอบประสิทธิภาพ.

โปรเซสเซอร์มี 2 ประเภท:

  1. พรีโปรเซสเซอร์
  2. โพสต์โปรเซสเซอร์

ขอบเขตการทำงานจะกำหนดว่าโปรเซสเซอร์สามารถประมวลผลได้ไกลแค่ไหน โปรเซสเซอร์ที่วางอยู่ใต้...โดยตรง แผนการทดสอบ หรือ Thread Group จะมีผลกับ Sampler ทุกตัวที่อยู่ด้านล่าง ในขณะที่ Processor ที่ซ้อนอยู่ภายใน Sampler เดียวจะมีผลเฉพาะกับคำขอ1นั้นเท่านั้น การเข้าใจกฎนี้จะช่วยป้องกันข้อผิดพลาดในการกำหนดค่าที่กล่าวถึงในส่วนการแก้ไขปัญหาของหน้านี้

พรีโปรเซสเซอร์

พรีโปรเซสเซอร์ดำเนินการบางอย่าง ก่อน ทำการร้องขอตัวอย่าง

ลองพิจารณาตัวอย่างง่ายๆ: สมมติว่าคุณต้องการ JMeter สู่ “สไปเดอร์” ผ่านทางเว็บไซต์ที่ทดสอบ วิเคราะห์คำ ลิงค์(ตรวจสอบลิงค์ทั้งหมดในหน้า) และ กลับ HTML คุณจะต้องเพิ่มการดำเนินการบางอย่าง เช่น “ตัวแยกวิเคราะห์ลิงก์ HTML” ลงในตัวควบคุมของคุณก่อนที่จะสร้างคำขอ HTTP

พรีโปรเซสเซอร์

แผนภาพด้านบนแสดงให้เห็นว่าตัวประมวลผลล่วงหน้า (Pre-processor) อยู่ระหว่างตัวควบคุม (Controller) และคำขอขาออก เนื่องจากมันทำงานก่อน จึงเป็นตำแหน่งที่เหมาะสมที่สุดในการสร้างข้อมูลคำขอ เช่น การสร้างการประทับเวลา การอ่านค่าจากคอลัมน์ CSV การเขียนตัวระบุเซสชันใหม่ลงใน... URLหรือการกำหนดข้อมูลประจำตัวที่แตกต่างกันให้กับผู้ใช้เสมือนแต่ละราย

โพสต์โปรเซสเซอร์

โพสต์โปรเซสเซอร์ดำเนินการบางอย่างหลังจากทำการร้องขอตัวอย่าง

ลองพิจารณาตัวอย่างง่ายๆ: JMeter ส่งคำขอ HTTP ไปยังเว็บเซิร์ฟเวอร์ภายใต้การทดสอบ (ฯลฯ www.google.com) และรับการตอบกลับ คุณต้องการ JMeter เพื่อหยุดการทดสอบหากการตอบสนองจากเซิร์ฟเวอร์เป็นข้อผิดพลาด คุณสามารถใช้ตัวประมวลผลหลังการทดสอบ (post-processor) เพื่อดำเนินการข้างต้นได้ดังนี้:

โพสต์โปรเซสเซอร์

ดังที่แผนภาพที่สองแสดงให้เห็น ตัวประมวลผลหลังการทำงาน (Post-processor) จะอ่านการตอบกลับหลังจากที่ตัวสุ่มตัวอย่าง (Sampler) ทำงานเสร็จสิ้น นี่เป็นคำตอบมาตรฐานสำหรับความสัมพันธ์เช่นกัน เมื่อเซิร์ฟเวอร์ส่งโทเค็น รหัสเซสชัน หรือหมายเลขคำสั่งซื้อที่เปลี่ยนแปลงในทุกครั้งที่ทำงาน ตัวประมวลผลหลังการทำงานจะบันทึกค่าเหล่านั้นลงใน JMeter ตัวแปรนี้จะช่วยให้ Sampler ตัวถัดไปสามารถนำไปใช้ซ้ำได้

ประเภทของพรีโปรเซสเซอร์ใน JMeter

Apache JMeter มาพร้อมกับชุดพรีโปรเซสเซอร์ขนาดกะทัดรัด แต่ละตัวจะเตรียมตัวอย่าง (Sampler) ในรูปแบบที่แตกต่างกัน ดังนั้นการเลือกองค์ประกอบที่เหมาะสมจะช่วยให้แผนการทดสอบอ่านง่ายและบำรุงรักษาได้ง่าย

  • ตัวอย่างการหมดเวลา: กำหนดระยะเวลาสูงสุดสำหรับการร้องขอ หาก Sampler ตัวใดทำงานนานกว่าค่าที่กำหนดไว้ จะถูกทำเครื่องหมายว่าล้มเหลว
  • พารามิเตอร์ผู้ใช้: กำหนดค่าเฉพาะให้กับตัวแปรสำหรับผู้ใช้เสมือนแต่ละราย ดังนั้นแต่ละเธรดจึงส่งชุดข้อมูลของตนเอง
  • ตัวแยกวิเคราะห์ลิงก์ HTML: โปรแกรมจะสแกนหน้าเว็บที่กำลังทดสอบ วิเคราะห์ลิงก์ที่พบ และส่งข้อมูลเหล่านั้นไปยังคำขอ HTTP ต่อไปนี้
  • HTTP URL ตัวแก้ไขการเขียนใหม่: แทรกตัวระบุเซสชันเข้าไปใน URL สำหรับแอปพลิเคชันที่ track เซสชันโดยไม่ใช้คุกกี้
  • พารามิเตอร์ผู้ใช้ RegEx: กำหนดค่าพารามิเตอร์คำขอโดยใช้ค่าที่ได้จากนิพจน์ปกติ (regular expression) จากการตอบกลับก่อนหน้านี้
  • ตัวประมวลผลล่วงหน้า JDBC: รันคำสั่ง SQL ก่อนเรียกใช้ Sampler ซึ่งมีประโยชน์สำหรับการเพิ่มหรือรีเซ็ตข้อมูลในฐานข้อมูล
  • ตัวประมวลผลล่วงหน้า JSR223: ดำเนินการ a Groovy or Java สคริปต์สำหรับตรรกะการเตรียมการแบบกำหนดเองใดๆ ก็ได้ มันมาแทนที่ BeanShell PreProcessor รุ่นเก่า และทำงานได้ดีขึ้นอย่างมากภายใต้ภาระงานหนัก

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

ประเภทของตัวประมวลผลหลังการประมวลผลใน JMeter

โปรแกรมประมวลผลภาพหลังการประมวลผล (PostProcessors) แบ่งออกเป็นสองกลุ่ม: ตัวอย่างเช่นtracส่วนประกอบที่ดึงค่าออกมาจากผลลัพธ์ และตัวจัดการที่ตอบสนองต่อผลลัพธ์ของ Sampler ตารางด้านล่างจะจับคู่แต่ละองค์ประกอบกับรูปแบบการตอบสนองที่เหมาะสมที่สุด

โปรเซสเซอร์หลัง เหมาะที่สุดสำหรับ การใช้งานทั่วไป
นิพจน์ปกติ ExtracTor การตอบกลับข้อความใดๆ การดึงโทเค็นหรือรหัสประจำตัวจาก HTML และข้อความธรรมดา
ขอบเขต ExtracTor การตอบกลับข้อความใดๆ การจับค่าโดยใช้ขอบเขตด้านซ้ายและด้านขวาแทนการใช้ regular expression แบบเต็มรูปแบบ
เจซอนเอ็กซ์tracTor การตอบสนองแบบ JSON การอ่านฟิลด์จากเพย์โหลด REST ระหว่าง การทดสอบ API
CSS/jQuery ตัวอย่างtracTor การตอบกลับ HTML การเลือกองค์ประกอบโดยใช้ตัวเลือก CSS
XPath ExtracTor การตอบสนอง XML และ XHTML การนำทางในโครงสร้างเอกสารแบบต้นไม้
ตัวประมวลผลหลัง JDBC ผลลัพธ์จากฐานข้อมูล ตรวจสอบหรือล้างข้อมูลแถวหลังจากการร้องขอ
JSR223 ตัวประมวลผลหลัง การตอบสนองใดๆ การแยกวิเคราะห์และการยืนยันที่เขียนสคริปต์แบบกำหนดเอง
ตัวจัดการการดำเนินการสถานะผลลัพธ์ การตอบสนองใดๆ หยุดping เธรดหรือการทดสอบทั้งหมดจะหยุดชะงักเมื่อ Sampler ล้มเหลว

ขอบเขต Extracทอร์มาถึงแล้ว JMeter 4.0 และมักเป็นตัวเลือกที่เร็วที่สุดในการเขียน เพราะมันถามเฉพาะข้อความที่อยู่ทางซ้ายและขวาของค่าเท่านั้น นิพจน์ปกติ (Regular Expression Ex)tractor ยังคงเป็นตัวเลือกที่ยืดหยุ่นกว่าเมื่อรูปแบบการจัดรูปแบบโดยรอบแตกต่างกันไปในแต่ละคำตอบ

ความแตกต่างระหว่างพรีโปรเซสเซอร์และโพสต์โปรเซสเซอร์

องค์ประกอบทั้งสองมีกฎขอบเขตเดียวกัน แต่ใช้แก้ปัญหาที่ตรงกันข้าม การเปรียบเทียบด้านล่างสรุปความแตกต่างก่อนที่จะแสดงตัวอย่างการใช้งาน

พารามิเตอร์ พรีโปรเซสเซอร์ โปรเซสเซอร์หลัง
เวลาดำเนินการ ทำงานก่อนที่ Sampler จะส่งคำขอ ทำงานหลังจากที่ Sampler ได้รับการตอบกลับแล้ว
วัตถุประสงค์หลัก เตรียมและแก้ไขข้อมูลคำขอ อ่านข้อมูลการตอบสนองและตอบสนองต่อข้อมูลนั้น
องค์ประกอบทั่วไป พารามิเตอร์ผู้ใช้, ตัวแยกวิเคราะห์ลิงก์ HTML, ตัวประมวลผลล่วงหน้า JSR223 นิพจน์ปกติ Extracทอร์, JSON Extractor, ตัวจัดการสถานะผลลัพธ์และการดำเนินการ
ผลกระทบต่อการไหล ไม่สามารถหยุดการทดสอบได้ ทำได้เพียงกำหนดรูปแบบคำขอเท่านั้น สามารถหยุดเธรดหรือหยุดการทดสอบทั้งหมดได้
เป้าหมายร่วมกัน การกำหนดพารามิเตอร์ ความสัมพันธ์และการจัดการข้อผิดพลาด

ในทางปฏิบัติ ทั้งสองส่วนทำงานเป็นคู่กัน PostProcessor จะดักจับโทเค็นเซสชันจากผลตอบรับการเข้าสู่ระบบ และ PreProcessor ในคำขอถัดไปจะแทรกโทเค็นนั้นก่อนที่จะส่งคำขอ ตัวอย่างต่อไปนี้แสดงให้เห็นถึงส่วนของ PostProcessor ในรูปแบบดังกล่าว

ตัวอย่างโพสต์โปรเซสเซอร์

บทช่วยสอนนี้จะแสดงคำแนะนำทีละขั้นตอนเกี่ยวกับวิธีใช้ Post-processor JMeter- เริ่มต้นด้วยสคริปต์ทดสอบง่ายๆ

  1. JMeter ส่งคำขอ HTTP ไปยังเว็บเซิร์ฟเวอร์ภายใต้การทดสอบ www.google.com.
  2. JMeter ได้รับการตอบกลับจาก Google เซิร์ฟเวอร์
  3. หากเซิร์ฟเวอร์ตอบสนอง ข้อผิดพลาด, JMeter จะ หยุด การทดสอบ
  4. หากเซิร์ฟเวอร์ตอบสนอง OK (ไม่มีข้อผิดพลาด) JMeter จะ ต่อ การทดสอบ

ที่นี่คือ แผนงาน ของตัวอย่างนี้:

ตัวอย่างโพสต์โปรเซสเซอร์

เงื่อนไขเบื้องต้น:

We กลับมาใช้ ขั้นตอนที่ 1 และขั้นตอนที่ 2 ในบทความ JMeter การทดสอบประสิทธิภาพ. ถ้า JMeter หากยังไม่ได้ติดตั้ง โปรดทำตามขั้นตอนต่อไปนี้ JMeter คู่มือการติดตั้ง ก่อน

ขั้นตอนที่ 1) เพิ่มกลุ่มเธรด

คลิกขวาที่ แผนการทดสอบ และเพิ่มกลุ่มเธรดใหม่: เพิ่ม -> กระทู้ (ผู้ใช้) -> กลุ่มกระทู้

แต่ในแผงควบคุมกลุ่มเธรด ให้ป้อนคุณสมบัติเธรดดังนี้:

เพิ่มกลุ่มเธรด

การตั้งค่านี้ช่วยให้ JMeter สร้าง 10 คำขอของผู้ใช้ไปที่ http://www.google.com 10 ครั้ง

ขั้นตอนที่ 2) เพิ่ม JMeter องค์ประกอบ

  • เพิ่มค่าเริ่มต้นคำขอ HTTP
  • เพิ่มคำขอ HTTP

เรายังคงทำ JMeter ส่งคำร้อง http://www.google.com ไปยัง Google เซิร์ฟเวอร์

ขั้นตอนที่ 3) เพิ่มองค์ประกอบหลังโปรเซสเซอร์

คลิกขวา กลุ่มกระทู้ -> เพิ่ม -> โพสต์โปรเซสเซอร์ -> ตัวจัดการการดำเนินการสถานะผลลัพธ์

ตัวจัดการการดำเนินการสถานะผลลัพธ์ อนุญาตให้ผู้ใช้หยุดเธรดหรือการทดสอบทั้งหมดหากคำขอของผู้ใช้ล้มเหลว

เพิ่มองค์ประกอบหลังโปรเซสเซอร์

ในบานหน้าต่างการจัดการการดำเนินการสถานะผลลัพธ์ ให้เลือก หยุดการทดสอบทันที- การเลือกนี้จะหยุดการทดสอบหาก JMeter รับข้อผิดพลาดจากการตอบกลับของเซิร์ฟเวอร์

เพิ่มองค์ประกอบหลังโปรเซสเซอร์

ขั้นตอนที่ 4) กำหนดค่าคำขอ HTTP

เปิดแผงคำขอ HTTP เข้า “เอบีซี” ไปที่ช่องเส้นทาง

กำหนดค่าคำขอ HTTP

เมื่อคุณป้อน “เอบีซี” สู่เส้นทาง JMeter จะสร้างไฟล์ URL ขอให้ Google เซิร์ฟเวอร์: http://www.google.com/abc. นี้ URL ไม่มีอยู่บน Google เซิร์ฟเวอร์ มันคือ ผิด URL ขอร้องเช่นนั้น Google เซิร์ฟเวอร์จะแสดงข้อผิดพลาด

ขั้นตอนที่ 5) เพิ่มแผนผังผลลัพธ์มุมมอง

คลิกขวา กลุ่มกระทู้ -> เพิ่ม -> ผู้ฟัง -> ดูแผนผังผลลัพธ์

เพิ่มมุมมองผลลัพธ์ต้นไม้

ขั้นตอนที่ 6) เรียกใช้การทดสอบ

เลือก View Result Tree กดปุ่ม Run บนแถบเมนู คุณจะเห็น ความผิดพลาด การตอบสนองจาก Google เซิร์ฟเวอร์และการทดสอบจะหยุดลง โดยไม่ต้องออกไป ครบ 100 กระทู้

เรียกใช้การทดสอบ

ตอนนี้กลับไปที่ขั้นตอนที่ 4 เปิดบานหน้าต่างคำขอ HTTP ป้อน “ปฏิทิน” ไปที่บานหน้าต่าง มันทำ JMeter สร้าง URL ขอ https://calendar.google.com/calendar/u/0/r ไป Google เซิร์ฟเวอร์ นี่คือ แก้ไข URL ขอร้องเช่นนั้น Google เซิร์ฟเวอร์จะส่งข้อความกลับมาว่า OK (ไม่มีข้อผิดพลาด)

เรียกใช้การทดสอบ

เลือก View Result Tree กดปุ่ม Run บนแถบเมนู คุณจะเห็น OK การตอบสนองจาก Google เซิร์ฟเวอร์และการทดสอบจะดำเนินต่อไปจนกว่าเธรดทั้ง 100 เธรดจะทำงานเสร็จสมบูรณ์

เรียกใช้การทดสอบ

กำลังเพิ่ม การยืนยัน นอกจากนี้ ตัวจัดการการดำเนินการสถานะผลลัพธ์ (Result Status Action Handler) ยังทำให้การตรวจสอบเข้มงวดมากขึ้น เนื่องจากเงื่อนไขการยืนยันอาจล้มเหลวสำหรับ Sampler ที่ส่งคืน HTTP 200 แต่ส่งเนื้อหาที่ไม่ถูกต้อง

การแก้ไขปัญหา

หากคุณประสบปัญหาขณะดำเนินการตามสถานการณ์ข้างต้น … ให้ทำดังต่อไปนี้:

  1. ตรวจสอบว่าคุณเชื่อมต่ออินเทอร์เน็ตผ่านพรอกซีหรือไม่ ถ้าใช่ ให้ลบพรอกซีออก
  2. เปิดอินสแตนซ์ใหม่ของ Jmeter
  3. เปิด ตัวประมวลผล TestPlan.jmx ใน Jmeter
  4. Double- คลิกที่กลุ่มเธรด -> ดูแผนผังผลลัพธ์
  5. เรียกใช้การทดสอบ

หาก Post-processor ดูเหมือนจะไม่ทำงาน ให้ตรวจสอบตำแหน่งของมันก่อน Post-processor ที่วางอยู่นอกขอบเขตของ Sampler ที่มันกำหนดเป้าหมายจะไม่ทำงาน ซึ่งเป็นสาเหตุที่พบบ่อยที่สุดที่ทำให้ไฟล์ ex ว่างเปล่าtracตัวแปร ted องค์ประกอบที่เกี่ยวข้อง เช่น ตัวควบคุม และ การทดสอบแบบกระจาย ใช้ตรรกะขอบเขตเดียวกัน

คำถามที่พบบ่อย

ตัวประมวลผลล่วงหน้า (PreProcessor) จะเปลี่ยนแปลงเนื้อหาของคำขอ ก่อนที่จะส่ง ส่วนตัวจับเวลา (Timer) จะหยุดการทำงานของเธรดชั่วคราวตามช่วงเวลาที่กำหนด ทั้งสองอย่างทำงานก่อนตัวสุ่มตัวอย่าง (Sampler) แต่ตัวจับเวลาจะไม่แก้ไขข้อมูลคำขอเลย

อดีตtractor บันทึกค่าลงใน JMeter ชื่อตัวแปรที่คุณกำหนด Sampler ตัวถัดไปในเธรดเดียวกันจะอ้างอิงถึงตัวแปรนี้ด้วยไวยากรณ์ ${variableName} ในพาธ ส่วนหัว หรือส่วนเนื้อหาของคำขอ

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

ใช่แล้ว ผู้ช่วย AI จะเปรียบเทียบคำตอบดิบกับผลลัพธ์ที่ได้มาtracการแสดงออกของ tor และชี้ให้เห็นความไม่ตรงกันใน escapingกรูpingหรือขอบเขต ตรวจสอบการแก้ไขภายใน View Results Tree ก่อนที่จะเชื่อถือในการทดสอบการโหลด

โปรเซสเซอร์จะทำงานหนึ่งครั้งต่อการเรียกใช้ Sampler แต่ละครั้งภายในขอบเขตของมัน ด้วยเธรดสิบเธรดping เมื่อทำซ้ำห้าครั้ง โปรเซสเซอร์ที่เชื่อมต่อกับ Sampler นั้นจะประมวลผลห้าสิบครั้ง และแต่ละเธรดจะเก็บค่าตัวแปรของตนเองไว้

สรุปโพสต์นี้ด้วย: