เมื่อออกแบบเวิร์กโฟลว์การทดสอบอัตโนมัติใน Apidog คุณจะใช้ขั้นตอนการทดสอบหลายประเภท เช่น **คำขอ API, การสอบถามฐานข้อมูล, For loop, ForEach Loop, Scripts** และอื่นๆ

บ่อยครั้งที่ข้อมูลที่สร้างขึ้นในขั้นตอนหนึ่งจำเป็นต้องนำไปใช้ในขั้นตอนถัดไป สิ่งนี้สร้างกระแสการทำงานที่เป็นตรรกะที่ **ข้อมูลขับเคลื่อนกระบวนการ** และ **ขั้นตอนต่างๆ เชื่อมโยงกัน**
ตัวอย่างเช่น คุณอาจ:
- ดึงโทเค็นผู้ใช้ในขั้นตอนก่อนหน้า หรือรันการสอบถามฐานข้อมูลเพื่อรับระเบียนเฉพาะ
- จากนั้นใช้ผลลัพธ์เหล่านั้นในคำขอปลายทางในขั้นตอนถัดไป
สิ่งนี้ทำให้เกิดคำถามสำคัญ:
**คุณจะอ้างอิงข้อมูลจากขั้นตอนก่อนหน้า (ต้นน้ำ) ในขั้นตอนถัดไป (ปลายน้ำ) ได้อย่างถูกต้องได้อย่างไร?**
สองกลไกสำหรับการส่งผ่านข้อมูลใน Apidog
ในการทดสอบอัตโนมัติของ Apidog มีสองวิธีหลักในการส่งผ่านข้อมูลระหว่างขั้นตอนการทดสอบต่างๆ:
1. ดึงข้อมูลขั้นตอนก่อนหน้าผ่าน "Dynamic Values"
คุณสามารถอ้างอิงเอาต์พุตของขั้นตอนก่อนหน้า (ต้นน้ำ) ได้โดยตรงในขั้นตอนถัดไป (ปลายน้ำ) โดยใช้คุณสมบัติ "**Dynamic Value**" ซึ่งช่วยให้คุณสามารถดึงข้อมูลได้ทันทีโดยไม่ต้องจัดเก็บ

2. จัดเก็บตัวแปรและนำกลับมาใช้ใหม่
คุณสามารถดึงข้อมูลสำคัญจากขั้นตอนต้นน้ำและ**จัดเก็บเป็นตัวแปร** ตัวแปรเหล่านี้สามารถนำกลับมาใช้ใหม่ในขั้นตอนใดก็ได้ที่ตามมา

การเรียนรู้สองวิธีนี้ในการส่งผ่านข้อมูลเป็นกุญแจสำคัญในการสร้างเวิร์กโฟลว์อัตโนมัติที่ขับเคลื่อนด้วยข้อมูลและมีประสิทธิภาพใน Apidog
บทความนี้อธิบายวิธีการจัดการข้อมูลในขั้นตอนการทดสอบประเภทต่างๆ จากสองมุมมอง: **วิธีดึงข้อมูล** และ **วิธีใช้ข้อมูล** การทำความเข้าใจทั้งสองสิ่งนี้จะช่วยให้คุณสามารถสร้างเวิร์กโฟลว์การทดสอบที่ยืดหยุ่นและเชื่อมโยงกันได้ดียิ่งขึ้น
การดึงและใช้ข้อมูลการตอบสนองของปลายทาง
ทำความเข้าใจข้อมูลการตอบสนองของปลายทาง
ในการทดสอบอัตโนมัติ คำขอ API มักจะส่งคืน**การตอบสนอง JSON** ที่มีโครงสร้าง ซึ่งมักจะทำหน้าที่เป็น**อินพุตสำหรับขั้นตอนการทดสอบถัดไป**

ต่างจากขั้นตอนประเภทอื่น การตอบสนองของปลายทางมักจะซับซ้อนกว่า โดยมักจะรวมถึง**ออบเจกต์และอาร์เรย์ที่ซ้อนกัน**
วิธีดึงข้อมูลจากการตอบสนองของปลายทาง
มีสองวิธีหลักในการดึงและส่งผ่านข้อมูลการตอบสนองของปลายทางระหว่างขั้นตอนการทดสอบ:
วิธีที่หนึ่ง: การอ้างอิงค่าแบบไดนามิก
ใช้ "**Dynamic Values**" เพื่ออ้างอิงข้อมูลจากขั้นตอนก่อนหน้าโดยตรง:
- ในช่องป้อนข้อมูลใดๆ ของขั้นตอนปลายน้ำ ให้คลิกไอคอน**ไม้กายสิทธิ์**
- เลือก "**Retrieve Pre-step Data**"
- Apidog จะแทรกนิพจน์ที่ถูกต้องโดยอัตโนมัติ — ไม่จำเป็นต้องเขียนด้วยตนเอง

วิธีที่สอง: ดึงข้อมูลเป็นตัวแปร
คุณยังสามารถใช้คุณสมบัติ "**Extract Variables**" ในตัวประมวลผลหลังการทำงานของปลายทางเพื่อดึงฟิลด์เฉพาะจากการตอบสนองเป็นตัวแปรได้
ตัวอย่างเช่น การดึง id ของผลิตภัณฑ์ในการตอบสนอง:
- ตั้งชื่อตัวแปรเป็น
products_id - ใช้ JSONPath:
$.products[0].id

ในขั้นตอนถัดไป เพียงอ้างอิงโดยใช้ {{products_id}}
วิธีใช้ข้อมูลที่ดึงมาจากปลายทาง
เมื่อคุณดึงข้อมูลจากการตอบสนองของ API แล้ว—ไม่ว่าจะใช้ "**Dynamic Values**" หรือ "**Extracted Variables**"—คุณสามารถใช้ข้อมูลนั้นในขั้นตอนปลายน้ำได้หลายวิธี:
1. ใช้ข้อมูลในคำขอปลายทาง
- **ผ่าน Dynamic Value**: เช่นเดียวกับก่อนหน้านี้ ให้คลิกไอคอน**ไม้กายสิทธิ์**ในช่องป้อนข้อมูล เลือก "**Retrieve Pre-step Data**" และ Apidog จะแทรกนิพจน์ที่ถูกต้องโดยอัตโนมัติ
- **ผ่าน Extracted Variable**: หากคุณเคยบันทึกค่าเป็นตัวแปร (เช่น
products_id) เพียงใช้{{products_id}}เป็นพารามิเตอร์ในคำขอ API

2. ใช้ข้อมูลในการดำเนินการฐานข้อมูล
คุณสามารถใช้การตอบสนองของ API เป็นอินพุตในการสอบถามฐานข้อมูลได้ ทั้งสองวิธีใช้ได้:
- **วิธี Dynamic Value**
SELECT * FROM products WHERE id = '{{$.1.response.body.products[0].id}}'
ใช้ค่าไดนามิกเพื่ออ้างอิงข้อมูลการตอบสนองของ API โดยตรงในการสอบถาม SQL:

- **วิธี Extracted Variable**: หากคุณดึง ID ผลิตภัณฑ์เป็นตัวแปรชื่อ
products_idให้ใช้:
SELECT * FROM products WHERE id = '{{products_id}}'3. ใช้ข้อมูลใน For Loop
หากต้องการทำซ้ำขั้นตอนตามความยาวของอาร์เรย์จากการตอบสนองของ API:
- ใช้ค่าไดนามิกเพื่อรับความยาวของอาร์เรย์ ตัวอย่างเช่น:
{{$.1.response.body.products.length}}สิ่งนี้จะกำหนดจำนวนรอบการวนซ้ำ

4. ใช้ข้อมูลใน ForEach Loops
หากคุณต้องการวนซ้ำแต่ละรายการในอาร์เรย์ที่ส่งคืนโดยปลายทาง:
- **วิธี Dynamic Value**: ดึงอาร์เรย์ทั้งหมดโดยตรง ตัวอย่างเช่น
{{$.1.response.body.products}}

- **วิธี Extract Variable**: สมมติว่าอาร์เรย์ทั้งหมดถูกดึงออกมาเป็นตัวแปร
productsจากนั้นให้แทรก{{products}}ลงในลูปโดยตรง

5. ใช้ข้อมูลในสคริปต์
หากต้องการใช้ข้อมูลจากขั้นตอนก่อนหน้าภายใน**สคริปต์** ให้ใช้วิธี pm.variables.get() นี่คือวิธีการ:
- **วิธี Dynamic Value**: อ่านข้อมูลโดยตรงจากขั้นตอนก่อนหน้า:
const products = pm.variables.get("$.1.response.body.products")
- **วิธี Extract Variable**: หากคุณบันทึกอาร์เรย์หรือค่าเป็นตัวแปร ให้ใช้สคริปต์ต่อไปนี้เพื่อดึงข้อมูล:
รับค่าของตัวแปรชั่วคราว:
const products = pm.variables.get("products") รับค่าของตัวแปรสภาพแวดล้อม:
const products = pm.environment.get("products")
รับค่าของตัวแปรส่วนกลาง:
const products = pm.globals.get("products"){{products}} ได้โดยตรง แต่คุณต้องดึงค่าตัวแปรโดยใช้วิธีการที่เหมาะสมที่กล่าวมาข้างต้นการดึงและใช้ผลลัพธ์การสอบถามฐานข้อมูล
ทำความเข้าใจข้อมูลฐานข้อมูล
เมื่อขั้นตอนการสอบถามฐานข้อมูลถูกดำเนินการ จะส่งคืนข้อมูลที่มีโครงสร้างในรูปแบบของอาร์เรย์ของออบเจกต์ แม้ว่าจะส่งคืนเพียงหนึ่งระเบียน ก็จะยังคงอยู่ในรูปแบบอาร์เรย์ ตัวอย่างเช่น:

ต่างจากการตอบสนองของปลายทาง **ข้อมูลจากขั้นตอนฐานข้อมูลไม่สามารถเข้าถึงได้โดยตรงโดยใช้ตัวแปรไดนามิก** คุณต้องดึงค่าเหล่านั้นออกมาเป็นตัวแปรก่อน
วิธีดึงข้อมูลจากฐานข้อมูล
หลังจากรันการสอบถาม SQL ในขั้นตอนฐานข้อมูล Apidog จะแยกวิเคราะห์การตอบสนองเป็นข้อมูลที่มีโครงสร้างโดยอัตโนมัติ ดังนี้:
[
{
"id": "1000",
"title": "Title 1",
"description": "Description for Title 1"
}
]
จากนั้นคุณสามารถใช้ **JSONPath** เพื่อดึงฟิลด์เฉพาะและบันทึกเป็นตัวแปรได้
ตัวอย่างเช่น:
- **ชื่อตัวแปร:**
products_id - **JSONPath:**
$[0].id(เพื่อดึง ID ของรายการแรก) หากคุณต้องการดึงชุดผลลัพธ์ทั้งหมด ให้ใช้:$ - ขั้นตอนปลายน้ำจะอ้างอิงตัวแปรผ่าน
{{ }}ตัวอย่างเช่น:{{products_id}}

วิธีใช้ข้อมูลที่ดึงมาจากฐานข้อมูล
1. ใช้ข้อมูลในคำขอปลายทาง
หากการสอบถามฐานข้อมูลของคุณส่งคืน ID และคุณบันทึกเป็นตัวแปร (products_id) คุณสามารถใช้มันได้โดยตรงในคำขอปลายทางถัดไป:

2. ใช้ข้อมูลใน ForEach Loops
หากการสอบถามของคุณส่งคืนรายการระเบียน และคุณต้องการประมวลผลแต่ละรายการแยกกัน คุณสามารถใช้อาร์เรย์ทั้งหมดเป็นแหล่งข้อมูลสำหรับลูป ForEach ได้:

ข้อสมมติฐานคือ คุณบันทึกอาร์เรย์ทั้งหมดเมื่อดึงตัวแปรในการดำเนินการฐานข้อมูล ตัวอย่างเช่น:
- ชื่อตัวแปร:
products - JSONPath:
$

3. ใช้ข้อมูลในสคริปต์
หากต้องการใช้ตัวแปรฐานข้อมูลที่ดึงมาในสคริปต์ ให้ใช้วิธีเดียวกับตัวแปรอื่นๆ
รับค่าของตัวแปรชั่วคราว:
const products = pm.variables.get("products")รับค่าของตัวแปรสภาพแวดล้อม:
const products = pm.environment.get("products")รับค่าของตัวแปรส่วนกลาง:
const products = pm.globals.get("products")
การดึงและใช้ข้อมูลจาก For Loops
การทำงานของ For Loops
**`For loop`** ใช้สำหรับทำซ้ำชุดการกระทำที่กำหนดหลายครั้ง โดยทำงานตามจำนวนรอบที่กำหนดไว้
คุณสามารถกำหนดจำนวนครั้งที่แน่นอนในการวนซ้ำ หรือใช้ค่าไดนามิก เช่น ความยาวของอาร์เรย์ .length ที่ส่งคืนจากขั้นตอนก่อนหน้า ตัวอย่างเช่น: {{$.1.response.body.products.length}}:

หมายเหตุ: ต่างจากขั้นตอนอื่นๆ ที่ส่งออกข้อมูล **`For loop` ไม่ได้ส่งคืนข้อมูลโดยตรง** มันให้เพียงค่าดัชนี (เริ่มต้นจาก 0) เพื่อแสดงว่าลูปได้ถูกดำเนินการไปแล้วกี่ครั้ง
วิธีดึงข้อมูลจาก For Loops
ในระหว่างกระบวนการดำเนินการ คุณสามารถเข้าถึงดัชนีลูปปัจจุบันได้โดยใช้ไวยากรณ์ตัวแปรไดนามิก: {{$.9.index}}

- ตัวเลข
9อ้างถึง ID ของขั้นตอนFor loops - แต่ละขั้นตอนมี ID ที่ไม่ซ้ำกัน
- ดัชนีเริ่มต้นที่ 0 สำหรับลูปแรก, 1 สำหรับลูปที่สอง, และอื่นๆ
วิธีใช้ข้อมูลที่ดึงมาจาก For Loops
1. ใช้ข้อมูลในสคริปต์
หากคุณต้องการใช้ข้อมูลที่เกี่ยวข้องกับลูปในสคริปต์ทดสอบของคุณ คุณสามารถใช้ pm.variables.get() เพื่อรับดัชนีปัจจุบันได้:
// รับดัชนีลูปปัจจุบัน
const index = pm.variables.get("$.7.index");
2. ใช้ข้อมูลร่วมกับแหล่งข้อมูลอื่น
กรณีการใช้งานทั่วไปสำหรับ For loop คือการประมวลผลข้อมูลจากขั้นตอนก่อนหน้า — เช่น การวนซ้ำผ่านอาร์เรย์และจัดการแต่ละรายการ:
// รับอาร์เรย์จากขั้นตอนก่อนหน้า
const products = pm.variables.get("$.1.response.body.products");
// รับดัชนีลูปปัจจุบัน
const index = pm.variables.get("$.7.index");
// เข้าถึงรายการปัจจุบันในอาร์เรย์โดยใช้ดัชนี
console.log(products[index]);
สิ่งนี้ช่วยให้คุณสามารถดำเนินการแบบแบตช์กับแต่ละรายการในอาร์เรย์ระหว่างการวนซ้ำแต่ละครั้ง
การดึงและใช้ข้อมูลจาก ForEach Loop
การทำงานของ ForEach Loop
ลูป ForEach ได้รับการออกแบบมาโดยเฉพาะสำหรับข้อมูลอาร์เรย์ โดยจะวนซ้ำผ่านแต่ละองค์ประกอบในอาร์เรย์โดยอัตโนมัติและดำเนินการชุดเดียวกัน
ความแตกต่างที่สำคัญระหว่าง **`ForEach loop`** และ **`For loop`** คือ `ForEach loop` จะดึงข้อมูลทั้งหมดขององค์ประกอบอาร์เรย์ปัจจุบันในแต่ละรอบโดยอัตโนมัติ ทำให้สามารถเข้าถึงได้โดยตรงในขั้นตอนย่อย
การเข้าถึงข้อมูลใน ForEach Loop
ภายใน ForEach loop ระบบจะสร้างตัวแปรพิเศษสองตัวโดยอัตโนมัติ:
- **องค์ประกอบลูปปัจจุบัน:** มีข้อมูลทั้งหมดขององค์ประกอบอาร์เรย์ที่กำลังประมวลผลอยู่ ตัวอย่างเช่น:
{{$.4.element}}หากอาร์เรย์มีออบเจกต์ คุณสามารถเข้าถึงคุณสมบัติของออบเจกต์ได้โดยตรง เช่น:{{$.4.element.id}},{{$.4.element.title}}เป็นต้น

- **ดัชนีลูปปัจจุบัน:** แสดงถึงจำนวนรอบการวนซ้ำปัจจุบัน (เริ่มต้นจาก 0) เช่น
{{$.4.index}}

หมายเหตุ: ตัวเลข 4 อ้างถึง ID ของขั้นตอน ForEach Loop ในเวิร์กโฟลว์จริงของคุณ ให้แทนที่ด้วย ID ขั้นตอนที่ถูกต้องจากกระบวนการของคุณ
กรณีการใช้งานทั่วไปสำหรับข้อมูล ForEach Loop
1. ใช้ข้อมูลในคำขอปลายทาง
ลูป ForEach เหมาะสำหรับการจัดการการดำเนินการข้อมูลแบบแบตช์ ตัวอย่างเช่น หากคุณมีอาร์เรย์ของรายการ คุณสามารถส่งคำขอปลายทางสำหรับแต่ละรายการในอาร์เรย์ได้โดยอัตโนมัติ ในแต่ละลูป เทมเพลตคำขอเดียวกันจะถูกนำกลับมาใช้ใหม่ แต่จะถูกเติมด้วยข้อมูลที่แตกต่างกัน เช่น {{$.4.element.id}}

2. ใช้ข้อมูลในการดำเนินการฐานข้อมูล
คุณสามารถใช้ข้อมูลจากรายการลูปปัจจุบันเพื่อรันการสอบถามฐานข้อมูลหรือแทรกหลายแถวได้
ตัวอย่าง: การสอบถามฐานข้อมูลโดยใช้ฟิลด์ของรายการปัจจุบัน
SELECT * FROM products WHERE id = '{{$.4.element.id}}'
นิพจน์ {{$.4.element.id}} สามารถเข้าถึงได้โดยใช้คุณสมบัติค่าไดนามิก

การแทรกหลายฟิลด์จากรายการปัจจุบันลงในตาราง:
INSERT INTO products (id, title) VALUES ('{{$.4.element.id}}', '{{$.4.element.title}}')
3. ใช้ข้อมูลในสคริปต์
หากคุณต้องการประมวลผลข้อมูลจากลูปเพิ่มเติมในสคริปต์ที่กำหนดเอง คุณสามารถใช้วิธี pm.variables.get() เพื่อดึงค่าได้:
// รับองค์ประกอบปัจจุบัน
const item = pm.variables.get("$.4.element");
// รับดัชนีปัจจุบัน
const index = pm.variables.get("$.4.index");การดึงและใช้ข้อมูลจากสคริปต์
การทำงานของข้อมูลสคริปต์
ต่างจากขั้นตอนอื่นๆ ในเวิร์กโฟลว์ สคริปต์ไม่ได้สร้างเอาต์พุตที่สามารถนำไปใช้ได้โดยตรงในขั้นตอนถัดไปโดยอัตโนมัติ หากคุณต้องการส่งผ่านข้อมูลจากสคริปต์ไปยังขั้นตอนถัดไป คุณต้องจัดเก็บข้อมูลนั้นในตัวแปรด้วยตนเอง
วิธีดึงข้อมูลจากสคริปต์
คุณสามารถบันทึกค่าลงในตัวแปรประเภทต่างๆ ได้ดังนี้:
// รับข้อมูลการตอบสนอง JSON
// 1. จากการตอบสนองของปลายทางปัจจุบัน
// const currentData = pm.response.json();
// 2. หรือรับจากขั้นตอนก่อนหน้าโดยใช้ค่าไดนามิก
const preData = pm.variables.get("$.1.response.body");
// บันทึกลงในตัวแปรสภาพแวดล้อม
pm.environment.set('products', preData.products);
pm.environment.set('products_id', preData.products[0].id);
// บันทึกลงในตัวแปรส่วนกลาง
pm.globals.set('products', preData.products);
// บันทึกลงในตัวแปรชั่วคราว (ใช้ได้เฉพาะในการรันนี้เท่านั้น)
pm.variables.set('products', preData.products);เมื่อตัวแปรถูกดึงและตั้งค่าแล้ว คุณสามารถอ้างอิงถึงตัวแปรเหล่านั้นในขั้นตอนถัดไปโดยใช้ไวยากรณ์ {{variableName}}
วิธีใช้ข้อมูลที่ดึงมาจากสคริปต์
1. ใช้ข้อมูลในคำขอปลายทาง
ตัวแปรที่ตั้งค่าในสคริปต์สามารถใช้เป็นพารามิเตอร์ได้โดยตรงในคำขอปลายทางปลายน้ำ ตัวอย่างเช่น หากคุณบันทึก products_id ในสคริปต์ คุณสามารถอ้างอิงได้ในคำขอถัดไปดังนี้: {{products_id}}

2. ใช้ข้อมูลในการดำเนินการฐานข้อมูล
ตัวแปรสคริปต์ยังสามารถใช้เพื่อสร้างคำสั่ง SQL แบบไดนามิกได้ ตัวอย่างเช่น:
SELECT * FROM products WHERE id = '{{products_id}}'3. ใช้ข้อมูลใน For Loop
คุณสามารถใช้สคริปต์เพื่อสร้างจำนวนรอบการวนซ้ำหรือค่ากลางอื่นๆ จัดเก็บเป็น "ตัวแปรชั่วคราว" และส่งผ่านไปยังขั้นตอน **For Loop** ได้:
pm.variables.set("loopCount", 5); จากนั้น ในการตั้งค่าลูป ให้ใช้ {{loopCount}} เป็นจำนวนรอบการวนซ้ำ
4. ใช้ข้อมูลใน ForEach Loops
คุณสามารถจัดเก็บอาร์เรย์ทั้งหมดในตัวแปรและใช้เป็นแหล่งข้อมูลสำหรับ **ForEach Loop** ได้
ตัวอย่าง:
// (เลือกได้) ดึงอาร์เรย์จากขั้นตอนก่อนหน้าโดยใช้ค่าไดนามิก
// const preData = pm.variables.get("$.1.response.body.products")
const preData = [{id: 1}, {id: 2}, {id: 3}];
// บันทึกลงในตัวแปรสภาพแวดล้อม
pm.environment.set('products', preData);
จากนั้นใน **ForEach Loop** ให้ตั้งค่าแหล่งข้อมูลเป็น {{products}}
สรุป
ในการสร้างเวิร์กโฟลว์การทดสอบอัตโนมัติที่มีประสิทธิภาพ สิ่งสำคัญคือต้องเข้าใจวิธีการดึงและใช้ข้อมูลจากขั้นตอนประเภทต่างๆ:
- **ขั้นตอนปลายทางและฐานข้อมูล** สร้างข้อมูลที่เกี่ยวข้องกับธุรกิจ
- **ขั้นตอนลูป** ควบคุมการไหลของตรรกะ
- **ขั้นตอนสคริปต์** ใช้สำหรับประมวลผลและแปลงข้อมูล
ด้วยการรวม**การอ้างอิงค่าแบบไดนามิก**เข้ากับการ**ดึงตัวแปร** คุณสามารถออกแบบกระบวนการทดสอบที่ขับเคลื่อนด้วยข้อมูลที่ยืดหยุ่นและทรงพลังได้
แนวปฏิบัติที่ดีที่สุดสำหรับการส่งผ่านข้อมูล:
- ใช้**การอ้างอิงค่าแบบไดนามิก**สำหรับข้อมูลที่เรียบง่ายซึ่งใช้เพียงครั้งเดียวหรือเป็นครั้งคราว
- ใช้**การดึงตัวแปร**สำหรับข้อมูลที่จำเป็นต้องนำกลับมาใช้ใหม่ในหลายขั้นตอนหรือจัดการในสคริปต์
การเลือกวิธีที่เหมาะสมตามความซับซ้อนของข้อมูลและความถี่ในการใช้งานจะทำให้เวิร์กโฟลว์ของคุณดูแลรักษาง่ายและมีประสิทธิภาพมากขึ้น
