บทช่วยสอนการทดสอบ API ด้วย REST Assurance

⚡ สรุปอย่างชาญฉลาด

REST Assured สร้างชื่อเสียงให้กับตัวเองในฐานะ... Javaไลบรารีโอเพนซอร์สที่ใช้ Maven ซึ่งช่วยเพิ่มประสิทธิภาพการทดสอบอัตโนมัติของ REST API เฟรมเวิร์กนี้ช่วยให้วิศวกรคุณภาพสามารถตรวจสอบความถูกต้องของข้อมูล JSON ที่ซับซ้อน ส่วนหัว รหัสสถานะ และเวลาตอบสนอง โดยใช้ไวยากรณ์แบบ BDD ที่ชัดเจน พร้อมการผสานรวม Maven อย่างราบรื่น

  • ⚙️ Foundation การติดตั้ง: กำหนดค่า Java, Eclipseและจัดการ dependency ของ Maven ก่อนที่จะเขียนสคริปต์ทดสอบ REST Assured ตัวแรกของคุณ
  • 📐 ความเชี่ยวชาญด้านไวยากรณ์: ใช้รูปแบบ Given-When-Then เพื่อแสดงคำขอ API ในรูปแบบที่อ่านง่ายและเป็นมิตรกับธุรกิจ
  • 🔍 การตรวจสอบความถูกต้องอย่างละเอียด: Extracส่งข้อมูลการตอบกลับ ได้แก่ เนื้อหา สถานะรหัส ส่วนหัว ประเภทเนื้อหา และช่วงเวลา ผ่านทางลำดับการทำงานที่ราบรื่น
  • 🧩 การนำทางตามเส้นทาง: เข้าถึงค่า JSON ที่ซ้อนกันโดยใช้สัญกรณ์จุดคล้ายกับ XPath ใน Selenium เพื่อการยืนยันที่แม่นยำ
  • 🛡️ การบูรณาการ CI/ซีดี: ผสานรวม REST Assured กับ TestNG or JUnit เพื่อฝังการตรวจสอบ API ลงในไปป์ไลน์การสร้างอัตโนมัติโดยตรง

บทเรียน REST Assured

Rest Assured คืออะไร?

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

สำหรับชุมชนการทดสอบ การทดสอบอัตโนมัติของ API ถือเป็นเรื่องใหม่และเฉพาะกลุ่ม ความซับซ้อนของ JSON ทำให้การทดสอบ API ไม่ได้รับการสำรวจ แต่ถึงอย่างนั้น การทดสอบอัตโนมัติของ API ก็ยังมีความสำคัญน้อยลงในกระบวนการทดสอบ เฟรมเวิร์ก Rest Assured.io ได้ทำให้มันง่ายมากโดยใช้พื้นฐานของ Java หลัก ทำให้การทดสอบอัตโนมัตินี้เป็นสิ่งที่น่าเรียนรู้มาก

เหตุใดจึงต้องการ Rest-Assured?

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

ก่อนหน้านี้ ทีมงานใช้ภาษาแบบไดนามิก เช่น Groovy และใช้ Ruby ในการบรรลุเป้าหมายนี้ ซึ่งเป็นเรื่องที่ท้าทาย ดังนั้น การทดสอบ API จึงไม่ได้รับความนิยมอย่างแพร่หลายในกลุ่มผู้ทดสอบฟังก์ชันการทำงาน

อย่างไรก็ตาม ด้วย Rest Assured การทดสอบ API แบบอัตโนมัติและการส่งคำขอ HTTPS แบบง่ายๆ พร้อมการปรับแต่งที่ใช้งานง่าย จะกลายเป็นเรื่องง่ายหากผู้ใช้มีความรู้พื้นฐานอยู่บ้าง JavaRest Assured มีประโยชน์สำหรับการทำความเข้าใจการทดสอบ API และการทดสอบการบูรณาการ Rest Assured ช่วยสร้างความมั่นใจในส่วนแบ็กเอนด์ ในขณะที่ผู้ทดสอบฟรอนต์เอนด์สามารถมุ่งเน้นไปที่ UI และการทำงานฝั่งไคลเอ็นต์ได้ Rest Assured เป็นโอเพนซอร์ส และการเพิ่มเมธอดและไลบรารีอย่างต่อเนื่องทำให้เป็นตัวเลือกที่ยอดเยี่ยมสำหรับการทำงานอัตโนมัติของ API

อันดับ 1 ดีที่สุดโดยรวมทดสอบซิกมา
9.8/ 10
★★★★★
รับการสาธิตฟรี
PractiTest
9.5/ 10
★★★★★
เยี่ยมชมร้านค้า PractiTest
Testiny
9.3/ 10
★★★★★
เยี่ยมชมร้านค้า Testiny
ที่ดีที่สุดสำหรับทดสอบระบบอัตโนมัติการจัดการการทดสอบทีม QA ขนาดเล็กและขนาดกลาง
คุณลักษณะที่สำคัญ✓สร้างการทดสอบอัตโนมัติได้ในไม่กี่วินาที✓การจัดการการทดสอบแบบรวมศูนย์✓กรณีทดสอบแบบแมนนวล + แบบอัตโนมัติ
integrations✓Jenkins, Slackจิระ✓จิรา Jenkins, Slack✓จิร่า, กิตฮับ, กิตแล็บ
ทดลองฟรีการสาธิตฟรีทดลองใช้ฟรี 14 วันการสาธิตฟรี
รับการสาธิตฟรีเยี่ยมชมร้านค้า PractiTestเยี่ยมชมร้านค้า Testiny

REST Assured เทียบกับ Postman: ความแตกต่างที่สำคัญ

ทั้ง REST Assured และ Postman เครื่องมือตรวจสอบความถูกต้องของ REST API แต่ละแบบเหมาะสมกับขั้นตอนที่แตกต่างกันของวงจรการทดสอบ การเลือกเครื่องมือที่เหมาะสมขึ้นอยู่กับทักษะของทีม ขอบเขตของโครงการ และความต้องการในการบูรณาการ

แง่มุม มั่นใจได้ Postman
ประเภท Java ไลบรารีสำหรับการทำงานอัตโนมัติโดยใช้โค้ด ไคลเอนต์ API แบบ GUI พร้อมรองรับการเขียนสคริปต์
กรณีใช้งานที่ดีที่สุด ไปป์ไลน์การบูรณาการอย่างต่อเนื่องและชุดทดสอบการถดถอย การสำรวจด้วยตนเองและการตรวจสอบ API อย่างรวดเร็ว
ความต้องการทักษะ แกน Java ความรู้ที่จำเป็น การเขียนโค้ดน้อยที่สุด; การใช้งาน Javaตัวอย่างสคริปต์
การรายงาน ผสานรวมกับ TestNG, JUnitและออลลัวร์ สรุปผลการทำงานแบบสำเร็จรูปผ่านทาง Newman CLI

หลายทีมใช้ Postman สำหรับต้นแบบแรกเริ่มping และเปลี่ยนไปใช้ REST Assured สำหรับการทดสอบการถดถอยอัตโนมัติเมื่อ API ทำงานได้tract มีเสถียรภาพ

วิธีการตั้งค่า Rest Assured.io ด้วย Eclipse

การตั้งค่า REST Assured นั้นเกี่ยวข้องกับส่วนประกอบหลักสามอย่าง: Javaรวมถึง IDE และ Maven ทำตามขั้นตอนด้านล่างเพื่อหลีกเลี่ยงข้อผิดพลาดในการสร้างในภายหลัง

ขั้นตอนที่ 1) ติดตั้ง Java- อ้างถึงสิ่งนี้ ให้คำแนะนำ

ขั้นตอนที่ 2) ดาวน์โหลด IDE เพื่อเริ่มต้น: คราส

ขั้นตอนที่ 3) ติดตั้ง Maven และตั้งค่า Eclipse ของคุณ อ้างอิง Good Farm Animal Welfare Awards.

ตั้งค่าได้อย่างมั่นใจ

  1. สร้างโปรเจ็กต์ Maven ใน IDE ของคุณ เราใช้ IntelliJ แต่คุณจะได้โครงสร้างที่คล้ายกันใน IDE อื่นๆ ที่คุณใช้
  2. เปิดไฟล์ POM.xml ของคุณ

โครงสร้างโปรเจ็กต์สำหรับการตั้งค่า REST Assured ด้วย Maven

โครงสร้างโปรเจ็กต์สำหรับเวิร์กสเปซ Maven ที่ได้รับการรับรอง REST

สำหรับ Rest Assured.io: สำหรับ Java เวอร์ชัน < 9 ผู้ใช้:

เพิ่มการพึ่งพาด้านล่างให้กับ POM.xml ของคุณ:

<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>json-path</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>


<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>xml-path</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>


<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>json-schema-validator</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>

สำหรับ Rest Assured.io: สำหรับ Java ผู้ใช้งานเวอร์ชัน 9 ขึ้นไป:

<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured-all</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>

การแก้ไขปัญหา:

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

  1. ทำการสร้างบิลด์ด้วย Maven เพื่อนำเข้าไลบรารีที่จำเป็นทั้งหมด คุณสามารถดูวิธีการตั้งค่า Maven ได้ที่นี่ Guru99.
  2. หากยังคงมีข้อผิดพลาด ให้รันคำสั่ง Maven clean ตามด้วย Maven install การสร้างควรจะเสร็จสมบูรณ์โดยไม่มีข้อผิดพลาด
  3. เพิ่มการนำเข้าด้านล่างนี้ลงในไฟล์ของคุณ Java ตรวจสอบคลาสและยืนยันว่าไม่มีข้อผิดพลาดในการคอมไพล์
import io.restassured.RestAssured.*;
import io.restassured.matcher.RestAssuredMatchers.*;
import org.hamcrest.Matchers.*;

สคริปต์ Rest Assured ง่ายๆ ตัวแรก

เมื่อกำหนดส่วนประกอบที่จำเป็นเรียบร้อยแล้ว คุณก็สามารถเริ่มเขียนสคริปต์แรกของคุณได้เลย เฟรมเวิร์กนี้ใช้รูปแบบการพัฒนาแบบเน้นพฤติกรรม (Behavior-Driven Development หรือ BDD) ซึ่งอ่านง่ายเหมือนภาษาอังกฤษ

ไวยากรณ์:

ไวยากรณ์ของ Rest Assured.io เป็นส่วนที่อ่านง่ายที่สุดของเฟรมเวิร์ก เนื่องจากมีลักษณะคล้าย BDD และเข้าใจง่ายมาก

Given().
        param("x", "y").
        header("z", "w").
when().
Method().
Then().
        statusCode(XXX).
        body("x", "y", equalTo("z"));

คำอธิบาย:

Code คำอธิบาย
ที่ให้ไว้() คีย์เวิร์ด 'Given' ช่วยให้คุณกำหนดพื้นหลังได้ ในส่วนนี้ คุณจะส่งส่วนหัวของคำขอ พารามิเตอร์คำค้นหาและเส้นทาง เนื้อหา และคุกกี้ ส่วนนี้เป็นตัวเลือกเสริม หากคุณไม่ต้องการรายการเหล่านี้ในคำขอ
เมื่อไร() คำว่า 'when' บ่งบอกถึงเงื่อนไขเบื้องต้นของสถานการณ์ของคุณ ตัวอย่างเช่น 'เมื่อ' คุณได้รับ/โพสต์/วางสิ่งใดสิ่งหนึ่ง ให้ทำสิ่งอื่น
วิธี() แทนที่ด้วยการดำเนินการ CRUD ใดๆ ก็ได้ (รับ/ส่ง/ใส่/ลบ)
แล้ว() เงื่อนไข assert และ matcher ของคุณจะอยู่ตรงนี้

ตอนนี้คุณได้ตั้งค่าและทำความเข้าใจพื้นฐานเกี่ยวกับไวยากรณ์แล้ว มาสร้างการทดสอบง่ายๆ ครั้งแรกกัน ไม่เป็นไรหากโครงสร้างดูแปลกใหม่สำหรับคุณ เมื่อคุณเขียนโค้ดต่อไปและตีความแต่ละบรรทัด คุณก็จะเข้าใจมันได้เอง

คุณจะเอาอะไรมา?

เปิดเบราว์เซอร์ของคุณแล้วกด – https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1- ตรวจสอบให้แน่ใจว่าคุณเห็นบางสิ่งด้านล่าง

ตัวอย่างการตอบสนอง API ของสคริปต์ Rest Assured

ตัวอย่างการตอบสนอง API ที่บันทึกโดย REST Assured

ในกรณีที่คุณได้รับข้อผิดพลาดในเบราว์เซอร์เมื่อพยายามขอรับการตอบกลับสำหรับคำขอ:

  1. ตรวจสอบว่าคุณใช้ HTTPS หรือ HTTP เบราว์เซอร์ของคุณอาจมีการตั้งค่าที่บล็อกเว็บไซต์ที่ไม่ปลอดภัย
  2. ตรวจสอบว่ามีพร็อกซีหรือไฟร์วอลล์ใดปิดกั้นการเปิดเว็บไซต์ในเบราว์เซอร์ของคุณหรือไม่

*หมายเหตุ – คุณไม่ได้ใช้ส่วนหัว ส่วนเนื้อหา และไม่ได้ใช้คุกกี้เลย มันเป็นแบบนี้ URLและคุณกำลังดึงเนื้อหาจาก API แทนที่จะโพสต์หรืออัปเดตเนื้อหาที่มีอยู่แล้ว ซึ่งทำให้เป็นการเรียกใช้แบบ GET จำสิ่งนี้ไว้เพื่อให้เข้าใจการทดสอบแรกของเราได้ดียิ่งขึ้น

วัตถุประสงค์ของการทดสอบของคุณ:

เป้าหมายของสคริปต์คือการพิมพ์เอาต์พุตเดียวกันบนคอนโซล IDE ของคุณเหมือนกับที่คุณได้รับบนเบราว์เซอร์ผ่าน Rest Assured

ให้เราเขียนโค้ดนี้ตามขั้นตอนด้านล่าง:

ได้รับการตอบสนองของร่างกาย

ขั้นตอน 1) สร้างคลาสชื่อ “myFirstRestAssuredClass”

ขั้นตอน 2) สร้างเมธอดชื่อ “getResponseBody”

ขั้นตอน 3) เช่นเดียวกับโครงสร้างที่ได้เรียนรู้ไปก่อนหน้านี้ คือ given, when และ then ให้พิมพ์โค้ดด้านล่างนี้:

ที่ให้ไว้(). -> ไม่จำเป็นต้องมีส่วนหัว ไม่มีแบบสอบถามหรือพารามิเตอร์เส้นทาง

เมื่อ(). -> ไม่มีการตั้งค่าเงื่อนไขเฉพาะ

รับ('https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1'). -> เฉพาะ URL จำเป็นต้องจัดหาอุปกรณ์เพิ่มเติม

จากนั้น(). -> ไม่จำเป็นต้องมีการยืนยันใดๆ เป็นพิเศษ

log().all() -> เมื่อได้รับข้อมูลการตอบกลับทั้งหมดแล้ว ให้บันทึกข้อมูลการตอบกลับ ส่วนหัว และทุกอย่างที่คำขอส่งกลับมาให้คุณ

public static void getResponseBody(){
   given().when().get("https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1").then().log()
  .all();

}

ทีนี้ลองสังเกตดูว่า URL คำว่า "ใช้" นั้นยาวและอ่านยาก หากสังเกตดีๆ จะเห็นว่ามีการใช้พารามิเตอร์การค้นหา 3 ตัว:

  1. รหัสลูกค้า
  2. รหัสผ่าน
  3. บัญชี_เลขที่

Rest Assured ช่วยให้เราส่งผ่านแต่ละส่วน (query, path, header param) แยกกัน ทำให้โค้ดอ่านง่ายและบำรุงรักษาง่ายขึ้น นอกจากนี้ เรายังสามารถกำหนดพารามิเตอร์ข้อมูลจากไฟล์ภายนอกได้ตามต้องการ

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

public static void getResponseBody(){

   given().queryParam("CUSTOMER_ID","68195")
           .queryParam("PASSWORD","1234!")
           .queryParam("Account_No","1")
           .when().get("https://demo.guru99.com/V4/sinkministatement.php").then().log()
           .body();
}

**โปรดทราบว่าเราใช้คำว่า “body” แทนคำว่า “all” ซึ่งช่วยให้เราเข้าใจได้ง่ายขึ้น**tracเฉพาะส่วนเนื้อหาของคำตอบเท่านั้น

Output:

รับรหัสสถานะการตอบกลับ

วิธีการต่อไปที่เราจะเขียนสคริปต์คือการรับรหัสสถานะและใส่คำสั่งตรวจสอบเพื่อยืนยันความถูกต้อง

ขั้นตอน 1) สร้างเมธอดชื่อ getResponseStatus()

ขั้นตอน 2) ใช้โครงสร้างคำขอเดียวกันกับที่ใช้ด้านบน คัดลอกและวาง

ขั้นตอน 3) แทนที่จะบันทึกข้อมูล ให้ใช้ 'getStatus' แทนCode'เมธอดในตัวของ Rest Assured สำหรับดึงค่ารหัสสถานะ'

ขั้นตอน 4) เพื่อยืนยันว่ารหัสสถานะของคุณคือ 200 ให้ใช้คำหลัก – assertThat().statusCode(ที่คาดหวังCode).

**บันทึก - URL เป็นตัวแปรที่ใช้เพื่อความง่ายในการเขียน URL เก็บคำขอ API ทั้งหมดไว้ URL.

public static void getResponseStatus(){
   int statusCode= given().queryParam("CUSTOMER_ID","68195")
           .queryParam("PASSWORD","1234!")
           .queryParam("Account_No","1") .when().get("https://demo.guru99.com/V4/sinkministatement.php").getStatusCode();
   System.out.println("The response status is "+statusCode);

   given().when().get(url).then().assertThat().statusCode(200);
}

Output:

ความต้องการทางธุรกิจ

กฎพื้นฐานของระบบอัตโนมัติประการหนึ่งคือเราต้องวางจุดตรวจสอบเพื่อให้การทดสอบดำเนินต่อไปเฉพาะเมื่อตรงตามเงื่อนไขที่จำเป็นทั้งหมดเท่านั้น ในการทดสอบ API การตรวจสอบขั้นพื้นฐานที่สุดคือการตรวจสอบว่ารหัสสถานะของคำขออยู่ในรูปแบบ 2XX หรือไม่

รหัสที่สมบูรณ์จนถึงขณะนี้:

import java.util.ArrayList;
import static io.restassured.RestAssured.*;
import static java.util.concurrent.TimeUnit.MILLISECONDS;

public class myFirstRestAssuredClass {

   final static String url="https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1";

   public static void main(String args[]) {

      getResponseBody();
     getResponseStatus();

; }

   //This will fetch the response body as is and log it. given and when are optional here
   public static void getResponseBody(){
       given().when().get(url).then().log()
      .all();

  given().queryParam("CUSTOMER_ID","68195")
               .queryParam("PASSWORD","1234!")
               .queryParam("Account_No","1") .when().get("https://demo.guru99.com/V4/sinkministatement.php").then().log().body();
   }

public static void getResponseStatus(){
   int statusCode= given().queryParam("CUSTOMER_ID","68195")
           .queryParam("PASSWORD","1234!")
           .queryParam("Account_No","1")
           .when().get("https://demo.guru99.com/V4/sinkministatement.php").getStatusCode();
   System.out.println("The response status is "+statusCode);

   given().when().get(url).then().assertThat().statusCode(200);
}

}

* หมายเหตุ:

  1. รหัส 200 ถือเป็นการตอบสนองที่ประสบความสำเร็จในสถานการณ์นี้ บางครั้ง คุณอาจต้องการให้คำขอไม่สำเร็จ ซึ่งในกรณีนั้นคุณอาจใช้รหัส 4XX หรือ 5XX ลองเปลี่ยนรหัสสถานะโดยการป้อนพารามิเตอร์ที่ไม่ถูกต้องแล้วตรวจสอบดู
  2. เมื่อเรายืนยันเงื่อนไข จะไม่มีการพิมพ์บนคอนโซลเว้นแต่จะมีข้อผิดพลาด

สคริปต์เพื่อดึงส่วนต่างๆ ของการตอบกลับ

นอกเหนือจากเนื้อหาการตอบกลับและรหัสสถานะแล้ว REST Assured ยังแสดงส่วนหัว เวลาตอบสนอง และประเภทเนื้อหาผ่านตัวอย่างที่สามารถเชื่อมโยงกันได้tracวิธีการของ tor คำหลัก 'ex'trac't' เป็นสิ่งจำเป็นสำหรับการดึงชิ้นส่วนเฉพาะเหล่านี้

ส่วนหัว

Rest Assured เป็นภาษาที่ตรงไปตรงมา และการดึงข้อมูลส่วนหัวก็ทำได้ง่ายเช่นกัน ชื่อวิธีการคือ headers() เช่นเดียวกับเมื่อก่อน เราจะสร้างวิธีการแบบสแตนด์อโลนเพื่อทำเช่นเดียวกัน

public static void getResponseHeaders(){
   System.out.println("The headers in the response "+
                   get(url).then().extract()
           .headers());
}

โปรดทราบว่า 'given().when()' ถูกข้ามไปในที่นี้ และโค้ดบรรทัดเริ่มต้นจาก get() เนื่องจากไม่มีเงื่อนไขหรือการตรวจสอบใดๆ ก่อนที่จะส่งคำขอและรับการตอบกลับ ในกรณีเช่นนี้ การใช้งาน 'given().when()' นั้นเป็นทางเลือกเสริม

Output:

ความต้องการทางธุรกิจ:

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

เวลาตอบสนอง

เพื่อให้ได้เวลาที่จำเป็นในการดึงการตอบสนองจากแบ็กเอนด์หรือระบบดาวน์สตรีมอื่นๆ Rest Assured จัดเตรียมวิธีการที่เรียกว่า 'timeIn' พร้อมด้วย timeUnit ที่เหมาะสมเพื่อรับเวลาที่ใช้ในการส่งคืนการตอบกลับ

public static void getResponseTime(){
  System.out.println("The time taken to fetch the response "+get(url)
         .timeIn(TimeUnit.MILLISECONDS) + " milliseconds");
}

Output:

ความต้องการทางธุรกิจ:

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

ชนิดของเนื้อหา

คุณสามารถตรวจสอบประเภทเนื้อหาของการตอบกลับที่ส่งกลับมาได้โดยใช้เมธอด “contentType()”

public static void getResponseContentType(){
   System.out.println("The content type of response "+
           get(url).then().extract()
              .contentType());
}

เอาท์พุต

ความต้องการทางธุรกิจ:

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

ดึงข้อมูลองค์ประกอบ JSON แต่ละรายการ

จากคำตอบที่ให้มา คุณได้รับมอบหมายให้คำนวณยอดรวม คุณต้องดึงจำนวนเงินทั้งหมดออกมาแล้วบวกเข้าด้วยกัน

ขั้นตอน:

ขั้นตอน 1) ช่องจำนวนเงินอยู่ในอาร์เรย์ที่มีคีย์ "statements" ซึ่งอยู่ในลิสต์ที่มีคีย์ "result" อีกทีหนึ่ง

ขั้นตอน 2) Rest Assured มีกลไกในการเข้าถึงค่าต่างๆ ใน ​​API โดยใช้ "path"

ขั้นตอน 3) เส้นทางในการเข้าถึงจำนวนเงินคือ “result.statements.AMOUNT” ลองนึกภาพเหมือน XPath ในภาษาอังกฤษ Selenium.

ขั้นตอน 4) ดึงข้อมูลจำนวนเงินทั้งหมดในชุดข้อมูล จากนั้นวนลูปผ่านค่าทั้งหมดเพื่อคำนวณผลรวม

public static void getSpecificPartOfResponseBody(){

ArrayList<String> amounts = when().get(url).then().extract().path("result.statements.AMOUNT") ;
int sumOfAll=0;
for(String a:amounts){

    System.out.println("The amount value fetched is "+a);
    sumOfAll=sumOfAll+Integer.valueOf(a);
}
System.out.println("The total amount is "+sumOfAll);

}

หมายเหตุ: เนื่องจากค่าจำนวนเงินเป็นข้อมูลประเภทสตริง เราจึงแปลงเป็นจำนวนเต็มก่อนทำการบวก

Output:

แนวทางปฏิบัติที่ดีที่สุดสำหรับการทดสอบอัตโนมัติด้วย REST Assured

เมื่อคุณเข้าใจพื้นฐานแล้ว การนำรูปแบบที่เป็นระเบียบมาใช้จะช่วยให้ชุดทดสอบของคุณมีความน่าเชื่อถือเมื่อ API ขยายใหญ่ขึ้น แนวทางปฏิบัติด้านล่างนี้จะช่วยให้ทีมหลีกเลี่ยงการทดสอบที่ไม่เสถียรและภาระงานบำรุงรักษาที่มากเกินไป

  1. รวมศูนย์ฐาน URL: จัดเก็บ URI พื้นฐานและโทเค็นการตรวจสอบสิทธิ์ไว้ในคลาสการกำหนดค่าหรือไฟล์คุณสมบัติเดียว เพื่อหลีกเลี่ยงการทำซ้ำและทำให้การสลับสภาพแวดล้อมง่ายขึ้น
  2. ใช้ข้อกำหนดการร้องขอและการตอบกลับ: สร้างอ็อบเจ็กต์ RequestSpecBuilder และ ResponseSpecBuilder ที่สามารถนำกลับมาใช้ซ้ำได้ ซึ่งจะช่วยลดโค้ดซ้ำซ้อนเมื่อการทดสอบจำนวนมากใช้ส่วนหัวหรือเงื่อนไขร่วมกัน
  3. ตรวจสอบความถูกต้องของ JSON Schema: ผสานรวม REST Assured กับโมดูล json-schema-validator เพื่อยืนยันความถูกต้องtracความสมบูรณ์ของโครงสร้างข้อมูล การตรวจสอบ Schema จะตรวจจับการเปลี่ยนแปลงที่ส่งผลกระทบก่อนที่จะไปถึงผู้ใช้งานปลายทาง
  4. แยกข้อมูลทดสอบออกสู่ภายนอก: จัดเก็บข้อมูลในไฟล์ JSON หรือใช้ผู้ให้บริการข้อมูลจาก TestNGข้อมูลที่ถูกกำหนดไว้ตายตัวจะล้าสมัยอย่างรวดเร็ว
  5. ดำเนินการทดสอบอิสระ: การทดสอบแต่ละครั้งควรตั้งค่าและลบข้อมูลของตนเอง ชุดทดสอบที่ขึ้นอยู่กับลำดับการทำงานอาจล้มเหลวอย่างไม่คาดคิดในการทำงานแบบขนานของ CI
  6. เลือกบันทึกข้อมูลเฉพาะส่วนที่ต้องการ: ใช้ log().ifError() ในชุดทดสอบที่เสถียร และ log().all() ในระหว่างการดีบัก บันทึกรายละเอียดมากเกินไปจะทำให้ไปป์ไลน์ CI ช้าลงและบดบังปัญหาที่แท้จริง
  7. เชื่อมต่อเข้ากับ CI/CD: เรียกใช้งานชุดทดสอบ REST Assured ผ่าน Maven Surefire หรือ Failsafe ใน JenkinsGitHub Actions หรือ GitLab รัน smoke check ในทุก commit และรัน regression แบบเต็มรูปแบบข้ามคืน

การปลูกฝังนิสัยเหล่านี้ตั้งแต่เนิ่นๆ จะเปลี่ยนการทำงานอัตโนมัติของ API ให้กลายเป็นสินทรัพย์ระยะยาว แทนที่จะเป็นอุปสรรคที่เปราะบาง

คำถามที่พบบ่อย

ใช่แล้ว ผู้ช่วย AI สมัยใหม่ เช่น ChatGPT และ GitHub Copilot สามารถสร้างโครงร่างการทดสอบ REST Assured จากข้อกำหนด API ได้ วิศวกรควรตรวจสอบโค้ดที่สร้างขึ้นอีกครั้งในส่วนของการยืนยัน การจัดการข้อมูล และกรณีพิเศษ ก่อนที่จะรวมเข้าด้วยกัน

เครื่องมือที่ขับเคลื่อนด้วย AI จะวิเคราะห์รูปแบบการตอบสนองและแนะนำตัวระบุตำแหน่งหรือการยืนยันที่สามารถแก้ไขตัวเองได้ นอกจากนี้ยังแจ้งเตือนการเปลี่ยนแปลงโครงสร้างข้อมูล แนะนำการปรับปรุงโครงสร้าง และอัปเดตข้อมูลทดสอบโดยอัตโนมัติ ซึ่งช่วยลดการบำรุงรักษาด้วยตนเองเมื่อ API มีการเปลี่ยนแปลงบ่อยครั้ง

REST Assured คือ Java ไลบรารีที่สร้างขึ้นเพื่อการทำงานอัตโนมัติโดยใช้โค้ดในกระบวนการ CI (Continuous Integration) Postman เป็นไคลเอ็นต์ GUI สำหรับการสำรวจด้วยตนเองและการเขียนสคริปต์อย่างรวดเร็ว ทีมงานมักจะผสมผสานทั้งสองอย่างเข้าด้วยกันตลอดวงจรการทดสอบ

REST Assured ได้รับการปรับให้เหมาะสมสำหรับ REST และ JSON สามารถส่งข้อมูล XML ดิบสำหรับ SOAP ได้ แต่ต้องการเครื่องมือเฉพาะทาง เช่น SoapUI ให้การสนับสนุนที่ครอบคลุมยิ่งขึ้นสำหรับการแยกวิเคราะห์ WSDL และการยืนยันเฉพาะ SOAP

REST Assured เข้ากันได้อย่างลงตัวกับ TestNG และ JUnit สำหรับการยืนยัน การเชื่อมต่อวงจรชีวิต และการรายงาน Allure, Extent Reports และ Maven Surefire เพิ่มการแสดงภาพและการบูรณาการ CI เข้ามาด้วย

สรุปโพสต์นี้ด้วย: