ตัวอย่างความสัมพันธ์ใน LoadRunner กับ web_reg_save_param
⚡ สรุปอย่างชาญฉลาด
ฟังก์ชัน Correlation ใน LoadRunner จะดึงค่าแบบไดนามิกจากเซิร์ฟเวอร์ เช่น รหัสเซสชัน และส่งค่าดังกล่าวกลับไปยังคำขอในภายหลัง เพื่อให้สคริปต์ VuGen ที่บันทึกไว้สามารถเล่นซ้ำได้อย่างสำเร็จ แทนที่จะล้มเหลวเนื่องจากข้อมูลที่ล้าสมัย
ความสัมพันธ์คืออะไร?
ความสัมพันธ์เชิงสถิติ (Correlation) ตามชื่อที่บ่งบอก คือกลไกในการกำหนดความสัมพันธ์ระหว่างตัวแปรหรือสิ่งต่างๆ สองอย่าง พจนานุกรมให้คำจำกัดความว่า “ความสัมพันธ์ทางสถิติระหว่างตัวแปรสองตัวขึ้นไป โดยที่การเปลี่ยนแปลงอย่างเป็นระบบในอีกตัวแปรหนึ่ง จะมาพร้อมกับการเปลี่ยนแปลงอย่างเป็นระบบในค่าของตัวแปรหนึ่ง”
หมายเหตุเกี่ยวกับแบรนด์: เครื่องมือนี้ถูกจัดส่งในชื่อ HP แล้วต่อมา Micro Focus LoadRunnerและตอนนี้ OpenText วิศวกรรมประสิทธิภาพระดับมืออาชีพฟังก์ชันความสัมพันธ์ทั้งหมดด้านล่างยังคงไม่เปลี่ยนแปลง และผู้ขายได้สะกดชื่อผู้สร้างสคริปต์ไว้แล้ว วูเจน.
ทำไมเราถึงต้องการความสัมพันธ์?
เรามาทำความเข้าใจความสัมพันธ์เชิงสถิติด้วยสถานการณ์ต่อไปนี้กัน
ลองนึกภาพว่าคุณกำลังบันทึกสคริปต์โดยใช้... โหลดรันเนอร์.
การสื่อสารระหว่างไคลเอ็นต์และเซิร์ฟเวอร์ในระหว่างการบันทึกดำเนินไปดังนี้ ซึ่งแผนภาพได้สรุปไว้แล้ว:
- ในระหว่างการบันทึกข้อมูล ไคลเอนต์จะส่งคำขอไปยังเซิร์ฟเวอร์เพื่อเริ่มต้นเซสชัน
- เซิร์ฟเวอร์ได้รับการร้องขอและจัดสรร ID เซสชัน ABC ใหม่
- ลูกค้าเก็บรหัสเซสชั่น ABC ไว้ในสคริปต์
- ไคลเอนต์เริ่มต้นเซสชันด้วยรหัสประจำตัว ABC และส่งคำขอไปยังเซิร์ฟเวอร์เพื่อขออนุญาตบันทึก
- เซิร์ฟเวอร์รู้จัก ID ABC และอนุญาตให้ไคลเอนต์บันทึกสคริปต์
ต่อไปนี้ เราจะมาศึกษาการสื่อสารระหว่างไคลเอ็นต์และเซิร์ฟเวอร์ในระหว่างการเล่นซ้ำ ซึ่งแสดงให้เห็นหลังจากขั้นตอนเหล่านี้:
- ในระหว่างการเล่นซ้ำ ไคลเอนต์จะส่งคำขอไปยังเซิร์ฟเวอร์เพื่อเริ่มเซสชัน
- เซิร์ฟเวอร์ได้รับการร้องขอและจัดสรร ID เซสชันใหม่ XYZ
- ไคลเอนต์เริ่มต้นเซสชันด้วยรหัสเซสชันที่บันทึกไว้ก่อนหน้านี้คือ ABC และส่งคำขอไปยังเซิร์ฟเวอร์เพื่อขออนุญาตบันทึก
- เซิร์ฟเวอร์ไม่สามารถระบุ ID ABC ได้เนื่องจากคาดว่าจะมี ID XYZ ที่ได้รับการจัดสรรและเซสชันล้มเหลว
เราต้องการโซลูชันที่สามารถดักจับและวิเคราะห์ค่าแบบไดนามิกที่ส่งมาในระหว่างการทำงาน และส่งค่านี้กลับไปยังเซิร์ฟเวอร์ แผนภาพด้านล่างแสดงให้เห็นถึงลักษณะการสื่อสารระหว่างไคลเอ็นต์และเซิร์ฟเวอร์ด้วยโซลูชันนี้:
- ในระหว่างการเล่นซ้ำ ไคลเอนต์จะส่งคำขอไปยังเซิร์ฟเวอร์เพื่อเริ่มเซสชัน
- เซิร์ฟเวอร์ได้รับการร้องขอและจัดสรร ID เซสชัน ZZZ ใหม่
- ลูกค้าแยกวิเคราะห์เซสชันใหม่ ID ZZZ จากคำขอ
- ลูกค้าส่งคำขอเพื่อเริ่มเซสชันด้วย id ZZZ
- เซิร์ฟเวอร์รู้จัก ID ZZZ และอนุญาตให้ไคลเอนต์เล่นสคริปต์ซ้ำ
นี่ไม่มีอะไรนอกจาก ความสัมพันธ์.
วิดีโอสั้นด้านล่างนี้จะอธิบายปัญหาการบันทึกและเล่นซ้ำแบบเดียวกัน
คลิก Good Farm Animal Welfare Awards หากไม่สามารถเข้าถึงวิดีโอได้
ในกรณีของ VuGen ความสัมพันธ์หมายถึงความเชื่อมโยงระหว่างการตอบกลับและคำขอใดๆ ที่มาก่อนหน้านี้
มีหลายสถานการณ์ที่การร้องขอขึ้นอยู่กับการตอบกลับที่ได้รับก่อนหน้านี้จากเซิร์ฟเวอร์ เช่น รหัสเซสชัน หรือวันที่และเวลาของเซิร์ฟเวอร์ ซึ่งค่าเหล่านี้จะแตกต่างกันทุกครั้งที่คุณเรียกใช้แอปพลิเคชันหรือบันทึกสคริปต์ เห็นได้ชัดว่า หากการทำงานของสคริปต์ขึ้นอยู่กับค่าที่ส่งกลับมาจากเซิร์ฟเวอร์ นั่นหมายความว่าคุณจำเป็นต้องหาวิธีการที่จะ "ดักจับ" การตอบกลับจากเซิร์ฟเวอร์และแนบไปกับการร้องขอที่เซิร์ฟเวอร์คาดหวัง ซึ่งโดยทั่วไปเรียกว่า Correlation ใน LoadRunner
พูดง่ายๆ ก็คือ วิธีแก้ปัญหาโดยใช้ Correlation คือ:
- จับค่าเอาต์พุตจากขั้นตอน
- ใช้ค่าที่บันทึกไว้ข้างต้นเพื่อใช้เป็นอินพุตสำหรับขั้นตอนต่อๆ ไปทั้งหมด
ใน VuGen/LoadRunner ความสัมพันธ์ถูกแบ่งออกเป็น 2 ประเภท:
- ความสัมพันธ์อัตโนมัติ
- ความสัมพันธ์ด้วยตนเอง
ความสัมพันธ์อัตโนมัติ
LoadRunner มีกลไกในการสร้างความสัมพันธ์โดยอัตโนมัติได้อย่างง่ายดาย
VuGen จะขอให้คุณเรียกใช้สคริปต์ที่บันทึกไว้อย่างน้อยสองครั้ง เพื่อให้ระบบสามารถเปรียบเทียบค่าต่างๆ ในการตอบสนองจากเซิร์ฟเวอร์ได้ภายใน
ความสัมพันธ์อัตโนมัติสามารถแบ่งได้เป็น 3 ประเภท:
- ตรวจจับความสัมพันธ์อัตโนมัติ
- ความสัมพันธ์ตามกฎเกณฑ์
- การเชื่อมโยงข้อความทั้งหมด
| ชื่อกฎ | ควรใช้เมื่อใด |
| ตรวจจับความสัมพันธ์อัตโนมัติ | ตรวจจับและเชื่อมโยงข้อมูลแบบไดนามิกสำหรับเซิร์ฟเวอร์แอปพลิเคชันที่รองรับโดย LoadRunner |
| ตามกฎเกณฑ์ | ใช้เมื่อทำงานกับแอปพลิเคชันเซิร์ฟเวอร์ที่ไม่รองรับซึ่งทราบบริบท |
| สัมพันธ์กันทั้งหมด | ช่วยเชื่อมโยงข้อมูลไดนามิกทั้งหมดในลักษณะที่ไม่เปิดเผย |
แม้ว่าความสัมพันธ์อัตโนมัติจะดูง่ายกว่า แต่ก็อาจเกิดข้อผิดพลาดได้ง่ายและทำงานได้ไม่เกิน 5% ของกรณี ขอแนะนำให้ใช้ความสัมพันธ์แบบแมนนวลเสมอ
หากต้องการกำหนดค่าความสัมพันธ์อัตโนมัติในขณะที่บันทึก ให้ดำเนินการกำหนดค่าด้านล่างในการตั้งค่าเวลาบันทึกหลังจากบันทึกสคริปต์แล้ว
คลิกที่ บันทึก => ตัวเลือกการบันทึก (หรือกด Ctrl + F7) ตามที่แสดงในเมนูด้านล่าง
หน้าต่างด้านล่างจะเปิดขึ้น:
คลิกที่ Correlation =>Configuration – หน้าต่างด้านล่างจะเปิดขึ้น
ที่นี่ คุณจะต้องทำเครื่องหมายว่าเลือกแล้วกับแอปพลิเคชันทั้งหมด (ASPNET) ฯลฯ ที่ใช้ในใบสมัครเรื่องของคุณ ทางด้านขวามือ คุณจะเห็นกฎที่จะตรวจจับตัวเลือกที่เป็นไปได้สำหรับความสัมพันธ์ เช่น _VIEWSTATE คุณยังสามารถเพิ่มแอปพลิเคชันเพิ่มเติมหรือกฎที่กำหนดเองได้โดยคลิกที่ปุ่มกฎใหม่
คุณยังสามารถคลิกที่ กฎ คุณจะเห็นดังต่อไปนี้:
เพื่อให้ฟังก์ชันการหาความสัมพันธ์อัตโนมัติทำงานได้ คุณต้องตรวจสอบให้แน่ใจว่าได้เลือกช่องทำเครื่องหมาย "สแกนกฎ" แล้ว หากคุณคลิกที่ "หาความสัมพันธ์โดยอัตโนมัติกับค่าที่พบ" VuGen จะไม่แสดงตัวเลือกให้คุณอีกครั้งเมื่อพบค่าที่สามารถหาความสัมพันธ์ได้ แต่จะทำการหาความสัมพันธ์ให้โดยอัตโนมัติ
เราจะมาทำความเข้าใจเกี่ยวกับ API ที่ใช้ในการหาความสัมพันธ์กันในภายหลัง อย่างไรก็ตาม แนะนำให้ใช้การเปรียบเทียบ HTML แทนการเปรียบเทียบข้อความ
เมื่อคุณเลือกกฎใดๆ แล้ว ให้คลิกปุ่มตกลงเพื่อปิดหน้าต่าง
คลิกที่ปุ่มบนแถบเครื่องมือที่แสดงอยู่ตรงนี้ จากเมนู VuGen จะสร้างสคริปต์ขึ้นใหม่ (โดยไม่ต้องบันทึกซ้ำ) ด้วยการตั้งค่าใหม่ VuGen จะเพิ่มโค้ดที่จำเป็นเพื่อจัดการความสัมพันธ์โดยอัตโนมัติ เราจะมาดูตัวอย่างโดยละเอียดเพิ่มเติมในหัวข้อ การหาความสัมพันธ์ด้วยตนเอง
โปรดทราบว่า หากคุณดำเนินการเชื่อมโยงด้วยตนเองหรือใช้ความสัมพันธ์อัตโนมัติ ส่วนของโค้ดจะมีไวยากรณ์และฟังก์ชันที่เหมือนกันทุกประการ
ขั้นตอนในการเชื่อมโยงสคริปต์อัตโนมัติ:
- บันทึกสคริปต์
- เล่นซ้ำสคริปต์
- ระบุค่าที่จะสัมพันธ์กัน
- เลือกค่าและคลิกปุ่มเชื่อมโยงอัตโนมัติ
- ตรวจสอบสคริปต์โดยการรันอีกครั้ง การวิ่งที่ประสบความสำเร็จหมายถึงความสัมพันธ์ที่ประสบความสำเร็จ
เคล็ดลับ:
- สหสัมพันธ์ช่วยเรียกใช้สคริปต์ของคุณด้วยค่าที่แตกต่างกัน
- ความสัมพันธ์ยังช่วยลดขนาดของสคริปต์ของคุณด้วย
ความสัมพันธ์แบบแมนนวล
ความสัมพันธ์แบบแมนนวลเป็นเรื่องเกี่ยวกับการเขียนโค้ดลงในสคริปต์ของคุณโดยตรงเพื่อรองรับค่าที่เปลี่ยนแปลงตลอดเวลา เราสามารถแบ่งออกเป็นขั้นตอนด้านล่าง:
- กำหนดค่าที่จะจับ
- ค้นหาขอบเขตข้อความด้านขวาและด้านซ้ายของค่าที่จะจับภาพ (WEB)
- ค้นหาว่าควรใช้ขอบเขตข้อความใด
- เพิ่มฟังก์ชัน web_reg_save_param ให้กับสคริปต์ เหนือส่วนของโค้ดที่ร้องขอหน้าเว็บที่มีค่าที่จะจับภาพ
- เพิ่มชื่อพารามิเตอร์ ขอบเขตด้านซ้าย ขอบเขตด้านขวา และรายการที่เกิดขึ้นให้กับฟังก์ชัน
- กำหนดพารามิเตอร์ของค่าไดนามิกในสคริปต์ทุกครั้งที่เกิดขึ้น
- ตรวจสอบการดำเนินการที่ถูกต้อง
web_reg_save_param (" OracleAppJSESSIONID3", "LB/IC=JSESSIONID=", "RB/IC=;", "Ord=l", "Search=headers", "RelFrameId=l", LAST); web_reg_save_param("Siebel_Analytic_ViewState2", "LB/IC=ViewState\" value=\"", "RB/IC=\"", "Ord=1", "Search=Body", "RelFrameId=l", LAST);
Code บันทึกย่อ: ทั้งสองส่วนปรากฏตรงตามที่เผยแพร่ไว้ทุกประการ โปรดตรวจสอบลำดับ: ลำดับ = 1 และ เฟรมอ้างอิง=l ใช้ตัวอักษร L ตัวเล็ก และ VuGen คาดหวังตัวเลข 1
ความสัมพันธ์แบบแมนนวลสามารถทำได้โดยการเปรียบเทียบ VUser ขั้นตอนในวิธีการเปรียบเทียบ VUser ของ Correlation สามารถแบ่งได้ดังนี้
- ระบุค่าไดนามิกที่ต้องมีความสัมพันธ์กัน
- ค้นหาการตอบสนองจากเซิร์ฟเวอร์ที่มีค่าแบบไดนามิก
- บันทึกค่าไดนามิกในพารามิเตอร์
- แทนที่ค่าไดนามิกที่เกิดขึ้นทุกครั้งด้วยพารามิเตอร์
- ตรวจสอบการเปลี่ยนแปลง
ทำความเข้าใจฟังก์ชัน web_reg_save_param
VuGen มีฟังก์ชันหรือ API หลายตัวที่ใช้ในการเชื่อมโยงผู้สมัคร รวมถึง:
- web_reg_save_param
- web_reg_save_param_ex
- web_reg_save_param_regexp
- web_reg_save_param_xpath
หมายเหตุเกี่ยวกับเวอร์ชัน: เวอร์ชัน VuGen ปัจจุบันรองรับ... web_reg_save_param_ex ในฐานะผู้สืบทอดหน้าที่เดิม และ web_reg_save_param_regexp เป็นทางเลือกเมื่อขอบเขตเปลี่ยนแปลงไป ตัวอย่างเดิมยังคงใช้ได้อยู่
แม้ว่านี่จะเป็นการแนะนำโดยสังเขป แต่เพื่อให้เข้าใจฟังก์ชันและพารามิเตอร์อย่างละเอียด โปรดเปิด VuGen พิมพ์ฟังก์ชัน (หรือใช้ Steps Toolbox) เลื่อนเคอร์เซอร์ไปที่ฟังก์ชันแล้วคลิก F1 – เพื่อทำความคุ้นเคยกับมัน VuGen ช่วยเหลือ และทำให้เป็นนิสัย คุณจะต้องเจอกับเรื่องนี้บ่อยๆ เมื่อทำงานในอุตสาหกรรมนี้
เรามาดูรายละเอียดฟังก์ชั่นกัน:
web_reg_save_param(ชื่อพารามิเตอร์ , ขอบเขตด้านซ้าย , ขอบเขตด้านขวา )
รายการคุณสมบัติ
ตารางด้านล่างนี้รวบรวมคุณสมบัติทั้งหมดที่ฟังก์ชันยอมรับ ไม่ว่าจะเป็นคุณสมบัติที่จำเป็นหรือไม่ และคุณสมบัตินั้นควบคุมอะไรบ้าง
| คุณลักษณะ | ต้อง? | สิ่งที่มันไม่ |
| แปลง | สามารถเลือกหรือไม่เลือกก็ได้ | HTML_TO_URL แปลงข้อมูลที่เข้ารหัส HTML เป็น URLรูปแบบข้อมูลที่เข้ารหัส HTML_TO_TEXT จะแปลงข้อมูลที่เข้ารหัส HTML ให้เป็นรูปแบบข้อความธรรมดา |
| ละเว้นการเปลี่ยนเส้นทาง | ตัวเลือกเสริม ค่าเริ่มต้นคือ “ละเว้นการเปลี่ยนเส้นทาง = ไม่” | เมื่อตั้งค่าเป็น ใช่ และการตอบกลับจากเซิร์ฟเวอร์เป็นข้อมูลการเปลี่ยนเส้นทาง (รหัสสถานะ HTTP 300-303, 307) การค้นหาจะไม่เกิดขึ้น คำขอ GET จะถูกส่งไปยังตำแหน่งที่เปลี่ยนเส้นทาง และการค้นหาจะทำงานกับข้อมูลที่ได้รับจากการตอบกลับที่นั่น |
| LB | ต้อง | ขอบเขตด้านซ้ายของพารามิเตอร์หรือข้อมูลแบบไดนามิก หากคุณไม่ได้ระบุค่า LB ระบบจะใช้ตัวอักษรทั้งหมดตั้งแต่ต้นข้อมูลเป็นขอบเขต พารามิเตอร์ขอบเขตนั้นคำนึงถึงตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก หากต้องการปรับแต่งข้อความค้นหาเพิ่มเติม ให้ใช้แฟล็กข้อความอย่างน้อยหนึ่งรายการ |
| ไม่พบ | ตัวเลือกเสริม ค่าเริ่มต้นคือ “ข้อผิดพลาด” | การจัดการเมื่อไม่พบขอบเขตและสร้างสตริงว่าง “Not found=error” จะทำให้เกิดข้อผิดพลาด “Not found=warning” (“Not found=empty” ในเวอร์ชันก่อนหน้า) จะตั้งค่าจำนวนพารามิเตอร์เป็น 0 และดำเนินการต่อ ซึ่งเหมาะอย่างยิ่งเมื่อคุณต้องการตรวจสอบว่าพบสตริงหรือไม่โดยไม่ทำให้สคริปต์ล้มเหลว เมื่อเปิดใช้งาน Continue on Error สคริปต์จะทำงานต่อไปแม้ภายใต้เงื่อนไข “error” แต่บันทึกเพิ่มเติมจะบันทึกไว้ด้วย |
| ORD | ตัวเลือกเสริม ค่าเริ่มต้นคือ 1 | ระบุลำดับที่หรือลำดับการตรงกัน หากคุณระบุ “ทั้งหมด” ระบบจะบันทึกค่าพารามิเตอร์ลงในอาร์เรย์ การใช้ Instance แทน ORD นั้นรองรับเพื่อความเข้ากันได้กับเวอร์ชันเก่า แต่ไม่แนะนำให้ใช้แล้ว |
| RB | ต้อง | ขอบเขตด้านขวาของพารามิเตอร์หรือข้อมูลแบบไดนามิก หากคุณไม่ได้ระบุค่า RB ระบบจะใช้ตัวอักษรทั้งหมดจนถึงจุดสิ้นสุดของข้อมูลเป็นขอบเขต พารามิเตอร์ขอบเขตนั้นคำนึงถึงตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก หากต้องการปรับแต่งข้อความค้นหาเพิ่มเติม ให้ใช้แฟล็กข้อความอย่างน้อยหนึ่งรายการ |
| RelFrameID | สามารถเลือกหรือไม่เลือกก็ได้ | ระดับลำดับชั้นของหน้า HTML เมื่อเทียบกับสิ่งที่ร้องขอ URLค่าที่เป็นไปได้คือ ALL หรือตัวเลข RelFrameID ไม่ได้รับการสนับสนุนในสคริปต์ระดับ GUI |
| บันทึกเลน | ตัวเลือกเสริม ค่าเริ่มต้น -1 | ความยาวของสตริงย่อยของค่าที่พบ โดยเริ่มจากตำแหน่งที่ระบุ เพื่อบันทึกไปยังพารามิเตอร์ ค่าเริ่มต้นจะบันทึกจนถึงท้ายสตริง |
| บันทึกออฟเซ็ต | ตัวเลือกเสริม ค่าเริ่มต้นคือ 0 | ค่าออฟเซ็ตของสตริงย่อยจากค่าที่พบ เพื่อบันทึกไปยังพารามิเตอร์ ค่าออฟเซ็ตต้องไม่ติดลบ |
| ค้นหา | ตัวเลือกเสริม ค่าเริ่มต้นคือ ทั้งหมด | ขอบเขตของการค้นหา — ตำแหน่งที่จะค้นหาข้อมูลที่คั่นด้วยตัวคั่น ค่าที่เป็นไปได้คือ Headers (ค้นหาเฉพาะส่วนหัว), Body (ค้นหาเฉพาะข้อมูลในเนื้อหา ไม่รวมส่วนหัว), No resource (ค้นหาเฉพาะเนื้อหา HTML ไม่รวมส่วนหัวและทรัพยากรทั้งหมด) หรือ ALL (ค้นหาทั้งเนื้อหา ส่วนหัว และทรัพยากร) |
เมื่อสคริปต์เล่นได้อย่างราบรื่นแล้ว ให้เพิ่ม การกำหนดค่าพารามิเตอร์ การทำธุรกรรม และการตั้งค่าขณะทำงานเรียกใช้จาก ตัวควบคุมและอ่านผลลัพธ์ใน การวิเคราะห์ ในฐานะส่วนหนึ่งของขอบเขตที่กว้างขึ้น การทดสอบประสิทธิภาพ และ โหลดการทดสอบ.







