นี่คือวิธีทดสอบ API ภายนอกใน Elixir ด้วย Bypass

$config[ads_kvadrat] not found

à¤ªà ¥ ƒà¤ ¥ எ ¥? à¤μà ¥ € पठ° à¤¸à ¥? ठ¥ ित à¤à¤¯à¤¾à¤¨à¤ • ठ¨à¤ ° ठ• मà¤,à¤|िठ° | அமேசிங் எச்

à¤ªà ¥ ƒà¤ ¥ எ ¥? à¤μà ¥ € पठ° à¤¸à ¥? ठ¥ ित à¤à¤¯à¤¾à¤¨à¤ • ठ¨à¤ ° ठ• मà¤,à¤|िठ° | அமேசிங் எச்

สารบัญ:

Anonim

เราจัดลำดับความสำคัญของหลักการสถาปัตยกรรมเชิงบริการที่ ผกผัน. นั่นหมายถึงเรามีชิ้นส่วนขนาดเล็กที่สามารถบำรุงรักษาได้พร้อมความรับผิดชอบที่ชัดเจน พวกเขาสื่อสารกับคนอื่น (ส่วนใหญ่) ผ่านการโอนย้ายสถานะของตัวแทนหรือ REST, API

สิ่งนี้ให้ความยืดหยุ่นและให้บริการเราได้เป็นอย่างดียกเว้นการทดสอบด้านเดียวที่สำคัญ เมื่อทำการทดสอบหนึ่งควรหลีกเลี่ยง:

  • ขึ้นอยู่กับบริการภายนอกที่ทำงานบนเครื่องเดียวกัน
  • การทดสอบช้า

เนื่องจากแอปพลิเคชันพึ่งพาบริการภายนอกโดยเนื้อแท้จึงเป็นสิ่งสำคัญที่จะต้องมีกลยุทธ์การทดสอบสำหรับการอ้างอิงเหล่านั้น

เราเพิ่งเริ่มใช้งาน Bypass และฉันจะอธิบายวิธีที่เราไปถึงที่นั่นและโดยเฉพาะอย่างยิ่งวิธีที่เราใช้งาน

ที่ผ่านมา

วิธีการจำลองและส่งคืนข้อมูลตัวอย่างบางส่วนเช่นนี้:

นั่นคือ (และฉันเชื่อว่ายังคงเป็น) "วิธีการเดินทาง" ในโลกของ Ruby / Rails น่าเสียดายที่สิ่งนี้ส่งเสริมพฤติกรรมที่ไม่ดีดังที่José Valim อธิบายไว้ที่นี่

จากนั้นเราเริ่มใช้ ExVCR ซึ่งเป็นห้องสมุดที่ยอดเยี่ยม แต่มีข้อบกพร่องคล้าย ๆ กับ mocks / stubs: มันส่งเสริมความเกียจคร้านและไม่แยกความกังวลที่สำคัญกับ API ที่กำหนดไว้อย่างดี ExVCR ช่วยให้หนึ่งในการ "บันทึก" และ "เล่น" ข้อมูลจริง เป็นเรื่องง่ายมากที่จะรวม (รวมถึงสองสามบรรทัดในการทดสอบของคุณและทุกอย่างได้รับการดูแล) แต่ในอุดมคติคุณต้องคิดถึงการพึ่งพาจากภายนอกในการทดสอบไม่ใช่สิ่งที่เป็นนามธรรม มันอาจยังเป็นตัวเลือกที่ทำงานได้สำหรับสถานการณ์เมื่อพฤติกรรมของจุดสิ้นสุดควรทดสอบด้วยค่าใช้จ่ายน้อยที่สุด (เราใช้สำหรับทดสอบการเรียกไปยัง AWS Services ของ Amazon เช่น S3)

ใส่อะแดปเตอร์

อะแดปเตอร์ทำงานได้ดีและส่งเสริมการพิจารณาสัญญา API และขอบเขตการสื่อสารที่กำหนดไว้อย่างชัดเจน เรายังคงใช้วิธีนี้โดยเฉพาะอย่างยิ่งเมื่ออะแดปเตอร์มีความซับซ้อนมากขึ้น (เช่นซ็อกเก็ต JSON-RPC)

นี่คือลักษณะที่อะแดปเตอร์อาจมีลักษณะ:

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

ปัจจุบันและอนาคต

บายพาสช่วยให้เราสามารถเริ่มต้นเว็บเซิร์ฟเวอร์ที่ง่ายมากในการทดสอบที่จำลองการบริการภายนอกที่เราใช้

ตอนนี้เราสามารถทดสอบสแต็กทั้งหมดรวมถึงไลบรารี HTTP, ไลบรารีการเข้ารหัส / ถอดรหัส JSON และกลไกการตรวจสอบสิทธิ์ บายพาส README เขียนได้ดีดังนั้นฉันจะสำรองรายละเอียดการใช้งาน อย่างไรก็ตามเราเปลี่ยนวิธีการใช้งานเล็กน้อยเพื่อให้การทดสอบกระชับและอ่านได้:

ก่อนอื่นเราบางครั้งเราต้องการที่จะโทรออกไปยัง Facebook เมื่อการทดสอบถูกเรียกใช้เป็นชุดการรวมข้อมูลแบบเต็ม เราทำสิ่งนี้อย่างผิดปกติเพื่อให้มั่นใจว่า API ของ Facebook ยังคงทำงานตามความคาดหวังของเรา เพิ่ม - รวมการรวม ไปยัง การทดสอบแบบผสม ไม่จำลอง API แต่ให้โทรออกไปยังบริการภายนอก (สาย 5, 7) แทน

เรามีความชัดเจนเมื่อเราจำลองคำขอไปยังบริการภายนอกเพื่อให้การทดสอบแต่ละครั้งที่ใช้บายพาสต้องมี @tag facebook_bypass (บรรทัด 7)

ในที่สุด, handle_fb function (บรรทัดที่ 30–39) กำลังถูกเรียกใช้ (โดยระบุว่า request_path ขีด) ฉันชอบการจับคู่ในส่วนหัวของฟังก์ชั่นเพราะมันทำให้เส้นทางที่เราตอบสนองชัดเจนและช่วยให้เราสามารถกำหนดฟังก์ชั่นที่แตกต่างกันสำหรับเส้นทางที่แตกต่างกัน

ดังนั้น Bypass จึงทำการทดสอบที่ติดแท็กด้วยเท่านั้น @tag: บายพาส และเมื่อเราไม่ได้ใช้งานชุดการรวมของเรา อีกสิ่งหนึ่งที่เราทำในขณะที่ตั้งค่าบายพาสคือการอนุญาตให้แท็กส่งรหัสเพจ (บรรทัดที่ 8, 20) ดังนั้นนี่คือวิธีทดสอบที่ใช้ Bypass ในความรุ่งโรจน์ของมัน:

อย่างที่คุณเห็น facebook_bypass แท็กทำให้ชัดเจนว่าเรากำลังจำลอง API (เว้นแต่ว่าเราอยู่ในโหมดการรวมระบบ) ช่วยให้เราสามารถส่งผ่านข้อมูลไปยัง API จำลองและง่ายมากที่จะใช้การกำหนดค่า Bypass เดียวกันสำหรับการทดสอบที่แตกต่างกัน

ฉันหวังว่านี่จะช่วยให้คุณทดสอบ API ภายนอก คุณสามารถหาฉันได้ที่ Twitter (ดูด้านล่าง) หากคุณมีคำถามเพิ่มเติม

$config[ads_kvadrat] not found