ویرگول
ورودثبت نام
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 است.

این سؤال خیلی خوبیه، چون اگر این ۲۰ الگو رو بلد باشی، به نظرم حدود ۸۰٪ نیازهای آزمون Career Ladder رو پوشش می‌دی. من بر اساس چیزی که تا الان با هم کار کردیم و سبک آزمون‌هایی که گفتی (Happy Chain، Newman، Mock Server، Postman)، این‌ها رو پیشنهاد می‌کنم.


1. Parse Response

const jsonData = pm.response.json();

کاربرد: تقریباً اول همه Test Scriptها.


2. Status Code

pm.test("Status is 200", function () { pm.response.to.have.status(200); });

یا

pm.expect(pm.response.code).to.eql(200);

3. Message

pm.expect(jsonData.message).to.eql("عملیات با موفقیت انجام شد");

4. ResultData وجود داشته باشد

pm.expect(jsonData.resultData).to.not.be.null;

5. ResultData برابر null باشد

pm.expect(jsonData.resultData).to.be.null;

6. آرایه خالی باشد

pm.expect(jsonData.errorList).to.be.an("array").that.is.empty;

7. آرایه خالی نباشد

pm.expect(jsonData.resultData).to.be.an("array").that.is.not.empty;

8. Property وجود داشته باشد

pm.expect(jsonData.metadata).to.have.property("trace-id");

9. مقایسه با Environment Variable

pm.expect(jsonData.resultData.code) .to.eql(pm.environment.get("savedCode"));

10. ذخیره کردن Variable

pm.environment.set( "savedCode", jsonData.resultData.code );

11. خواندن Variable

const code = pm.environment.get("savedCode");

12. حذف Variable

pm.environment.unset("savedCode");

13. تولید GUID

pm.environment.set( "idempotencyKey", pm.variables.replaceIn("{{$guid}}") );

14. تولید زمان

pm.environment.set( "requestDateTime", new Date().toISOString() );

15. تولید داده Unique

const suffix = `${Date.now()}${Math.floor(Math.random()*1000000)}`;

16. تست Object

pm.expect(jsonData.resultData) .to.be.an("object");

17. تست Array

pm.expect(jsonData.resultData) .to.be.an("array");

18. مقدار ACTIVE

pm.expect(jsonData.resultData.status.code) .to.eql("ACTIVE");

19. Label

pm.expect(jsonData.resultData.status.label) .to.eql("فعال");

20. Newman

اجرای ساده

newman run collection.json -e environment.json

اجرای همراه گزارش

newman run collection.json -e environment.json -r cli,html,json


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