في عالم تطوير البرمجيات، أصبحت واجهات برمجة التطبيقات (APIs) العمود الفقري للتطبيقات الحديثة. مع تزايد تعقيد هذه الواجهات وأهميتها، لم يكن هناك حاجة لمناهج اختبار قوية وفعالة أكثر من أي وقت مضى. أدخل Rest Assured، مكتبة قائمة على جافا غيرت طريقة تعاملنا مع اختبار واجهات برمجة التطبيقات.
حققت Rest Assured شعبية كبيرة بين المطورين ومحترفي ضمان الجودة بفضل بساطتها وقوتها في أتمتة اختبارات REST API. تجعل صيغتها التعبيرية ودمجها السلس مع جافا خيارًا مثاليًا للفرق التي تسعى لتنفيذ استراتيجيات اختبار API شاملة.
في هذه الدليل الشامل، سنتناول باهتمام أكبر اختبار واجهات برمجة التطبيقات باستخدام Rest Assured، متناولين كل شيء من الإعداد الأساسي إلى التقنيات المتقدمة، وحتى استكشاف كيفية مقارنتها بأدوات أخرى في مجال اختبار واجهات برمجة التطبيقات.
ما هي Rest Assured في اختبار واجهات برمجة التطبيقات؟
Rest Assured هي مكتبة قائمة على جافا مصممة خصيصًا لاختبار واجهات برمجة التطبيقات RESTful. توفر لغة مخصصة (DSL) لإجراء طلبات HTTP والتحقق من الاستجابات. تشمل الميزات الرئيسية:
- واجهة API سلسة لكتابة اختبارات سهلة
- دعم تحليل XML و JSON
- تكامل مع أدوات نظام جافا (TestNG، JUnit، إلخ)
- قدرات تحقق شاملة

ما هي واجهة برمجة التطبيقات REST في الاختبار؟
REST (نقل الحالة التمثيلية) API هو نمط معماري لتصميم تطبيقات الشبكة. في سياق الاختبار، يتضمن اختبار واجهات برمجة التطبيقات REST:
- التحقق من التعامل الصحيح مع طرق HTTP (GET، POST، PUT، DELETE، إلخ)
- التحقق من رموز حالة الاستجابة
- فحص هيكل ومحتوى الحمولة الاستجابية
- اختبار سلوك واجهة برمجة التطبيقات تحت سيناريوهات مختلفة (مدخلات صحيحة/غير صحيحة، مصادقة، إلخ)
- التحقق من تغييرات الحالة بعد عمليات واجهة برمجة التطبيقات
ما الفرق بين Postman و Rest Assured؟
بينما تُستخدم الأداتان في اختبار واجهات برمجة التطبيقات، إلا أن لهما أغراضًا مختلفة:
الميزة | Postman | Rest Assured |
---|---|---|
الواجهة | قائمة على واجهة المستخدم الرسومية | قائمة على التعليمات البرمجية |
اللغة | JavaScript | Java |
منحنى التعلم | أقل | أكثر حدة |
الأتمتة | ممكنة مع Newman | مدمجة |
دمج CI/CD | يتطلب إعداد إضافي | سلس |
مرونة البرمجة النصية | مقيدة ببرمجة Postman | كامل نظام جافا |
عادة ما يُفضل استخدام Rest Assured عندما تحتاج إلى دمج اختبارات واجهات برمجة التطبيقات في إطار أتمتة اختباراتك المستندة إلى جافا أو عندما تحتاج إلى سيناريوهات اختبار أكثر تعقيدًا.
ما الفرق بين TestNG و Rest Assured؟
يخدم كل من TestNG و Rest Assured أغراضًا مختلفة ولكنهما يُستخدمان معًا غالبًا:
الميزة | TestNG | Rest Assured |
---|---|---|
الغاية الأساسية | إطار اختبار | مكتبة اختبار واجهات برمجة التطبيقات |
النطاق | اختبار متعدد الأغراض | محدد لاختبار واجهات برمجة التطبيقات |
الميزات | تنظيم الاختبارات، التنفيذ المتوازي، التقارير | طلبات HTTP، التحقق من الاستجابة |
دعم اللغة | Java | Java |
يمكنك استخدام TestNG لتنظيم وتشغيل اختبارات Rest Assured، مجمعًا بين نقاط القوة لكلتا الأداتين. على سبيل المثال:
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import static io.restassured.RestAssured.*;
import static org.hamcrest.Matchers.*;
public class CombinedTest {
@BeforeClass
public void setup() {
baseURI = "https://api.example.com";
basePath = "/v1";
}
@Test(groups = "smoke")
public void testGetUser() {
given()
.pathParam("id", 1)
.when()
.get("/users/{id}")
.then()
.statusCode(200)
.body("name", notNullValue());
}
@Test(groups = "regression")
public void testCreateUser() {
String newUser = "{\"name\":\"John Doe\",\"email\":\"john@example.com\"}";
given()
.contentType("application/json")
.body(newUser)
.when()
.post("/users")
.then()
.statusCode(201)
.body("id", notNullValue());
}
}
يستخدم هذا المثال تعليقات TestNG لتنظيم الاختبارات وRest Assured من أجل منطق اختبار واجهة برمجة التطبيقات الفعلي.
البدء باستخدام اختبار واجهات برمجة التطبيقات Rest Assured
قبل أن نتعمق في تفاصيل Rest Assured، دعونا نقوم بإعداد بيئة التطوير الخاصة بنا لضمان استعدادنا لبدء الاختبار.
إعداد بيئتك
تثبيت جافا: تتطلب Rest Assured جافا 8 أو أعلى. قم بتنزيل وتثبيت أحدث JDK من موقع Oracle على الويب أو استخدم OpenJDK.
اختيار IDE: بينما يمكنك استخدام أي محرر نصوص، فإن بيئة التطوير المتكاملة (IDE) يمكن أن تعزز إنتاجيتك بشكل كبير. من الخيارات الشائعة:
- IntelliJ IDEA
- Eclipse
- Visual Studio Code مع ملحقات جافا
إعداد مشروع Maven: سيساعد Maven في إدارة الاعتمادات الخاصة بنا. أنشئ مشروع Maven جديد في IDE الخاص بك أو استخدم سطر الأوامر:
mvn archetype:generate -DgroupId=com.example -DartifactId=rest-assured-demo -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
إضافة اعتماد Rest Assured: افتح ملف pom.xml
الخاص بك وأضف الاعتماد التالي:
<dependencies>
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<version>4.4.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.4.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest</artifactId>
<version>2.2</version>
<scope>test</scope>
</dependency>
</dependencies>
يشمل ذلك Rest Assured وTestNG لتنظيم الاختبارات وHamcrest لمطابقة إضافية.
تحديث Maven: قم بتشغيل mvn clean install
لتنزيل الاعتمادات.
مع انتهاء هذه الخطوات، أصبحت الآن جاهزًا لبدء كتابة اختبارات Rest Assured!
المفاهيم الأساسية لاختبار واجهات برمجة التطبيقات Rest Assured
يتبع Rest Assured صيغة Given-When-Then، المستوحاة من تطوير مدفوع بالسلوك (BDD). تجعل هذه البنية الاختبارات قابلة للقراءة والبديهة، حتى لمن ليسوا على دراية بقاعدة الشيفرة.
بنية Given-When-Then
- Given: إعداد شروط ما قبل الاختبار (مثل: المعلمات، الرؤوس، المصادقة)
- When: تنفيذ إجراء واجهة برمجة التطبيقات (GET، POST، PUT، DELETE، إلخ)
- Then: التحقق من الاستجابة (رمز الحالة، محتوى الجسم، الرؤوس)
دعونا نحلل مثالًا بسيطًا:
import static io.restassured.RestAssured.*;
import static org.hamcrest.Matchers.*;
import org.testng.annotations.Test;
public class SimpleTest {
@Test
public void testGetRequest() {
given()
.baseUri("https://api.example.com")
.when()
.get("/users")
.then()
.statusCode(200)
.body("data.size()", greaterThan(0))
.body("data[0].id", notNullValue())
.body("data[0].email", containsString("@"));
}
}
يفعل هذا الاختبار ما يلي:
- يحدد URI الأساسي لواجهة برمجة التطبيقات
- يرسل طلب GET إلى نقطة نهاية "/users"
- يتحقق أن:
- رمز الحالة هو 200
- الاستجابة تحتوي على مصفوفة بيانات غير فارغة
- لدى المستخدم الأول في المصفوفة معرف غير فارغ
- بريد المستخدم الأول يحتوي على رمز "@"
فهم صيغة Rest Assured
تستخدم Rest Assured واجهة سلسة، مما يسمح لك بسلسلة استدعاءات الطرق. إليك تحليل لبعض الطرق الشائعة:
given()
: تبدأ مواصفات الاختبارbaseUri()
،basePath()
: تعيين عنوان URL الأساسي والمسار للطلبparam()
،queryParam()
: إضافة معلمات الاستعلامheader()
،headers()
: تعيين رؤوس الطلبbody()
: تعيين جسم الطلبwhen()
: يتم وضع علامة على بداية قسم الطلبget()
،post()
،put()
،delete()
: طرق HTTPthen()
: تبدأ قسم التحققstatusCode()
: التأكيد على رمز حالة الاستجابةbody()
: التحقق من جسم الاستجابة
تقنيات اختبار واجهات برمجة التطبيقات Rest Assured المتقدمة
مع زيادة راحتك مع Rest Assured، سترغب في استكشاف ميزاتها الأكثر تقدمًا لإنشاء مجموعات اختبار قوية وشاملة.
التعامل مع المصادقة في اختبار واجهات برمجة التطبيقات Rest Assured
تتطلب العديد من واجهات برمجة التطبيقات المصادقة. تدعم Rest Assured طرق المصادقة المختلفة:
المصادقة الأساسية
given()
.auth().basic("username", "password")
.when()
.get("/secure-endpoint")
.then()
.statusCode(200);
OAuth 2.0
given()
.auth().oauth2("your_access_token")
.when()
.get("/oauth2-protected-endpoint")
.then()
.statusCode(200);
المصادقة المخصصة
لواجهات برمجة التطبيقات التي تحتوي على آليات مصادقة مخصصة، يمكنك إضافة الرؤوس يدويًا:
given()
.header("X-API-Key", "your-api-key")
.when()
.get("/custom-auth-endpoint")
.then()
.statusCode(200);
تمرير الاختبارات في اختبار واجهات برمجة التطبيقات Rest Assured
تتيح الاختبارات المنخفضة تشغ