برنامه نویسی

چارچوب های تست API – انجمن DEV

Summarize this content to 400 words in Persian Lang
در توسعه نرم افزار مدرن، تست API برای اطمینان از قابلیت اطمینان و کیفیت خدمات وب بسیار مهم است. بیایید برخی از محبوب ترین فریم ورک ها را با مثال های کد عملی بررسی کنیم.

مطمئن باشید: تست API RESTful در جاوا

Rest-Assured به دلیل نحو روان و رسا خود متمایز است که برای تست REST API در جاوا ایده آل است.

@Test
public void testGetUsers() {
given()
.header(“Content-Type”, “application/json”)
.when()
.get(“https://api.example.com/users”)
.then()
.statusCode(200)
.body(“users.size()”, greaterThan(0))
.body(“users[0].name”, notNullValue());
}

@Test
public void testCreateUser() {
User user = new User(“John”, “john@email.com”);

given()
.body(user)
.contentType(ContentType.JSON)
.when()
.post(“https://api.example.com/users”)
.then()
.statusCode(201)
.body(“id”, notNullValue())
.body(“name”, equalTo(“John”));
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

پستچی: تست بدون کد

Postman اجازه می دهد تا تست های خودکار را با استفاده از جاوا اسکریپت در رابط گرافیکی خود ایجاد کنید:

// Test to verify successful response and data structure
pm.test(“Status code is 200”, function () {
pm.response.to.have.status(200);
});

pm.test(“Response contains correct data”, function () {
var jsonData = pm.response.json();

pm.expect(jsonData).to.have.property(‘users’);
pm.expect(jsonData.users).to.be.an(‘array’);
pm.expect(jsonData.users[0]).to.have.property(‘id’);
pm.expect(jsonData.users[0]).to.have.property(‘name’);
});

// Test to validate JSON schema
var schema = {
“type”: “object”,
“properties”: {
“id”: { “type”: “number” },
“name”: { “type”: “string” },
“email”: { “type”: “string” }
},
“required”: [“id”, “name”, “email”] };

pm.test(“Schema is valid”, function() {
var jsonData = pm.response.json();
pm.expect(tv4.validate(jsonData, schema)).to.be.true;
});

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

کاراته DSL: تست BDD ساده شده

کاراته DSL اجازه می دهد تا تست ها را با فرمت Gherkin بدون نیاز به تعریف مرحله بنویسید:

Feature: User API Tests

Background:
* url ‘https://api.example.com’
* header Accept=”application/json”

Scenario: Get list of users
Given path ‘users’
When method get
Then status 200
And match response == ‘#array’
And match each response contains { id: ‘#number’, name: ‘#string’ }

Scenario: Create new user
Given path ‘users’
And request { name: ‘Anna’, email: ‘anna@email.com’ }
When method post
Then status 201
And match response contains { id: ‘#number’, name: ‘Anna’ }

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

PyRestTest: تست YAML

PyRestTest اجازه می دهد تا تست ها را در فایل های YAML تعریف کرده و آنها را خواناتر کند:

– config:
– testset: “User API Tests”
– base_url: “https://api.example.com”

– test:
– name: “Get users”
– url: “/users”
– method: “GET”
– headers: {‘Content-Type’: ‘application/json’}
– validators:
– compare: {header: “status_code”, comparator: “eq”, expected: 200}
– json_schema: {schema: {type: “array”}}

– test:
– name: “Create user”
– url: “/users”
– method: “POST”
– body: ‘{“name”: “Charles”, “email”: “charles@email.com”}’
– headers: {‘Content-Type’: ‘application/json’}
– validators:
– compare: {header: “status_code”, comparator: “eq”, expected: 201}
– compare: {jsonpath_mini: “name”, comparator: “eq”, expected: “Charles”}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

JMeter: تست عملکرد و عملکرد

در حالی که JMeter برای تست بار شناخته شده است، می تواند آزمایش API عملکردی را نیز انجام دهد:

api.example.com
/users
GET
true

Content-Type
application/json

$[0].id
1
true

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نتیجه گیری و بهترین شیوه ها

هر چارچوب دارای نقاط قوت خاص خود است:

مطمئن باشید: برای تیم‌های جاوا که به ادغام TestNG/JUnit نیاز دارند عالی است
پستچی: ایده آل برای تست سریع و تیم هایی با تجربه برنامه نویسی کمتر
کاراته DSL: ایده آل برای تیم هایی که از روش BDD استفاده می کنند
PyRestTest: گزینه خوبی برای تست های ساده با پیکربندی YAML
JMeter: بهینه هنگام ترکیب تست عملکرد و عملکرد

توصیه ها:

تست استقلال: هر آزمون باید بتواند به صورت مجزا اجرا شود
داده های تست: از داده های آزمایشی خاص استفاده کنید، نه داده های تولید
اظهارات کامل: نه تنها کدهای وضعیت، بلکه ساختار و محتوای پاسخ را نیز بررسی کنید
مستندات: نمونه ها و مستندات را به روز نگه دارید
یکپارچه سازی مداوم: آزمایش ها را در خط لوله CI/CD بگنجانید

در توسعه نرم افزار مدرن، تست API برای اطمینان از قابلیت اطمینان و کیفیت خدمات وب بسیار مهم است. بیایید برخی از محبوب ترین فریم ورک ها را با مثال های کد عملی بررسی کنیم.

مطمئن باشید: تست API RESTful در جاوا

Rest-Assured به دلیل نحو روان و رسا خود متمایز است که برای تست REST API در جاوا ایده آل است.

@Test
public void testGetUsers() {
    given()
        .header("Content-Type", "application/json")
    .when()
        .get("https://api.example.com/users")
    .then()
        .statusCode(200)
        .body("users.size()", greaterThan(0))
        .body("users[0].name", notNullValue());
}

@Test
public void testCreateUser() {
    User user = new User("John", "john@email.com");

    given()
        .body(user)
        .contentType(ContentType.JSON)
    .when()
        .post("https://api.example.com/users")
    .then()
        .statusCode(201)
        .body("id", notNullValue())
        .body("name", equalTo("John"));
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

پستچی: تست بدون کد

Postman اجازه می دهد تا تست های خودکار را با استفاده از جاوا اسکریپت در رابط گرافیکی خود ایجاد کنید:

// Test to verify successful response and data structure
pm.test("Status code is 200", function () {
    pm.response.to.have.status(200);
});

pm.test("Response contains correct data", function () {
    var jsonData = pm.response.json();

    pm.expect(jsonData).to.have.property('users');
    pm.expect(jsonData.users).to.be.an('array');
    pm.expect(jsonData.users[0]).to.have.property('id');
    pm.expect(jsonData.users[0]).to.have.property('name');
});

// Test to validate JSON schema
var schema = {
    "type": "object",
    "properties": {
        "id": { "type": "number" },
        "name": { "type": "string" },
        "email": { "type": "string" }
    },
    "required": ["id", "name", "email"]
};

pm.test("Schema is valid", function() {
    var jsonData = pm.response.json();
    pm.expect(tv4.validate(jsonData, schema)).to.be.true;
});
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

کاراته DSL: تست BDD ساده شده

کاراته DSL اجازه می دهد تا تست ها را با فرمت Gherkin بدون نیاز به تعریف مرحله بنویسید:

Feature: User API Tests

Background:
    * url 'https://api.example.com'
    * header Accept="application/json"

Scenario: Get list of users
    Given path 'users'
    When method get
    Then status 200
    And match response == '#array'
    And match each response contains { id: '#number', name: '#string' }

Scenario: Create new user
    Given path 'users'
    And request { name: 'Anna', email: 'anna@email.com' }
    When method post
    Then status 201
    And match response contains { id: '#number', name: 'Anna' }
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

PyRestTest: تست YAML

PyRestTest اجازه می دهد تا تست ها را در فایل های YAML تعریف کرده و آنها را خواناتر کند:

- config:
    - testset: "User API Tests"
    - base_url: "https://api.example.com"

- test:
    - name: "Get users"
    - url: "/users"
    - method: "GET"
    - headers: {'Content-Type': 'application/json'}
    - validators:
        - compare: {header: "status_code", comparator: "eq", expected: 200}
        - json_schema: {schema: {type: "array"}}

- test:
    - name: "Create user"
    - url: "/users"
    - method: "POST"
    - body: '{"name": "Charles", "email": "charles@email.com"}'
    - headers: {'Content-Type': 'application/json'}
    - validators:
        - compare: {header: "status_code", comparator: "eq", expected: 201}
        - compare: {jsonpath_mini: "name", comparator: "eq", expected: "Charles"}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

JMeter: تست عملکرد و عملکرد

در حالی که JMeter برای تست بار شناخته شده است، می تواند آزمایش API عملکردی را نیز انجام دهد:



  
    
      api.example.com
      /users
      GET
      true

      
        
          
            Content-Type
            application/json
          
        
      

      
        $[0].id
        1
        true
      
    
  

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نتیجه گیری و بهترین شیوه ها

هر چارچوب دارای نقاط قوت خاص خود است:

  • مطمئن باشید: برای تیم‌های جاوا که به ادغام TestNG/JUnit نیاز دارند عالی است
  • پستچی: ایده آل برای تست سریع و تیم هایی با تجربه برنامه نویسی کمتر
  • کاراته DSL: ایده آل برای تیم هایی که از روش BDD استفاده می کنند
  • PyRestTest: گزینه خوبی برای تست های ساده با پیکربندی YAML
  • JMeter: بهینه هنگام ترکیب تست عملکرد و عملکرد

توصیه ها:

  • تست استقلال: هر آزمون باید بتواند به صورت مجزا اجرا شود
  • داده های تست: از داده های آزمایشی خاص استفاده کنید، نه داده های تولید
  • اظهارات کامل: نه تنها کدهای وضعیت، بلکه ساختار و محتوای پاسخ را نیز بررسی کنید
  • مستندات: نمونه ها و مستندات را به روز نگه دارید
  • یکپارچه سازی مداوم: آزمایش ها را در خط لوله CI/CD بگنجانید

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا