ویرگول
ورودثبت نام
Nastooh
Nastooh
Nastooh
Nastooh
خواندن ۳ دقیقه·۱ روز پیش

Postman Script

فقط اسم فیلدها و Status Code را عوض می‌کنی.

1) Pre-request عمومی برای Create موفق

const uniqueSuffix = Date.now().toString().slice(-6); pm.environment.set("requestDateTime", new Date().toISOString()); pm.environment.set("idempotencyKey", pm.variables.replaceIn("{{$guid}}")); pm.environment.set("baseTitle", "Test Title " + uniqueSuffix); pm.environment.set("baseCode", uniqueSuffix);

Body نمونه:

{ "title": "{{baseTitle}}", "code": "{{baseCode}}" }

2) Pre-request برای Duplicate Title

const uniqueSuffix = Date.now().toString().slice(-6); pm.environment.set("requestDateTime", new Date().toISOString()); pm.environment.set("idempotencyKey", pm.variables.replaceIn("{{$guid}}")); pm.environment.set("fixedTitle", "Duplicate Title"); pm.environment.set("baseCode", uniqueSuffix);

Body:

{ "title": "{{fixedTitle}}", "code": "{{baseCode}}" }

3) Pre-request برای Duplicate Code

const uniqueSuffix = Date.now().toString().slice(-6); pm.environment.set("requestDateTime", new Date().toISOString()); pm.environment.set("idempotencyKey", pm.variables.replaceIn("{{$guid}}")); pm.environment.set("baseTitle", "Test Title " + uniqueSuffix); pm.environment.set("fixedCode", "DUP-CODE-001");

Body:

{ "title": "{{baseTitle}}", "code": "{{fixedCode}}" }

4) Pre-request برای Header تاریخ قدیمی

const uniqueSuffix = Date.now().toString().slice(-6); pm.environment.set("requestDateTime", "2020-01-01T00:00:00.000Z"); pm.environment.set("idempotencyKey", pm.variables.replaceIn("{{$guid}}")); pm.environment.set("baseTitle", "Test Title " + uniqueSuffix); pm.environment.set("baseCode", uniqueSuffix);

5) Test موفق Create

const response = pm.response.json(); pm.test("Status Code is 201", function () { pm.response.to.have.status(201); }); pm.test("ResultData exists", function () { pm.expect(response.resultData).to.not.be.null; }); pm.test("No errors returned", function () { pm.expect(response.errorList).to.be.an("array").that.is.empty; }); pm.test("Title matches request", function () { pm.expect(response.resultData.title).to.eql(pm.environment.get("baseTitle")); }); pm.test("Code matches request", function () { pm.expect(response.resultData.code).to.eql(pm.environment.get("baseCode")); }); if (pm.response.code === 201) { pm.environment.set("savedCode", response.resultData.code); pm.environment.set("savedTitle", response.resultData.title); }

6) Test خطای عمومی

const response = pm.response.json(); pm.test("Status Code is expected error", function () { pm.response.to.have.status(400); // change to 409, 401, 403, 404 if needed }); pm.test("ResultData is null", function () { pm.expect(response.resultData).to.be.null; }); pm.test("ErrorList exists", function () { pm.expect(response.errorList).to.be.an("array").that.is.not.empty; });

7) Test Duplicate Title

const response = pm.response.json(); pm.test("Status Code is 409", function () { pm.response.to.have.status(409); }); pm.test("Duplicate title error exists", function () { const error = response.errorList .flatMap(e => e.details || []) .find(d => d.field === "title"); pm.expect(error).to.not.be.undefined; });

8) Test Duplicate Code

const response = pm.response.json(); pm.test("Status Code is 409", function () { pm.response.to.have.status(409); }); pm.test("Duplicate code error exists", function () { const error = response.errorList .flatMap(e => e.details || []) .find(d => d.field === "code"); pm.expect(error).to.not.be.undefined; });

9) Test خطای Header

const response = pm.response.json(); pm.test("Status Code is 400", function () { pm.response.to.have.status(400); }); pm.test("Header error exists", function () { const errorText = JSON.stringify(response.errorList); pm.expect(errorText).to.match(/header|RequestDateTime|Idempotency|تاریخ|زمان/i); });

10) Test ذخیره مقدار برای Chain Request

const response = pm.response.json(); pm.test("Status Code is success", function () { pm.response.to.be.success; }); if (response.resultData && response.resultData.code) { pm.environment.set("savedCode", response.resultData.code); }

در Request بعدی:

{ "parentCode": "{{savedCode}}" }

11) Test برای GET By Code

const response = pm.response.json(); pm.test("Status Code is 200", function () { pm.response.to.have.status(200); }); pm.test("ResultData exists", function () { pm.expect(response.resultData).to.not.be.null; }); pm.test("Returned code matches saved code", function () { pm.expect(response.resultData.code).to.eql(pm.environment.get("savedCode")); });

12) Test برای PUT / Update

const response = pm.response.json(); pm.test("Status Code is 200", function () { pm.response.to.have.status(200); }); pm.test("Updated title returned", function () { pm.expect(response.resultData.title).to.eql(pm.environment.get("updatedTitle")); });

Pre-request برای Update:

const uniqueSuffix = Date.now().toString().slice(-6); pm.environment.set("requestDateTime", new Date().toISOString()); pm.environment.set("idempotencyKey", pm.variables.replaceIn("{{$guid}}")); pm.environment.set("updatedTitle", "Updated Title " + uniqueSuffix);

13) Test برای DELETE

const response = pm.response.json(); pm.test("Status Code is 200 or 204", function () { pm.expect([200, 204]).to.include(pm.response.code); });

14) Test بعد از DELETE

const response = pm.response.json(); pm.test("Deleted item should not be found", function () { pm.expect([404, 410]).to.include(pm.response.code); });

توضیحات ساختار:

ابتدا در Pre-request Script داده داینامیک مثل requestDateTime، idempotencyKey، title و code تولید می‌کنم تا تست قابل تکرار باشد. سپس Request را با Body و Header معتبر ارسال می‌کنم. در Tests، ابتدا Status Code را بررسی می‌کنم، سپس ساختار Response مثل resultData و errorList را اعتبارسنجی می‌کنم. در سناریوهای موفق، مقادیر برگشتی مثل code را در Environment ذخیره می‌کنم تا در Requestهای بعدی برای Chain Request استفاده شود. در سناریوهای منفی، انتظار دارم resultData مقدار null داشته باشد و errorList شامل خطای مرتبط با همان فیلد یا Header باشد.

این مجموعه قابل تغییر برای تقریباً هر API است.

status code
۰
۰
Nastooh
Nastooh
شاید از این پست‌ها خوشتان بیاید