জেমিটার (JMeter) এর Scripting ক্ষমতা টেস্ট স্ক্রিপ্টে কাস্টম লজিক বা প্রক্রিয়া যোগ করতে সাহায্য করে। জেমিটার স্ক্রিপ্টিং মূলত BeanShell, Jython, বা JavaScript এর মাধ্যমে করা যায়। এর মধ্যে BeanShell সবচেয়ে জনপ্রিয় এবং ব্যাপকভাবে ব্যবহৃত স্ক্রিপ্টিং ভাষা, যেটি জাভার উপর ভিত্তি করে তৈরি এবং খুবই শক্তিশালী। এটি কাস্টম লজিক, ডেটা জেনারেশন, ভেরিয়েবল সেটিং, এবং অন্যান্য কার্যক্রমের জন্য ব্যবহৃত হয়।
এই টিউটোরিয়ালে আমরা JMeter Scripting এবং BeanShell স্ক্রিপ্টিং সম্পর্কে বিস্তারিত আলোচনা করব।
জেমিটার স্ক্রিপ্টিংয়ের মাধ্যমে আপনি বিভিন্ন টেস্ট প্ল্যানের মধ্যে কাস্টম লজিক যোগ করতে পারেন। কিছু সাধারণ ব্যবহৃত স্ক্রিপ্টিং প্রক্রিয়া অন্তর্ভুক্ত:
জেমিটার স্ক্রিপ্টিং বিভিন্ন ধরনের প্রসেসরের মাধ্যমে পরিচালিত হয়:
এখন আসুন বিস্তারিতভাবে BeanShell স্ক্রিপ্টিং সম্পর্কে আলোচনা করি।
BeanShell একটি স্ক্রিপ্টিং ভাষা যা Java এর সিনট্যাক্স অনুসরণ করে, তবে এটি খুবই লাইটওয়েট এবং ইন্টারপ্রিটিভ। এর মাধ্যমে আপনি জাভার মতো কোড লিখতে পারেন এবং সেই কোড জেমিটার টেস্ট স্ক্রিপ্টে ব্যবহার করতে পারেন। BeanShell Pre-Processor এবং BeanShell Post-Processor ব্যবহার করে আপনি কাস্টম লজিক এবং ডেটা প্রসেসিং যুক্ত করতে পারেন।
BeanShell Pre-Processor একটি টুল যা জেমিটার টেস্টের আগে কাস্টম কোড এক্সিকিউট করতে ব্যবহৃত হয়। এটি মূলত যখন আপনি টেস্ট রিকোয়েস্টের আগে কিছু কাস্টম কার্যক্রম করতে চান তখন ব্যবহৃত হয়।
ধরা যাক, আপনি একটি র্যান্ডম সেশন আইডি তৈরি করতে চান এবং সেটি পরবর্তী রিকোয়েস্টে ব্যবহার করতে চান। আপনি নিম্নলিখিত কোডটি BeanShell Pre-Processor তে লিখতে পারেন:
// Generate a random session ID
String sessionId = "session_" + Math.random();
vars.put("sessionId", sessionId); // Save sessionId to a JMeter variable
এখানে Math.random()
ব্যবহার করে একটি র্যান্ডম সেশন আইডি তৈরি করা হয়েছে এবং সেটি sessionId
নামে জেমিটার ভেরিয়েবলে সংরক্ষণ করা হয়েছে।
BeanShell Post-Processor টেস্ট রিকোয়েস্টের পরে কোড এক্সিকিউট করার জন্য ব্যবহৃত হয়। এটি ব্যবহার করে আপনি রিকোয়েস্টের রেসপন্স থেকে ডেটা এক্সট্র্যাক্ট করতে, রেসপন্সের ওপর কাস্টম লজিক প্রয়োগ করতে পারেন।
ধরা যাক, আপনি API রেসপন্স থেকে একটি টোকেন বের করতে চান এবং সেটি পরবর্তী রিকোয়েস্টে ব্যবহার করতে চান। নিচে BeanShell কোড দেওয়া হল:
// Extract the token from the response data
String responseData = prev.getResponseDataAsString();
String token = responseData.substring(responseData.indexOf("token\":\"") + 8, responseData.indexOf("\"", responseData.indexOf("token\":\"") + 8));
vars.put("authToken", token); // Save token to a JMeter variable
এখানে, prev.getResponseDataAsString()
ব্যবহার করে রেসপন্সের ডেটা নেওয়া হয়েছে এবং substring()
দিয়ে টোকেন এক্সট্র্যাক্ট করা হয়েছে।
BeanShell স্ক্রিপ্টে আপনি বিভিন্ন ধরনের জেমিটার ভেরিয়েবল ব্যবহার করতে পারেন। যেমন vars.get()
এবং vars.put()
মেথড ব্যবহার করে ভেরিয়েবল পড়া এবং লেখা সম্ভব।
// Access JMeter variables
String user = vars.get("username");
String password = vars.get("password");
// Use the variables in your script
log.info("Username: " + user);
log.info("Password: " + password);
এখানে, vars.get()
দিয়ে username
এবং password
ভেরিয়েবল পাওয়া হয়েছে এবং log.info()
দিয়ে লগ করা হয়েছে।
যত শক্তিশালী এবং ফ্লেক্সিবল BeanShell স্ক্রিপ্টিং, ততই এটি কিছু পারফরম্যান্স সমস্যাও সৃষ্টি করতে পারে, বিশেষত যখন আপনি বড় স্কেল টেস্টিং করছেন।
আপনি যখন বড় স্কেল টেস্টের জন্য জেমিটার ব্যবহার করবেন, তখন BeanShell-এর পরিবর্তে Jython বা JavaScript ব্যবহার করার কথা চিন্তা করতে পারেন, কারণ তারা সাধারণত অধিক পারফরম্যান্স প্রদান করে।
BeanShell জেমিটার টেস্ট স্ক্রিপ্টে কাস্টম লজিক এবং ডেটা প্রসেসিং যোগ করার জন্য একটি শক্তিশালী স্ক্রিপ্টিং ভাষা। BeanShell Pre-Processor এবং BeanShell Post-Processor ব্যবহার করে আপনি ডাইনামিক ডেটা জেনারেশন, রেসপন্স এক্সট্র্যাকশন, এবং অন্যান্য কাস্টম লজিক প্রয়োগ করতে পারেন। তবে, পারফরম্যান্স সমস্যা এড়ানোর জন্য বড় স্কেল টেস্টিংয়ের জন্য BeanShell স্ক্রিপ্টে কিছু সতর্কতা অবলম্বন করা প্রয়োজন।
জেমিটার (JMeter) একটি শক্তিশালী ওপেন সোর্স টুল, যা ওয়েব অ্যাপ্লিকেশন, ওয়েব সার্ভিস এবং অন্যান্য প্রটোকলের পারফরম্যান্স এবং ফাংশনাল টেস্টিংয়ের জন্য ব্যবহৃত হয়। টেস্ট প্ল্যানের মধ্যে জাভা বা স্ক্রিপ্টিং ভাষা ব্যবহার করে কাস্টম কার্য সম্পাদন করতে BeanShell এবং JMeter Scripting ব্যবহার করা হয়।
BeanShell একটি স্ক্রিপ্টিং ভাষা যা জাভা ভাষার উপর ভিত্তি করে তৈরি, এবং এটি জাভা কোডের মতোই কাজ করে তবে কোডের মধ্যে কমপ্লেক্সিটি কমায় এবং দ্রুত টেস্ট কনফিগারেশন পরিবর্তন করার সুযোগ দেয়। জেমিটার ব্যবহারকারীরা টেস্ট প্ল্যানের মধ্যে BeanShell স্ক্রিপ্ট ব্যবহার করে বিভিন্ন কার্য সম্পাদন করতে পারেন, যেমন ডেটা প্রিপারেশন, কাস্টম ফাংশন বা ক্যালকুলেশন, ভেরিয়েবল সেটিংস ইত্যাদি।
BeanShell একটি সহজ এবং নমনীয় স্ক্রিপ্টিং ভাষা যা জাভা কোডের মতোই কাজ করে কিন্তু সহজ এবং কমপ্লেক্সিটি কমায়। এটি জাভা API ব্যবহার করতে পারে এবং অনেক ক্ষেত্রে এটি Java এর কাজকে হালকা করে তোলে। জেমিটার প্রজেক্টে BeanShell ব্যবহার করার মাধ্যমে আপনি বিভিন্ন কার্য সম্পাদন করতে পারেন, যেমন:
JMeter তে BeanShell স্ক্রিপ্ট ব্যবহার করার জন্য আপনাকে BeanShell PreProcessor অথবা BeanShell PostProcessor এর মতো উপাদান যোগ করতে হবে।
PreProcessor ব্যবহার করার মাধ্যমে আপনি Sampler বা HTTP রিকোয়েস্ট এক্সিকিউট হওয়ার আগে কিছু কাস্টম কার্য সম্পাদন করতে পারেন।
ধরা যাক, আপনি একটি Random Number তৈরি করতে চান এবং সেই নম্বরটি একটি ভেরিয়েবলে সংরক্ষণ করতে চান।
BeanShell PreProcessor স্ক্রিপ্টে কোড লেখুন:
// Random Number Generation
int randomNum = (int)(Math.random() * 1000);
vars.put("randomNumber", String.valueOf(randomNum)); // Store in JMeter variable
এটি একটি র্যান্ডম নাম্বার তৈরি করবে এবং সেটিকে randomNumber
নামক ভেরিয়েবলে সংরক্ষণ করবে।
PostProcessor ব্যবহার করে আপনি রেসপন্স পাওয়ার পরে কিছু কাস্টম কার্য সম্পাদন করতে পারেন, যেমন রেসপন্স থেকে ডেটা এক্সট্র্যাক্ট করা বা রেসপন্স যাচাই করা।
ধরা যাক, আপনি HTTP রিকোয়েস্টের রেসপন্স থেকে একটি ভ্যালু এক্সট্র্যাক্ট করতে চান এবং সেটি একটি ভেরিয়েবলে সংরক্ষণ করতে চান।
// Extract specific part of response
String response = prev.getResponseDataAsString();
String extractedValue = response.split(":")[1]; // Example: Extract value after colon
vars.put("extractedValue", extractedValue); // Store in JMeter variable
এটি HTTP রেসপন্স থেকে একটি ভ্যালু এক্সট্র্যাক্ট করবে এবং সেটি extractedValue
নামক ভেরিয়েবলে সংরক্ষণ করবে।
JMeter স্ক্রিপ্টিং ভাষা ব্যবহার করে আপনি অনেক শক্তিশালী কার্য সম্পাদন করতে পারেন। জেমিটার বিভিন্ন ধরনের স্ক্রিপ্টিং ভাষা সাপোর্ট করে, যেমন:
JMeter তে Groovy স্ক্রিপ্ট ব্যবহার করে কাস্টম কার্য সম্পাদন করতে পারেন, যেমন আউটপুট হিসাবে কিছু ডেটা গণনা করা।
Groovy স্ক্রিপ্ট কনফিগার করার জন্য:
// Groovy script for simple calculation
def sum = 10 + 20;
vars.put("sumResult", sum.toString()); // Store the result in JMeter variable
এটি একটি সাধারাণ গাণিতিক ক্যালকুলেশন করবে এবং সেই ফলাফলকে sumResult
নামে একটি ভেরিয়েবলে সংরক্ষণ করবে।
জেমিটার ফাংশনগুলি টেস্টের মধ্যে ভেরিয়েবল তৈরি করতে, রেসপন্স ডেটা প্রক্রিয়াকরণে, এবং টেস্ট চলাকালীন ডাইনামিক ডেটা প্রযোজ্য করতে ব্যবহৃত হয়।
একটি Random ফাংশন ব্যবহার করে আপনি র্যান্ডম ভ্যালু জেনারেট করতে পারেন।
${__Random(1000,9999)}
এটি 1000 থেকে 9999 এর মধ্যে একটি র্যান্ডম সংখ্যা তৈরি করবে।
জেমিটার CSV Data Set Config ব্যবহার করে আপনি CSV ফাইল থেকে ডেটা লোড করতে পারেন এবং সেই ডেটা প্রতি রিকোয়েস্টে ব্যবহার করতে পারেন।
data.csv
username, password
এটি data.csv
ফাইল থেকে username
এবং password
এর মান এক্সট্র্যাক্ট করবে এবং প্রতিটি রিকোয়েস্টে ব্যবহার করবে।
BeanShell এবং JMeter Scripting এর মাধ্যমে জেমিটার টেস্ট প্ল্যানে কাস্টম কার্য সম্পাদন করা যায়। BeanShell স্ক্রিপ্টের মাধ্যমে আপনি HTTP রিকোয়েস্টের আগে বা পরে কাস্টম কোড চালাতে পারেন, যেমন ডেটা ম্যানিপুলেশন বা রেসপন্স এক্সট্র্যাকশন। JMeter Functions এবং Groovy স্ক্রিপ্টগুলি আপনার টেস্টের মধ্যে আরও ডায়নামিক কার্য সম্পাদন করতে সহায়তা করে, যেমন র্যান্ডম ভ্যালু জেনারেট করা, গণনা করা বা ডেটা এক্সট্র্যাক্ট করা। JMeter এর এই স্ক্রিপ্টিং ক্ষমতা আপনার টেস্ট প্ল্যানকে আরো ফ্লেক্সিবল এবং শক্তিশালী করে তোলে।
জেমিটার (JMeter) একটি শক্তিশালী টুল যা পারফরম্যান্স, লোড, এবং স্ট্রেস টেস্টিংয়ের জন্য ব্যবহৃত হয়। BeanShell Sampler এবং Pre-Processor হল দুটি গুরুত্বপূর্ণ ফিচার যা জেমিটার টেস্ট কেস কনফিগারেশন এবং স্ক্রিপ্টিংকে আরও ফ্লেক্সিবল ও কার্যকরী করে তোলে। এই ফিচারগুলো আপনাকে আরও ডাইনামিক এবং কাস্টমাইজড টেস্ট কেস তৈরি করতে সাহায্য করে।
এই গাইডে আমরা BeanShell Sampler এবং Pre-Processor এর ব্যবহার সম্পর্কে বিস্তারিত আলোচনা করব।
BeanShell Sampler হল জেমিটার একটি স্ক্রিপ্টিং উপাদান যা Java বা BeanShell স্ক্রিপ্টিং ভাষা ব্যবহার করে কাস্টম কোড বা স্ক্রিপ্ট রান করতে সাহায্য করে। এটি আপনাকে HTTP রিকোয়েস্ট বা অন্য কোন স্যাম্পলারের আগে বা পরে বিশেষ কোনো কাজ করার সুযোগ দেয়।
আপনি যদি কোনো র্যান্ডম নাম জেনারেট করতে চান, তাহলে BeanShell Sampler-এ নিচের কোডটি ব্যবহার করতে পারেন:
import java.util.Random;
String[] names = {"John", "Jane", "Mike", "Alice", "Bob"};
Random rand = new Random();
String randomName = names[rand.nextInt(names.length)];
vars.put("RandomName", randomName);
এখানে, এই স্ক্রিপ্টটি একটি র্যান্ডম নাম নির্বাচন করবে এবং সেটিকে RandomName ভ্যারিয়েবলে সংরক্ষণ করবে, যা পরবর্তী রিকোয়েস্টে ব্যবহার করা যেতে পারে।
Pre-Processor হল জেমিটার উপাদান যা রিকোয়েস্ট পাঠানোর আগে কিছু কোড বা স্ক্রিপ্ট রান করার জন্য ব্যবহৃত হয়। এটি সাধারণত রিকোয়েস্টের জন্য ডেটা প্রস্তুত করার কাজ করে, যেমন, ডাইনামিক ডেটা তৈরি করা বা কনফিগারেশন সেট করা।
ধরা যাক, আপনি চান যে, রিকোয়েস্ট পাঠানোর আগে একটি র্যান্ডম নাম তৈরি করা হোক (যেমন BeanShell Pre-Processor ব্যবহার করে)। এখানে নিচের কোডটি লিখতে পারেন:
import java.util.Random;
String[] names = {"John", "Jane", "Mike", "Alice", "Bob"};
Random rand = new Random();
String randomName = names[rand.nextInt(names.length)];
vars.put("RandomName", randomName);
এটি BeanShell Pre-Processor হিসেবে কাজ করবে এবং RandomName ভ্যারিয়েবলটি আপনার HTTP রিকোয়েস্টের সাথে যুক্ত হবে। পরবর্তী HTTP Request-এ আপনি ${RandomName}
ব্যবহার করতে পারবেন।
দিক | BeanShell Sampler | Pre-Processor |
---|---|---|
কার্যকলাপ | রিকোয়েস্টের মধ্যে স্ক্রিপ্ট বা কোড রান করা | রিকোয়েস্টের আগে কোড বা স্ক্রিপ্ট রান করা |
ব্যবহার | কাস্টম কোড বা স্ক্রিপ্ট তৈরি করতে | ডেটা প্রস্তুতি বা কনফিগারেশন পরিবর্তন করতে |
সামঞ্জস্য | সম্পূর্ণ স্ক্রিপ্ট লিখতে ব্যবহৃত | রিকোয়েস্টের আগে ডেটা বা কনফিগারেশন সেট করার জন্য |
BeanShell Sampler এবং Pre-Processor হল জেমিটার টেস্ট কনফিগারেশনের অত্যন্ত শক্তিশালী উপাদান। BeanShell Sampler আপনাকে কাস্টম স্ক্রিপ্ট বা কোড রান করার সুযোগ দেয়, যা টেস্ট কেসকে আরও ডাইনামিক এবং কাস্টমাইজড করে তোলে। অন্যদিকে, Pre-Processor রিকোয়েস্টের আগে ডাইনামিক ডেটা তৈরি বা কনফিগারেশন পরিবর্তন করার জন্য ব্যবহৃত হয়। এই দুটি উপাদান একত্রে ব্যবহার করে আপনি জেমিটার টেস্ট কেসকে আরও কার্যকরী এবং বাস্তবসম্মত করে তুলতে পারেন।
JMeter একটি শক্তিশালী টুল যা বিভিন্ন ধরনের টেস্টিং করতে সক্ষম, এবং এর মধ্যে রয়েছে BeanShell Scripting। BeanShell JMeter তে একটি স্ক্রিপ্টিং ল্যাঙ্গুয়েজ হিসেবে ব্যবহৃত হয় যা Java ভিত্তিক, তবে এটি খুবই সহজ এবং সহজে ব্যবহারযোগ্য। BeanShell এর মাধ্যমে আপনি JMeter টেস্টের মধ্যে ডায়নামিক আচরণ বা কাস্টম লজিক তৈরি করতে পারেন, যা সাধারাণভাবে সরাসরি JMeter কনফিগারেশন দ্বারা সম্ভব হয় না।
BeanShell একটি Java-এর মতো স্ক্রিপ্টিং ল্যাঙ্গুয়েজ, যা JMeter তে বিভিন্ন কাস্টম স্ক্রিপ্টিং অপারেশন করতে ব্যবহার করা হয়। এটি মূলত Java কোডের সাথে সামঞ্জস্যপূর্ণ, তবে আরো সহজ এবং লঘু। JMeter এর মধ্যে BeanShell ব্যবহার করার মাধ্যমে আপনি কাস্টম ভ্যারিয়েবল বা ফাংশন তৈরি করতে পারেন, যা আপনার টেস্ট কেসের জন্য বিশেষভাবে দরকারী।
JMeter তে BeanShell স্ক্রিপ্ট সাধারণত BeanShell PreProcessor, BeanShell PostProcessor, BeanShell Sampler, বা BeanShell Assertion এর মাধ্যমে ব্যবহার করা হয়। BeanShell স্ক্রিপ্টিং এর মাধ্যমে আপনি যেমন ডাইনামিক ভ্যারিয়েবল তৈরি করতে পারেন, তেমনি টেস্ট চলাকালে প্রোগ্রাম্যাটিক চেকও করতে পারেন।
BeanShell PreProcessor স্ক্রিপ্টটি রিকোয়েস্ট প্রেরণের আগে রান হয় এবং এটি প্রি-প্রসেসিং কাজ করতে ব্যবহৃত হয়। ধরুন, আপনি একটি API টেস্ট করছেন এবং প্রতিটি রিকোয়েস্টের জন্য একটি ডাইনামিক টোকেন তৈরি করতে চান।
// টোকেন তৈরি করা
String token = "Token_" + System.currentTimeMillis();
vars.put("dynamicToken", token); // "dynamicToken" একটি JMeter ভ্যারিয়েবল হিসেবে সংরক্ষণ করা হবে
এখন, আপনি HTTP Request এ Authorization বা অন্য যে কোনো জায়গায় ${dynamicToken}
ব্যবহার করতে পারবেন। যেমন:
Bearer ${dynamicToken}
এটি আপনার API রিকোয়েস্টে ডাইনামিক টোকেন ব্যবহার করবে, যা প্রতি রিকোয়েস্টে ভিন্ন হবে।
BeanShell PostProcessor স্ক্রিপ্টটি HTTP রিকোয়েস্টের রেসপন্স পাওয়ার পর রান হয়। ধরুন, আপনি API রেসপন্স থেকে একটি নির্দিষ্ট ভ্যালু (যেমন, একটি userId
) এক্সট্র্যাক্ট করতে চান এবং সেটি পরবর্তী রিকোয়েস্টে ব্যবহার করতে চান।
// রেসপন্স থেকে userId এক্সট্র্যাক্ট করা
String response = prev.getResponseDataAsString();
String userId = response.substring(response.indexOf("userId\":\"") + 9, response.indexOf("\"", response.indexOf("userId\":\"") + 9));
vars.put("userId", userId); // এক্সট্র্যাক্ট করা userId কে JMeter ভ্যারিয়েবল হিসেবে সংরক্ষণ করা হবে
এখন, আপনি পরবর্তী HTTP Request এ ${userId}
ব্যবহার করতে পারেন। যেমন:
/getUserDetails/${userId}
এটি পরবর্তী রিকোয়েস্টে ডাইনামিকভাবে userId
ইনপুট প্যারামিটার পাঠাবে।
BeanShell Assertion দিয়ে আপনি কাস্টম চেক করতে পারেন, যেমন রেসপন্স কোড যাচাই করা, রেসপন্সে নির্দিষ্ট কন্টেন্ট থাকা কিনা তা যাচাই করা ইত্যাদি।
// রেসপন্স কোড চেক করা
int responseCode = prev.getResponseCode();
if (responseCode != 200) {
Failure = true; // রেসপন্স কোড ২০০ না হলে Assertion ফেল হবে
FailureMessage = "Expected 200, but got " + responseCode; // একটি কাস্টম মেসেজ প্রদান
}
এটি চেক করবে যে, HTTP রেসপন্স কোড ২০০ কিনা। যদি না হয়, তাহলে Assertion ফেল হবে এবং একটি কাস্টম মেসেজ দেখানো হবে।
JMeter তে BeanShell Scripting আপনাকে কাস্টম স্ক্রিপ্ট তৈরি করার সুযোগ দেয়, যা জটিল টেস্ট কেস বা ডাইনামিক আচরণ সিমুলেট করার জন্য খুবই কার্যকরী। BeanShell PreProcessor, PostProcessor, এবং Assertion ব্যবহার করে আপনি API রেসপন্স থেকে ডেটা এক্সট্র্যাক্ট করতে, কাস্টম চেক করতে এবং ডাইনামিকভাবে টেস্ট কেস সাজাতে পারেন। এটি JMeter টেস্ট কনফিগারেশনে আরো ফ্লেক্সিবিলিটি এবং কার্যক্ষমতা যোগ করে।
Read more