
پس از ضبط کردن سناریوی مورد نظر، پارامتربندی، اجرای تست و دریافت پاسخ از سرور، نیاز است تا از درستی پاسخ دریافت شده اطمینان حاصل کنیم. وقتی درخواستی اجرا میشود میتوان با بررسی کد و پاسخ دریافت شده از سرور متوجه شد که درخواست با موفقیت اجرا شده است یا خیر. گاهی اوقات بررسی کد و پیام پاسخ دریافتی کافی نیست. به عنوان مثال، ممکن است با وجود دریافت کد 200 و پیام OK، پاسخ دریافت شده با پاسخ مورد انتظار ما متفاوت باشد و یا گاهی نیاز است که فیلدهای مختلف در بدنه پاسخ و یا موارد دیگری مانند مدت زمان دریافت پاسخ و … را بررسی کنیم تا مطمئن شویم که پاسخ دریافتی مورد انتظار است. جیمیتر و ابزارهای دیگر به تنهایی نمیتوانند این گونه خطاها را تشخیص دهند، زیرا در بعضی مواقع تعیین درستی پاسخ به شما بستگی دارد. بدین منظور عنصری به نام Assertion در جیمیتر طراحی شده است تا با استفاده از آن بتوان درستی پاسخ دریافتی از سرور را بررسی کرد که در این مقاله به آموزش آن میپردازیم.
Assertion یکی از مهمترین بخشهای جیمیتر است که کاربران با استفاده از آنها میتوانند درستی پاسخ دریافتی از سرور را بررسی کنند. به خصوص در تست کارایی بسیار کاربردی هستند، زیرا که با استفاده از آنها میتوانیم بررسی کنیم که همه درخواست ها به درستی اجرا شدهاند و تحت تاثیر بار زیاد قرار نگرفتهاند. در واقع Assertionها پس از اجرای درخواست و دریافت پاسخ از سرور، اجرا میشوند، سپس نتایج واقعی را با نتایج مورد انتظار ما مقایسه کرده و در نهایت مشخص میکنند که این مقادیر با هم برابر هستند و یا خیر.
در جیمیتر Assertionهای مختلفی وجود دارند که هر کدام برای هدف خاصی طراحی شدهاند و کاربر براساس نیاز خود میتواند از هر کدام از آنها استفاده کند.برخی از Assertion هایی که در پکیج جیمیتر وجود دارند، عبارت اند از:
پیش از استفاده از Assertion به موارد زیر توجه کنید:

در شکل بالا، چهار Assertion در حوزههای مختلف تعریف شدند؛ بنابراین هر کدام برای درخواستهای متفاوتی اعمال میشوند:
بنابراین Assertion میتواند بر اساس جایگاه خود بر روی درخواستهای مختلفی اعمال شود. به عنوان مثال در اینجا Fail شدن 3 Assertion باعث میشود کل transaction controllerای که Assertion در آن تعریف شده است fail شده و آنالیز تست و پیدا کردن مشکل زمانبرتر میشود.، بنابراین موقع اضافه کردن Assertion توجه کنید که به کدام کامپوننت اضافه میکنید. توصیه میشود که برای هر درخواست Assertionهای جداگانه تعریف کنید، زیرا که هم قابل فهمتر میشود و هم در آینده راحتتر میتوانید طراحی خود را ویرایش کنید.
عناصر والد یک Assertion
در نظر داشته باشید که هیچ عنصری را نمیتوان به Assertion اضافه کرد، بنابراین فرزندی نخواهد داشت.
چهار گام برای استفاده از Assertionها در طول تست
چهار گام استفاده از هر کدام از Assertionها به شرح زیر است:

مقادیر مورد انتظار خود را برای فیلدهایی که در بالا مشخص کردید وارد کنید. به عنوان مثال انتظار دارید که کد پاسخ دریافتی 202 باشد.
Listener مناسب را اضافه و تست را اجرا کنید. سپس نتایج اجرای Assertionها را با استفاده از Listener مناسب مشاهده کنید.
در حالت GUI، برای مشاهده نتیجه اجرای Assertionها میتوانید از Listenerهای زیر استفاده کنید:
در ادامه این آموزش، هر 4 مرحله را برای رایجترین و پرکاربردترین Assertionها به طور کامل بررسی میکنیم.
در این بخش قصد داریم چند نمونه از مهمترین Assertion ها را با ذکر مثال بررسی کنیم.
Response Assertion یکی از رایجترین Assertionهاست که از آن برای ارزیابی بخشهای مختلف پاسخ دریافتی از سرور مانند بدنه، کد، پیام، header و … استفاده میشود.

این assertion شامل موارد زیر است که براساس نیاز خود میتوانیم آنها را تغییر دهیم:
به عنوان مثال درخواست صفحه اول سایت گزمه را در نظر بگیرید:
قصد داریم با استفاده از این Assertion بررسی کنیم که آیا بخش "خدمات ما" در پاسخ دریافتی وجود دارد یا خیر. بنابراین طبق مراحل زیر پیش میرویم:


و اگر عبارت مورد نظر در پاسخ وجود داشته باشد Assertion با موفقیت اجرا شده و درخواست با رنگ سبز مشخص میشود.

برای بررسی موارد دیگر مانند Response Message، Response Code نیز براساس نیاز خود، به همین صورت عمل میکنیم.
با استفاده از JSON Assertion میتوان پاسخ دریافتی که به صورت JSON است را ارزیابی کرد.

در صورتی که Assertion تعریفی شما یکی از شرایط زیر را داشته باشد، با خطا مواجه خواهد شد:



به عنوان مثال درخواست ورود در سایت گزمه را در نظر بگیرید. حال قصد داریم با استفاده از JSON Assertion مقدار فیلد confirmed موجود در بدنه پاسخ را با مقدار مورد انتظار خود (true) مقایسه کنیم:


همانطور که در شکل بالا مشخص است، درخواست با مشکل مواجه شده و فیلد confirmed در پاسخ وجود ندارد، بنابراین Assertion با خطا مواجه شده و با رنگ قرمز نمایش داده میشود. همچنین در listener پیغامی مبنی بر عدم وجود فیلد مورد نظر نمایش داده میشود.

اگر درخواست با موفقیت اجرا شود و مقدار دریافتی با مقدار مورد انتظار برابر باشد، assertion با موفقیت اجرا شده و درخواست با رنگ سبز مشخص میشود.

با استفاده از JSR223 Assertion و اسکریپتنویسی میتوان پاسخ دریافتی مورد نظر را بررسی و ارزیابی کرد. گاهی اوقات لازم است موارد خاص و پیچیدهتری را بررسی کرد. استفاده از JSR223 Assertion نیازمند دانش استفاده از زبانهای اسکریپتنویسی مانند groovy و … است.
میزان مصرف منابعی مانند CPU و حافظه بستگی به اسکریپتی که نوشته شده دارد، بنابراین سعی کنید اسکریپی که مینویسید پیچیدگی کمتری داشته باشد.
JSR223 Assertion نسبت به BeanShell Assertion انعطافپذیری بالاتری دارد، منابع کمتری مصرف میکند و سریعتر است.
این Assertion شامل بخشهای زیر است:
در ادامه چند مورد از متغیر هایی که میتوانید در اسکریپت خود استفاده کنید را بررسی میکنیم:
برای درک بهتر، در ادامه قصد داریم برای درخواست دریافت لیست آموزشهای جیمیتر در سایت گزمه، با استفاده از JSR233 Assertion پاسخ دریافتی را بررسی کنیم. وقتی API مربوطه را اجرا میکنیم، آرایه ای از اشیا دریافت میکنیم که شامل اطلاعات مربوط به آموزشها مانند مواردی مانند ، tagName title و … هستند.

به عنوان مثال اسکریپتی با استفاده از groovy مینویسیم تا به کمک آن بررسی کنیم فیلد tagName تمامی آموزشها برابر با "جیمیتر" باشد:
import groovy.json.JsonSlurper
error=false; msg="";
try{
jsonSlurper = new JsonSlurper();
_jsonObj = jsonSlurper.parseText(prev.getResponseDataAsString());
for(int i=0 ; i<_jsonObj.items.size() ; i++)
{
if(!_jsonObj.items[i].tags[0].tagName.equals("جیمیتر"))
{
error=true;
msg=msg+ "\n post " + _jsonObj.items[i].id + ": the tag name is incorrect," + " the expected is جیمیتر but actual tag name is: " + _jsonObj.items[i].tags[0].tagName;
}
}
}
catch(Exception ex){
error=true;
msg=msg+"\nException: "+ex.getMessage();
}
if(error){
AssertionResult.setFailure(true);
AssertionResult.setFailureMessage(msg);
}
اگر شرط مورد نظر برقرار باشد، این Assertion با موفقیت اجرا میشود و نتیجه آن در View Results Tree Listener به صورت زیر خواهد بود:

حال اگر در پاسخ دریافتی مقدار tagName برابر با جیمیتر نباشد، این Assertion با شکست مواجه میشود:

با استفاده از این Assertion میتوان مشخص کرد که آیا سرور در زمان مشخص شده پاسخ داده است یا خیر. بنابراین برای درخواستهایی از Duration Assertion استفاده میکنیم که ارزیابی زمان پاسخ مهم است. استفاده از این Assertion برای تست کارایی و سنجش عملکرد سیستم توصیه میشود.

اگر پاسخ در مدت زمانی بیشتر از مدت زمان مشخص شده از سرور دریافت شود، این Assertion با خطا مواجه میشود.

به عنوان مثال چندین کاربر همزمان، درخواست دریافت لیست آموزشهای جیمیتر سایت گزمه را اجرا میکنند. حال میخواهیم بررسی کنیم که آیا سرور هر درخواست را در کمتر از 450 میلیثانیه پاسخ میدهد و یا تحت تاثیر بار زیاد قرار گرفته و مدت زمان ارسال پاسخ افزایش مییابد. بنابراین مقدار Duration in millisecond را برابر با 450 قرار میدهیم:

پس از اجرا اگر مدت زمان دریافت پاسخ کمتر از 450 میلیثانیه باشد، با موفقیت اجرا میشود. همانطور که در شکل زیر مشاهده میکنید، پاسخ در مدت زمان 441 میلیثانیه دریافت شده، بنابراین این Assertion در View Result Tree Listener با رنگ سبز مشخص میشود:

Assertion درخواست هایی که پاسخ آنها در مدت زمانی بیشتر از 450 میلی ثانیه دریافت شود، با خطا مواجه شده و با رنگ قرمز مشخص میشوند. در شکل زیر پاسخ درخواستی در 511 میلیثانیه دریافت شده، بنابراین این Assertion با شکست مواجه میشود.

Assertionهای دیگری نیز در پکیج اصلی خود جیمیتر وجود دارند که میتوانید براساس نیاز خود، هر کدام را اضافه و استفاده کنید.