ความสัมพันธ์ใน LoadRunner กับตัวอย่าง Web_Reg_Save_Param
ความสัมพันธ์คืออะไร?
ความสัมพันธ์ตามชื่อคือกลไกในการกำหนดความสัมพันธ์ระหว่างตัวแปรหรือเอนทิตีสองตัว พจนานุกรมให้คำนิยามว่าเป็น "ความสัมพันธ์ทางสถิติระหว่างตัวแปรตั้งแต่สองตัวขึ้นไป โดยที่การเปลี่ยนแปลงอย่างเป็นระบบในตัวแปรอื่นๆ มาพร้อมกับการเปลี่ยนแปลงอย่างเป็นระบบในค่าของตัวแปรหนึ่งตัว"
ทำไมเราถึงต้องการความสัมพันธ์?
มาทำความเข้าใจความสัมพันธ์กันจากสถานการณ์ต่อไปนี้
พิจารณาว่าคุณกำลังบันทึกสคริปต์โดยใช้ LoadRunner
การสื่อสารระหว่างไคลเอ็นต์-เซิร์ฟเวอร์
- ในระหว่างการบันทึก ไคลเอ็นต์จะส่งคำขอไปยังเซิร์ฟเวอร์เพื่อเริ่มเซสชัน
- เซิร์ฟเวอร์ได้รับการร้องขอและจัดสรร ID เซสชัน ABC ใหม่
- ลูกค้าเก็บรหัสเซสชั่น ABC ไว้ในสคริปต์
- ลูกค้าเริ่มต้นเซสชันด้วย ID ABC และส่งคำขอไปยังเซิร์ฟเวอร์เพื่ออนุญาตให้บันทึกได้
- เซิร์ฟเวอร์รู้จัก ID ABC และอนุญาตให้ไคลเอนต์บันทึกสคริปต์
- ตอนนี้ เรามาศึกษาการสื่อสารระหว่างไคลเอนต์และเซิร์ฟเวอร์ระหว่างการเล่นซ้ำกัน
- ในระหว่างการเล่นซ้ำ ไคลเอนต์จะส่งคำขอไปยังเซิร์ฟเวอร์เพื่อเริ่มเซสชัน
- เซิร์ฟเวอร์ได้รับการร้องขอและจัดสรร ID เซสชันใหม่ XYZ
- ลูกค้าเริ่มต้นเซสชันด้วย ID เซสชันที่บันทึกไว้ก่อนหน้านี้ ABC และส่งคำขอไปยังเซิร์ฟเวอร์เพื่ออนุญาตให้บันทึก
- เซิร์ฟเวอร์ไม่สามารถระบุ ID ABC ได้เนื่องจากคาดว่าจะมี ID XYZ ที่ได้รับการจัดสรรและเซสชันล้มเหลว
เราต้องการโซลูชันที่จะจับแยกวิเคราะห์ค่าไดนามิกที่ส่ง ณ รันไทม์และส่งค่านี้กลับไปยังเซิร์ฟเวอร์ ต่อไปนี้คือลักษณะการสื่อสารระหว่างไคลเอนต์และเซิร์ฟเวอร์ด้วยโซลูชันนี้
- ในระหว่างการเล่นซ้ำ ไคลเอนต์จะส่งคำขอไปยังเซิร์ฟเวอร์เพื่อเริ่มเซสชัน
- เซิร์ฟเวอร์ได้รับการร้องขอและจัดสรร ID เซสชัน ZZZ ใหม่
- ลูกค้าแยกวิเคราะห์เซสชันใหม่ ID ZZZ จากคำขอ
- ลูกค้าส่งคำขอเพื่อเริ่มเซสชันด้วย id ZZZ
- เซิร์ฟเวอร์รู้จัก ID ZZZ และอนุญาตให้ไคลเอนต์เล่นสคริปต์ซ้ำ
นี่ไม่มีอะไรนอกจาก ความสัมพันธ์.
คลิก Good Farm Animal Welfare Awards หากไม่สามารถเข้าถึงวิดีโอได้
ในกรณีของ VUGen ความสัมพันธ์คือความสัมพันธ์ที่มีผลผูกพันระหว่างการตอบกลับและคำขอใดๆ ก่อนหน้านี้
มีหลายสถานการณ์ที่คำขอขึ้นอยู่กับการตอบกลับที่ได้รับก่อนหน้านี้จากเซิร์ฟเวอร์ เช่น Session ID วันที่/เวลาของเซิร์ฟเวอร์ที่ดึงมาจากเซิร์ฟเวอร์ ค่าเหล่านี้จะแตกต่างกันทุกครั้งที่คุณเรียกใช้แอปพลิเคชันหรือบันทึกสคริปต์ แน่นอนว่า หากการเรียกใช้สคริปต์ขึ้นอยู่กับค่าที่เซิร์ฟเวอร์ส่งคืน นั่นหมายความว่าคุณจำเป็นต้องค้นหากลไกที่คุณสามารถ “จับ” การตอบสนองของเซิร์ฟเวอร์และแนบไปกับคำขอที่เซิร์ฟเวอร์คาดหวัง โดยทั่วไปจะเรียกว่า Correlation ใน LoadRunner
พูดง่ายๆ ก็คือ วิธีแก้ปัญหาโดยใช้ Correlation คือ:
- จับค่าเอาต์พุตจากขั้นตอน
- ใช้ค่าที่บันทึกไว้ข้างต้นเพื่อใช้เป็นอินพุตสำหรับขั้นตอนต่อๆ ไปทั้งหมด
ความสัมพันธ์แบ่งออกเป็น 2 ประเภทใน VUGen/LoadRunner:
- ความสัมพันธ์อัตโนมัติ
- ความสัมพันธ์ด้วยตนเอง
ความสัมพันธ์อัตโนมัติ
LoadRunner มีกลไกในการสร้างความสัมพันธ์โดยอัตโนมัติได้อย่างง่ายดาย
VUGen จะกำหนดให้คุณเรียกใช้สคริปต์ที่บันทึกไว้อย่างน้อยสองครั้ง เพื่อให้สามารถเปรียบเทียบค่าต่างๆ ในการตอบสนองของเซิร์ฟเวอร์เป็นการภายในได้
ความสัมพันธ์อัตโนมัติสามารถแบ่งได้เป็น 3 ประเภท:
- ตรวจจับความสัมพันธ์อัตโนมัติ
- ความสัมพันธ์ตามกฎเกณฑ์
- การเชื่อมโยงข้อความทั้งหมด
ชื่อกฎ | ควรใช้เมื่อใด |
---|---|
ตรวจจับความสัมพันธ์อัตโนมัติ | ตรวจจับและเชื่อมโยงข้อมูลไดนามิกสำหรับแอปพลิเคชันเซิร์ฟเวอร์ที่รองรับโดย HP LoadRunner |
ตามกฎเกณฑ์ | ใช้เมื่อทำงานกับแอปพลิเคชันเซิร์ฟเวอร์ที่ไม่รองรับซึ่งทราบบริบท |
สัมพันธ์กันทั้งหมด | ช่วยเชื่อมโยงข้อมูลไดนามิกทั้งหมดในลักษณะที่ไม่เปิดเผย |
แม้ว่าความสัมพันธ์อัตโนมัติจะดูง่ายกว่า แต่ก็อาจเกิดข้อผิดพลาดได้ง่ายและทำงานได้ไม่เกิน 5% ของกรณี ขอแนะนำให้ใช้ความสัมพันธ์แบบแมนนวลเสมอ
หากต้องการกำหนดค่าความสัมพันธ์อัตโนมัติในขณะที่บันทึก ให้ดำเนินการกำหนดค่าด้านล่างในการตั้งค่าเวลาบันทึกหลังจากบันทึกสคริปต์แล้ว
คลิกที่บันทึก =>ตัวเลือกการบันทึก (หรือคลิก Ctrl +F7)
หน้าต่างด้านล่างจะเปิดขึ้น:
คลิกที่ Correlation =>Configuration – หน้าต่างด้านล่างจะเปิดขึ้น
ที่นี่ คุณจะต้องทำเครื่องหมายว่าเลือกแล้วกับแอปพลิเคชันทั้งหมด (ASPNET) ฯลฯ ที่ใช้ในใบสมัครเรื่องของคุณ ทางด้านขวามือ คุณจะเห็นกฎที่จะตรวจจับตัวเลือกที่เป็นไปได้สำหรับความสัมพันธ์ เช่น _VIEWSTATE คุณยังสามารถเพิ่มแอปพลิเคชันเพิ่มเติมหรือกฎที่กำหนดเองได้โดยคลิกที่ปุ่มกฎใหม่
คุณยังสามารถคลิกที่ กฎ คุณจะเห็นดังต่อไปนี้:
เพื่อให้ความสัมพันธ์อัตโนมัติทำงานได้ คุณต้องแน่ใจว่าการสแกนกฎถูกทำเครื่องหมายว่าเลือกไว้ หากคุณคลิกที่ค่าที่สัมพันธ์กันโดยอัตโนมัติ VUGen จะไม่แจ้งให้คุณเลือกตัวเลือกเมื่อพบตัวเลือกที่มีความสัมพันธ์ แต่จะเชื่อมโยงค่าเหล่านั้นแทน
เราจะมาทำความเข้าใจเกี่ยวกับ API ที่ใช้ในการหาความสัมพันธ์กันในภายหลัง อย่างไรก็ตาม แนะนำให้ใช้การเปรียบเทียบ HTML แทนการเปรียบเทียบข้อความ
เมื่อคุณเลือกกฎใดๆ แล้ว ให้คลิกปุ่มตกลงเพื่อปิดหน้าต่าง
คลิกที่ จากเมนูและ VUGen จะสร้างสคริปต์ใหม่ (โดยไม่ต้องบันทึก) ด้วยการกำหนดค่าใหม่ VUGen จะเพิ่มโค้ดที่จำเป็นโดยอัตโนมัติเพื่อจัดการความสัมพันธ์ เราจะดูตัวอย่างโดยละเอียดเพิ่มเติมใน Manual Correlation
โปรดทราบว่า หากคุณดำเนินการเชื่อมโยงด้วยตนเองหรือใช้ความสัมพันธ์อัตโนมัติ ส่วนของโค้ดจะมีไวยากรณ์และฟังก์ชันที่เหมือนกันทุกประการ
ขั้นตอนในการเชื่อมโยงสคริปต์อัตโนมัติ:
- บันทึกสคริปต์
- เล่นซ้ำสคริปต์
- ระบุค่าที่จะสัมพันธ์กัน
- เลือกค่าและคลิกปุ่มเชื่อมโยงอัตโนมัติ
- ตรวจสอบสคริปต์โดยการรันอีกครั้ง การวิ่งที่ประสบความสำเร็จหมายถึงความสัมพันธ์ที่ประสบความสำเร็จ
เคล็ดลับ:
- สหสัมพันธ์ช่วยเรียกใช้สคริปต์ของคุณด้วยค่าที่แตกต่างกัน
- ความสัมพันธ์ยังช่วยลดขนาดของสคริปต์ของคุณด้วย
ความสัมพันธ์แบบแมนนวล
ความสัมพันธ์แบบแมนนวลเป็นเรื่องเกี่ยวกับการเขียนโค้ดลงในสคริปต์ของคุณโดยตรงเพื่อรองรับค่าที่เปลี่ยนแปลงตลอดเวลา เราสามารถแบ่งออกเป็นขั้นตอนด้านล่าง:
- กำหนดค่าที่จะจับ
- ค้นหาขอบเขตข้อความด้านขวาและด้านซ้ายของค่าที่จะจับภาพ (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);
ความสัมพันธ์แบบแมนนวลสามารถทำได้โดยการเปรียบเทียบ 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 เขียนฟังก์ชัน (หรือใช้ Steps Toolbox) เลื่อนเคอร์เซอร์ไปที่ฟังก์ชันแล้วคลิก F1 ทำความคุ้นเคยกับความช่วยเหลือของ VUGen และสร้างนิสัย คุณจะต้องจัดการกับมันบ่อยมากเมื่อทำงานในอุตสาหกรรมนี้
เรามาดูรายละเอียดฟังก์ชั่นกัน:
web_reg_save_param(ชื่อพารามิเตอร์ , ขอบเขตด้านซ้าย , ขอบเขตด้านขวา )
รายการคุณสมบัติ
แปลง: ค่าที่เป็นไปได้คือ:
HTML_TO_URL: แปลงข้อมูลที่เข้ารหัส HTML ให้เป็นรูปแบบข้อมูลที่เข้ารหัส URL
HTML_TO_TEXT: แปลงข้อมูลที่เข้ารหัส HTML เป็นรูปแบบข้อความธรรมดา คุณลักษณะนี้เป็นทางเลือก
ละเว้นการเปลี่ยนเส้นทาง: หากระบุ “Ignore Redirections=Yes” และการตอบกลับของเซิร์ฟเวอร์เป็นข้อมูลการเปลี่ยนเส้นทาง (รหัสสถานะ HTTP 300-303, 307) การตอบกลับจะไม่ถูกค้นหา หลังจากได้รับการตอบสนองการเปลี่ยนเส้นทางแล้ว คำขอ GET จะถูกส่งไปยังตำแหน่งที่ถูกเปลี่ยนเส้นทาง และทำการค้นหาการตอบสนองจากตำแหน่งนั้น
แอ็ตทริบิวต์นี้เป็นทางเลือก ค่าเริ่มต้นคือ “ละเว้นการเปลี่ยนเส้นทาง=ไม่ใช่”
ปอนด์: ขอบเขตด้านซ้ายของพารามิเตอร์หรือข้อมูลไดนามิก หากคุณไม่ได้ระบุค่า LB ระบบจะใช้อักขระทั้งหมดจากจุดเริ่มต้นของข้อมูลเป็นขอบเขต พารามิเตอร์ขอบเขตจะพิจารณาตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ หากต้องการปรับแต่งข้อความค้นหาเพิ่มเติม ให้ใช้แฟล็กข้อความตั้งแต่หนึ่งรายการขึ้นไป แอตทริบิวต์นี้เป็นสิ่งจำเป็น ดูส่วนข้อโต้แย้งขอบเขต
ไม่พบ: ตัวเลือกการจัดการเมื่อไม่พบขอบเขต และสร้างสตริงว่าง
“ไม่พบ=ข้อผิดพลาด” ซึ่งเป็นค่าเริ่มต้น ทำให้เกิดข้อผิดพลาดเมื่อไม่พบขอบเขต
“Not found=warning” (“Not found=empty” ในเวอร์ชันก่อนหน้า) ไม่พบข้อผิดพลาด หากไม่พบขอบเขต จะตั้งค่าการนับพารามิเตอร์เป็น 0 และดำเนินการสคริปต์ต่อไป ตัวเลือก "คำเตือน" เหมาะอย่างยิ่งหากคุณต้องการดูว่าพบสตริงหรือไม่ แต่คุณไม่ต้องการให้สคริปต์ทำงานล้มเหลว
หมายเหตุ: หากเปิดใช้งาน Continue on Error สำหรับสคริปต์ แม้ว่า NOTFOUND จะถูกตั้งค่าเป็น "ข้อผิดพลาด" สคริปต์จะดำเนินต่อไปเมื่อไม่พบขอบเขต แต่มีข้อความแสดงข้อผิดพลาดถูกเขียนลงในไฟล์บันทึกแบบขยาย
แอ็ตทริบิวต์นี้เป็นทางเลือกเช่นกัน
ORD: ระบุตำแหน่งลำดับหรืออินสแตนซ์ของการแข่งขัน อินสแตนซ์เริ่มต้นคือ 1 หากคุณระบุ "ทั้งหมด" ระบบจะบันทึกค่าพารามิเตอร์ในอาร์เรย์ แอ็ตทริบิวต์นี้เป็นทางเลือก
หมายเหตุ: รองรับการใช้อินสแตนซ์แทน ORD สำหรับความเข้ากันได้แบบย้อนหลัง แต่เลิกใช้งานแล้ว
RB: ขอบเขตด้านขวาของพารามิเตอร์หรือข้อมูลไดนามิก หากคุณไม่ได้ระบุค่า RB ระบบจะใช้อักขระทั้งหมดจนถึงจุดสิ้นสุดของข้อมูลเป็นขอบเขต พารามิเตอร์ขอบเขตจะพิจารณาตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ หากต้องการปรับแต่งข้อความค้นหาเพิ่มเติม ให้ใช้แฟล็กข้อความตั้งแต่หนึ่งรายการขึ้นไป แอตทริบิวต์นี้เป็นสิ่งจำเป็น ดูส่วนข้อโต้แย้งขอบเขต
RelFrameID: ระดับลำดับชั้นของหน้า HTML ที่สัมพันธ์กับ URL ที่ร้องขอ ค่าที่เป็นไปได้คือทั้งหมดหรือตัวเลข คลิกแอตทริบิวต์ RelFrameID เพื่อดูคำอธิบายโดยละเอียด แอ็ตทริบิวต์นี้เป็นทางเลือก
หมายเหตุ RelFrameID ไม่ได้รับการสนับสนุนในสคริปต์ระดับ GUI
บันทึกเลน: ความยาวของสตริงย่อยของค่าที่พบ จากออฟเซ็ตที่ระบุ ที่จะบันทึกลงในพารามิเตอร์ แอ็ตทริบิวต์นี้เป็นทางเลือก ค่าดีฟอลต์คือ -1 ซึ่งระบุให้บันทึกที่ส่วนท้ายของสตริง
บันทึกออฟเซ็ต: การชดเชยของสตริงย่อยของค่าที่พบ เพื่อบันทึกลงในพารามิเตอร์ ค่าออฟเซ็ตจะต้องไม่เป็นลบ ค่าดีฟอลต์คือ 0 แอ็ตทริบิวต์นี้เป็นทางเลือก
ค้นหา: ขอบเขตการค้นหา-ตำแหน่งที่จะค้นหาข้อมูลที่คั่น ค่าที่เป็นไปได้คือ ส่วนหัว (ค้นหาเฉพาะส่วนหัว), เนื้อความ (ค้นหาเฉพาะข้อมูลเนื้อหา ไม่ใช่ส่วนหัว), ไม่มีทรัพยากร (ค้นหาเฉพาะเนื้อหา HTML ไม่รวมส่วนหัวและทรัพยากรทั้งหมด) หรือ ทั้งหมด (เนื้อหาการค้นหา ส่วนหัว และทรัพยากร) ค่าเริ่มต้นคือทั้งหมด แอ็ตทริบิวต์นี้เป็นทางเลือก แต่โดยทั่วไปนิยมใช้