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

โปรเซสเซอร์ใน Apache JMeter เป็นองค์ประกอบในแผนการทดสอบที่แก้ไข Sampler ภายในขอบเขตของมัน โดยจะทำงานโดยอัตโนมัติ ก่อนที่คำขอจะถูกส่งออกไป JMeter หรือทันทีหลังจากได้รับคำตอบ ซึ่งทำให้เป็นกลไกหลักในการจัดการข้อมูลแบบไดนามิกในระหว่างนั้น การทดสอบประสิทธิภาพ.
โปรเซสเซอร์มี 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- เริ่มต้นด้วยสคริปต์ทดสอบง่ายๆ
- JMeter ส่งคำขอ HTTP ไปยังเว็บเซิร์ฟเวอร์ภายใต้การทดสอบ www.google.com.
- JMeter ได้รับการตอบกลับจาก Google เซิร์ฟเวอร์
- หากเซิร์ฟเวอร์ตอบสนอง ข้อผิดพลาด, JMeter จะ หยุด การทดสอบ
- หากเซิร์ฟเวอร์ตอบสนอง 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 เข้า “เอบีซี” ไปที่ช่องเส้นทาง
เมื่อคุณป้อน “เอบีซี” สู่เส้นทาง 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 แต่ส่งเนื้อหาที่ไม่ถูกต้อง
การแก้ไขปัญหา
หากคุณประสบปัญหาขณะดำเนินการตามสถานการณ์ข้างต้น … ให้ทำดังต่อไปนี้:
- ตรวจสอบว่าคุณเชื่อมต่ออินเทอร์เน็ตผ่านพรอกซีหรือไม่ ถ้าใช่ ให้ลบพรอกซีออก
- เปิดอินสแตนซ์ใหม่ของ Jmeter
- เปิด ตัวประมวลผล TestPlan.jmx ใน Jmeter
- Double- คลิกที่กลุ่มเธรด -> ดูแผนผังผลลัพธ์
- เรียกใช้การทดสอบ
หาก Post-processor ดูเหมือนจะไม่ทำงาน ให้ตรวจสอบตำแหน่งของมันก่อน Post-processor ที่วางอยู่นอกขอบเขตของ Sampler ที่มันกำหนดเป้าหมายจะไม่ทำงาน ซึ่งเป็นสาเหตุที่พบบ่อยที่สุดที่ทำให้ไฟล์ ex ว่างเปล่าtracตัวแปร ted องค์ประกอบที่เกี่ยวข้อง เช่น ตัวควบคุม และ การทดสอบแบบกระจาย ใช้ตรรกะขอบเขตเดียวกัน









.gif)

.gif)