ไม่กี่สัปดาห์ที่ผ่านมาฉันเห็นหน้าแรก โพสต์ข่าวแฮ็กเกอร์ บนนักวิ่ง HTTP ที่ใช้ข้อความใหม่ขึ้นอยู่กับ Curl และเขียนใน Rust เรียกว่า เหวี่ยง– น่าสนใจ เรากำลังมองหาวิธีที่ง่ายกว่าในการเรียกใช้และทดสอบคำขอ API กับ API โซเชียลของเรา
ก่อนอื่นหากคุณต้องการทดสอบการโทร API มีตัวเลือกมากมายตั้งแต่เครื่องมือทดสอบออนไลน์บุรุษไปรษณีย์สร้างของคุณเอง ฯลฯ นี่คือการค้นหา Google ในการทดสอบการโทร API

เครื่องมือเหล่านี้น่าจะยอดเยี่ยม แต่ฉันต้องการให้สิ่งต่าง ๆ ง่ายขึ้น:
- โทรหาจุดสิ้นสุด API ด้วยการสืบค้นหรือพารามิเตอร์โพสต์
- ตรวจสอบการตอบสนอง 200 ครั้ง
- ตรวจสอบ JSON กลับมา
- โทรหาจุดสิ้นสุด API อื่นตาม JSON ที่ส่งคืนในการโทรก่อนหน้า
ระบบควรทำงานผ่านจุดสิ้นสุดทั้งหมดและแจ้งเตือนหากมีบางอย่างผิดปกติ การเรียกใช้อาจถูกต้องก่อนที่จะเปิดตัวหรือหลังจากการเปลี่ยนแปลงรหัส และเนื่องจากฉันเป็นคนรักเทอร์มินัล/CLI ฉันจึงต้องการเรียกใช้การทดสอบที่พรอมต์คำสั่ง – ใช้ งอแอพ MAC Terminal ที่ฉันโปรดปราน
Hurl สำหรับการทดสอบจุดสิ้นสุด API
เมื่อฉันเห็น Hurl ฉันคิดว่าว้าวนี่อาจจะสมบูรณ์แบบ – แม้ว่าจะมีบางอย่างที่จะพูดสำหรับชื่อ
ตามที่ Hurl อธิบายตัวเอง
“” Hurl อนุญาตให้เรียกใช้คำขอ HTTP ที่กำหนดไว้ในรูปแบบข้อความธรรมดา มันสามารถใช้ในการดึงข้อมูลหรือเล่นสถานการณ์ (ลำดับของคำขอ), ยืนยันการตอบกลับไปพร้อมกัน ด้วยรูปแบบที่เป็นข้อความมันมีจุดมุ่งหมายสำหรับทั้ง DevOps และนักพัฒนา ด้วยการใช้งานบรรทัดคำสั่ง/ไบนารีที่ไม่ซ้ำกันอย่างง่ายมันมีจุดประสงค์สำหรับทั้งการรวมกลุ่มและการรวมอย่างต่อเนื่อง”
ลองเหวี่ยงออกไป คุณสามารถ ดูวิธีเรียกใช้ Hurl ด้วยตัวอย่างสคริปต์–
การโทร Hurl ขั้นพื้นฐาน
อันดับแรก ติดตั้ง เหวี่ยงระบบปฏิบัติการที่คุณเลือก นี่คือด้วย brew บน Mac:
brew set up hurl
ตอนนี้ลองโทรออก – เราจะโทรหา google.com และตรวจสอบการตอบกลับ 200 ครั้ง
สร้างไฟล์ที่เรียกว่า fundamental.hurl ใน IDE ที่คุณชื่นชอบ – ไม่มีปากกาเน้นข้อความไวยากรณ์ VSCODE แต่ทีม Hurl กล่าวว่าพวกเขากำลังทำงานอยู่
GET https://www.google.com
HTTP/1.1 200
ในไดเรกทอรีที่ fundamental.hurl ไฟล์คือบันทึกเรียกใช้คำสั่ง:
hurl --test fundamental.hurl
คำตอบคือ:

ข้อผิดพลาด! อย่างไรก็ตามนี่เป็นสิ่งที่ดี อย่างที่คุณเห็นปัญหาคือการตอบสนองของ Google.com ด้วย http/2 นอกจากนี้โปรดทราบว่าคุณได้รับสถิติเกี่ยวกับจำนวนไฟล์ที่เรียกใช้ระยะเวลา ฯลฯ เพียงแค่เปลี่ยนสิ่งนี้ในไฟล์ fundamental.hurl และคุณออกไปแข่ง

การโทร Hurl ขั้นสูง
ตอนนี้สำหรับสิ่งที่สนุกสนานการโพสต์ API เรียกด้วยร่างกายและยืนยันผลลัพธ์ สำหรับตัวอย่าง Hurl ขั้นสูงนี้เราจะโทรไปยังโซเชียลมีเดียของ Ayrshare เพื่อส่งโพสต์ คุณสามารถสร้างไฟล์ บัญชีฟรี ไปยังคีย์ API ของคุณ หลังจากสร้างบัญชีของคุณเชื่อมต่อเครือข่ายโซเชียลอย่างน้อยหนึ่งเครือข่ายเช่น Twitter
สร้างไฟล์ใหม่ที่เรียกว่า publish.hurl และคัดลอกรหัสต่อไปนี้:
# /publish POST -------------
POST https://app.ayrshare.com/api/publish
Content material-Sort: software/json
Authorization: Bearer {{API_KEY}}
{
"randomPost": true,
"platforms": (
"twitter"
)
}
HTTP/* 200
(Asserts)
header "Content material-Sort" == "software/json; charset=utf-8"
jsonpath "$.standing" == "success"
jsonpath "$.errors" depend == 0
jsonpath "$.postIds(0).standing" == "success"
jsonpath "$.postIds(0).id" exists
jsonpath "$.postIds(0).postUrl" exists
jsonpath "$.postIds(0).platform" == "twitter"
jsonpath "$.id" exists
jsonpath "$.refId" exists
jsonpath "$.publish" exists
(Captures)
id: jsonpath "$('id')"
tw_id: jsonpath "$.postIds(0).id"
# -----------------------
มีหลายสิ่งเกิดขึ้น ก่อนอื่น {{API_KEY}} เป็นชุดตัวแปรในไฟล์ Env เราเก็บสิ่งนี้ไว้ในไฟล์อื่นเพื่อให้สามารถใช้กับการเหวี่ยงที่แตกต่างกัน
ตั้งค่าคีย์ API ในไฟล์ที่เรียกว่า vars.env–
API_KEY=GHLOM-QW6MRC7-KX944W1-PWKJFT
สองบรรทัดถัดไป (Content material-Sort และ Authorization) ตั้งส่วนหัวตามด้วยร่าง JSON ของโพสต์ ดู โซเชียลมีเดีย API /จุดสิ้นสุดโพสต์ สำหรับรายละเอียดเกี่ยวกับโพสต์ร่างกาย นี่คือข้อมูลทั้งหมดที่เกี่ยวข้องกับการโทร
บรรทัดด้วย HTTP/* 200 เริ่มต้นการทดสอบ (* แทน 1.1 หรือ 2 ดังนั้นจะยอมรับรุ่น HTTP ใด ๆ )
(ยืนยัน)
ใน (Asserts) ส่วนของไฟล์เราทดสอบความถูกต้องของการตอบกลับส่วนหัวและ JSON header "Content material-Sort" ตรวจสอบว่าประเภทเนื้อหาถูกต้องหรือไม่ สำหรับ JSON เราต้องแยกกุญแจด้วย jsonpath แบบสอบถามประเภทภาคแสดงและค่าภาคแสดง

ตัวอย่างเช่น, jsonpath "$.standing" == "success" รับคีย์สถานะและการตรวจสอบคือค่าเท่ากับ“ ความสำเร็จ” หากไม่เป็นเช่นนั้นจะมีข้อผิดพลาดเกิดขึ้น
มีการประชุมหลายประเภทเช่น exists และ depend–
(จับ)
ที่ (Captures) ส่วนจับข้อมูลเป็นตัวแปร รูปแบบคือ:

ในตัวอย่างของเรา
id: jsonpath "$('id')"
tw_id: jsonpath "$.postIds(0).id"
เราจับรหัสโพสต์ที่ส่งคืนและรหัสทวีตที่อยู่ในวัตถุในอาร์เรย์ เราสามารถใช้ตัวแปรนี้ได้ในภายหลังหากเราต้องการเชนคำขอด้วยรูปแบบ {{variable title}}–
# /analytics/publish -------
POST https://app.ayrshare.com/api/analytics/publish
Content material-Sort: software/json
Authorization: Bearer {{API_KEY}}
{
"id": "{{id}}"
}
วิ่งเหยาะๆ
ในที่สุดเราต้องเรียกใช้ไฟล์ HURL ที่พรอมต์คำสั่งโดยใช้ไฟล์ --very-verbose ธงเพื่อให้เราสามารถเห็นสิ่งดีๆทั้งหมดเกิดขึ้น:
hurl --test --very-verbose --variables-file vars.env publish.hurl
และผลลัพธ์:

Joyful Hurl
จนถึงตอนนี้ดีมากกับการขว้าง ฉันพบว่ามันใช้งานง่ายและมีคุณสมบัติมากมาย นอกจากนี้พวกเขาดูเหมือนจะอยู่ในจังหวะปกติของการเผยแพร่ – เป็นสัญญาณที่ดีเสมอ
เราได้เขียนกรณีทดสอบเพิ่มเติมในช่วงหลายสัปดาห์ที่ผ่านมาและในขณะที่ทีมพัฒนาของเราใช้ Hurl มากขึ้นเราจะตัดสินใจว่ามันเป็นส่วนถาวรของชุดทดสอบของเราหรือไม่
หากคุณต้องการดูตัวอย่าง Hurl ตัวอย่างเพิ่มเติมที่มีการผูกมัดลองดู ไฟล์ Hurl ของ Ayrshare–
-Geoff Bourne ผู้ร่วมก่อตั้ง Ayrshare