چارچوب های تست 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 بگنجانید