Appium হল একটি ক্রস-প্ল্যাটফর্ম ফ্রেমওয়ার্ক যা মোবাইল, ওয়েব এবং ডেস্কটপ অ্যাপ্লিকেশনের টেস্টিং অটোমেশনের জন্য WebDriver প্রোটোকলের উপর ভিত্তি করে তৈরি। এটি আপনাকে যেকোনো প্রোগ্রামিং ভাষায় টেস্ট লিখতে এবং কোড পরিবর্তন না করেই Android, iOS এবং Windows-এ চালানোর অনুমতি দেয়। Appium Foundation, 2025-এর মতে, WebDriver প্রোটোকল বিভিন্ন প্ল্যাটফর্মের অ্যাপ্লিকেশনের সাথে যোগাযোগের জন্য একটি ইউনিফাইড ইন্টারফেস প্রদান করে।
মূল বিষয়
Appium হল একটি ওপেন-সোর্স ফ্রেমওয়ার্ক যা মোবাইল অ্যাপ্লিকেশন টেস্টিং অটোমেশনের জন্য ক্লায়েন্ট-সার্ভার আর্কিটেকচারে নির্মিত। Appium সার্ভার ক্লায়েন্টের কাছ থেকে WebDriver প্রোটোকলের মাধ্যমে কমান্ড গ্রহণ করে এবং সেগুলি নেটিভ ড্রাইভারদের কাছে অর্পণ করে: iOS-এর জন্য XCUITest, Android-এর জন্য UiAutomator2 এবং Windows-এর জন্য WinAppDriver।
Appium 2013 সালে তৈরি করা হয়েছিল এবং তারপর থেকে এটি ক্রস-প্ল্যাটফর্ম টেস্টিংয়ের জন্য শিল্প মান হয়ে উঠেছে। প্রকল্পটি Appium ফাউন্ডেশন দ্বারা পরিচালিত হয় এবং বড় কোম্পানিগুলি দ্বারা সমর্থিত: Sauce Labs, HeadSpin, Microsoft। সারা বিশ্বে প্রতি মাসে 500 হাজারেরও বেশি টেস্টার Appium ব্যবহার করে।
Appium তিন ধরণের অ্যাপ্লিকেশন সমর্থন করে: নেটিভ (iOS, Android, Windows), মোবাইল ওয়েব ব্রাউজার (Safari, Chrome) এবং হাইব্রিড অ্যাপ্লিকেশন (নেটিভ শেলের ভিতরে WebView)। প্রতিটি প্রকার তার নিজস্ব কনটেক্সট ব্যবহার করে: NATIVE_APP, WEBVIEW বা CHROMIUM।
Appium আর্কিটেকচার চারটি স্তর নিয়ে গঠিত: ক্লায়েন্ট কোড → Appium ক্লায়েন্ট লাইব্রেরি → Appium সার্ভার → নেটিভ ড্রাইভার। ক্লায়েন্ট লাইব্রেরি WebDriver প্রোটোকল বাস্তবায়ন করে এবং সার্ভারে HTTP অনুরোধ পাঠায়। সার্ভার সেগুলিকে প্ল্যাটফর্মের নেটিভ ড্রাইভার কমান্ডে রূপান্তর করে।
WebDriver হল ব্রাউজার অটোমেশনের জন্য W3C মান, যা Appium দ্বারা মোবাইল ডিভাইসের জন্য অভিযোজিত। প্রতিটি ক্রিয়া — এলিমেন্ট অনুসন্ধান, ট্যাপ, টেক্সট ইনপুট — সার্ভারে একটি HTTP অনুরোধ হিসাবে পাঠানো হয়। উদাহরণস্বরূপ, POST /session/{id}/element একটি নতুন টেস্টিং সেশন তৈরি করে।
প্রতিটি টেস্ট Desired Capabilities অবজেক্টের মাধ্যমে একটি সেশন তৈরি করে শুরু হয়। এটি নির্দিষ্ট করে: platformName, deviceName, appPath, automationName এবং অতিরিক্ত প্যারামিটার। Appium উপযুক্ত নেটিভ ড্রাইভার এবং ডিভাইস কনফিগারেশন নির্বাচন করতে এই ডেটা ব্যবহার করে।
# Android-এর জন্য Desired Capabilities উদাহরণ
desired_caps = {
'platformName': 'Android',
'deviceName': 'Pixel_4',
'app': '/path/to/app.apk',
'automationName': 'UiAutomator2',
'appPackage': 'com.example.app',
'appActivity': '.MainActivity'
}
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
Appium npm-এর মাধ্যমে ইনস্টল করা হয়: npm install -g appium। ইনস্টলেশনের পরে, আপনাকে প্রতিটি প্ল্যাটফর্মের জন্য নেটিভ ড্রাইভার কনফিগার করতে হবে: appium driver install xcuitest এবং appium driver install uiautomator2। iOS-এর জন্য Xcode এবং Android-এর জন্য Android SDK প্রয়োজন।
Appium Inspector হল UI এলিমেন্ট পরিদর্শনের জন্য একটি গ্রাফিকাল টুল। এটি একটি চলমান Appium সার্ভারের সাথে সংযোগ করে এবং UI উপাদানগুলির শ্রেণিবিন্যাস, তাদের বৈশিষ্ট্য এবং লোকেটার দেখায়। Inspector একটি টেস্ট লেখার আগে সিলেক্টর যাচাই করার অনুমতি দেয়।
Appium সার্ভার ঐচ্ছিক প্যারামিটার সহ appium কমান্ড দ্বারা শুরু করা হয়: পোর্ট, ঠিকানা, লগিং। ডিফল্টরূপে, সার্ভার পোর্ট 4723-এ শোনে। একাধিক ডিভাইসে সমান্তরাল নির্বাহের জন্য বিভিন্ন পোর্ট বা Appium ক্লাস্টার ব্যবহার করা হয়।
# লগিং সহ Appium সার্ভার শুরু করা
appium \
--port 4723 \
--log-level debug \
--use-plugins images \
--base-path /wd/hub
Appium টেস্ট কোড সংগঠনের জন্য Page Object প্যাটার্ন ব্যবহার করে। প্রতিটি অ্যাপ স্ক্রিন এলিমেন্ট লোকেটার এবং ইন্টারঅ্যাকশন পদ্ধতি সহ একটি পৃথক ক্লাস দ্বারা বর্ণিত হয়। Page Object Model ইন্টারফেস পরিবর্তন হলে টেস্ট রক্ষণাবেক্ষণ সহজ করে এবং টেস্ট দৃশ্যপটের মধ্যে সিলেক্টর পুনরায় ব্যবহার করে।
Appium অনেক এলিমেন্ট অনুসন্ধান কৌশল সমর্থন করে: id, xpath, accessibilityId, className, androidUIAutomator এবং iOSClassChain। সবচেয়ে পছন্দের হল accessibilityId এবং id — এগুলি লেআউট পরিবর্তন সত্ত্বেও স্থিতিশীল। XPath শুধুমাত্র তখনই ব্যবহার করা উচিত যখন অন্য লোকেটার উপলব্ধ না থাকে।
// লগইন স্ক্রিনের জন্য Page Object
public class LoginPage {
private AppiumDriver driver;
private MobileElement emailField =
(MobileElement) driver.findElement(MobileBy.AccessibilityId("emailInput"));
private MobileElement passwordField =
(MobileElement) driver.findElement(MobileBy.AccessibilityId("passwordInput"));
private MobileElement loginButton =
(MobileElement) driver.findElement(MobileBy.AccessibilityId("loginButton"));
public void login(String email, String password) {
emailField.sendKeys(email);
passwordField.sendKeys(password);
loginButton.click();
}
}
Appium TouchAction ক্লাস বা W3C Actions API-এর মাধ্যমে জটিল জেসচার সমর্থন করে: সোয়াইপ, মাল্টি-টাচ, লং প্রেস, এলিমেন্টে স্ক্রোল। নতুন W3C Actions API নতুন প্রকল্পের জন্য সুপারিশ করা হয় কারণ এটি প্রমিত এবং বিভিন্ন প্ল্যাটফর্ম সংস্করণ জুড়ে আরও স্থিতিশীলভাবে কাজ করে।
Appium-এর তুলনা প্রায়শই Detox, XCUITest এবং Espresso-এর সাথে করা হয়। Appium-এর প্রধান সুবিধা হল ক্রস-প্ল্যাটফর্ম ক্ষমতা: একটি টেস্ট পরিবর্তন ছাড়াই iOS এবং Android-এ চালানো যেতে পারে। তবে, Detox React Native-এর জন্য আরও ভাল সিঙ্ক্রোনাইজেশন প্রদান করে, এবং XCUITest/Espresso নেটিভ টেস্টের জন্য দ্রুত নির্বাহ প্রদান করে।
Appium এমন প্রকল্পের জন্য উপযুক্ত যেগুলির iOS, Android এবং ওয়েবের জন্য একক ফ্রেমওয়ার্ক প্রয়োজন। এটি এমন টিমে অপরিহার্য যেখানে টেস্টাররা Java বা Python-এ লেখে। অনেক E2E টেস্ট সহ React Native প্রকল্পের জন্য, স্বয়ংক্রিয় সিঙ্ক্রোনাইজেশনের কারণে Detox বিবেচনা করুন।
| ফ্রেমওয়ার্ক | পদ্ধতি | গতি | ক্রস-প্ল্যাটফর্ম |
|---|---|---|---|
| Appium | ব্ল্যাক-বক্স | মাঝারি | iOS, Android, Windows |
| Detox | গ্রে-বক্স | উচ্চ | iOS + Android (React Native) |
| XCUITest | হোয়াইট-বক্স | উচ্চ | শুধুমাত্র iOS |
Appium Grid হল একাধিক ডিভাইসে একসাথে সমান্তরালভাবে টেস্ট চালানোর জন্য একটি এক্সটেনশন। Appium Grid Selenium Grid-এর উপর নির্মিত এবং একাধিক Appium সার্ভার জুড়ে টেস্ট বিতরণের অনুমতি দেয়, প্রতিটি তার নিজস্ব ডিভাইস বা এমুলেটর সেট পরিচালনা করে। এটি বড় প্রকল্পের জন্য গুরুত্বপূর্ণ যেখানে একটি একক ডিভাইসে রিগ্রেশন টেস্টিং ঘন্টা সময় নেয় — Grid নোডের সংখ্যার অনুপাতে সময় মিনিটে হ্রাস করে।
Grid কনফিগারেশন ডিভাইস সহ নোড বর্ণনা করে একটি JSON কনফিগারেশন ফাইল ব্যবহার করে। প্রতিটি নোড নির্দিষ্ট করে: সার্ভার পোর্ট, প্ল্যাটফর্ম সহ ডিভাইসের তালিকা, OS সংস্করণ এবং সর্বাধিক সেশন সংখ্যা। Hub মুক্ত নোডগুলিতে টেস্ট বিতরণ করে, সর্বাধিক অবকাঠামো ব্যবহার নিশ্চিত করে।
{
"capabilities": [
{
"browserName": "android",
"platformName": "Android",
"deviceName": "Pixel_4",
"platformVersion": "14.0",
"maxInstances": 2
}
],
"configuration": {
"port": 4724,
"registerCycle": 5000
}
}
যদি আপনার নিজস্ব ডিভাইস অবকাঠামো উপলব্ধ না হয়, তাহলে ক্লাউড পরিষেবা রয়েছে: Sauce Labs, BrowserStack, LambdaTest। তারা ক্লাউডে শত শত বাস্তব ডিভাইস এবং এমুলেটর সরবরাহ করে। Appium-এর সাথে একীকরণ ন্যূনতম: localhost-এর পরিবর্তে Desired Capabilities-এ ক্লাউড হাব URL এবং ক্রেডেনশিয়াল নির্দিষ্ট করুন।
Appium TestNG (Java) বা pytest-xdist (Python) ব্যবহার করে সমান্তরাল টেস্ট নির্বাহ সমর্থন করে। সমান্তরালকরণ প্রতিটি সেশনের জন্য অনন্য পোর্ট এবং বিচ্ছিন্ন টেস্ট ডেটা প্রয়োজন। প্রতিটি থ্রেড একটি পৃথক ডিভাইস বা এমুলেটরে তার নিজস্ব Appium সেশন শুরু করে। ক্লাউড পরিষেবা ব্যবহার করার সময়, সমান্তরালকরণ স্বয়ংক্রিয় — প্ল্যাটফর্ম উপলব্ধ ডিভাইসগুলিতে টেস্ট বিতরণ করে এবং সমাপ্তির পরে সেগুলি মুক্ত করে।
Appium-এর সাথে সমস্যার সম্মুখীন হলে, প্রথম পদক্ষেপ হল সার্ভার লগ (appium --log-level debug) পরীক্ষা করা। সাধারণ ত্রুটিগুলি: পোর্ট ব্যস্ত (অন্য --port নির্দিষ্ট করুন), অসামঞ্জস্যপূর্ণ ড্রাইভার সংস্করণ, অনুপস্থিত Android SDK বা Xcode। iOS-এর জন্য, নিশ্চিত করুন যে WebKitAgent চলছে এবং সিমুলেটরে অ্যাক্সেস রয়েছে।
যদি Appium একটি এলিমেন্ট খুঁজে না পায়, তাহলে পরীক্ষা করুন: কনটেক্সট কি সঠিক (NATIVE_APP বনাম WEBVIEW), এলিমেন্ট কি স্ক্রিনে দৃশ্যমান, এটির কি স্ক্রোল প্রয়োজন, এবং লোকেটার কি সঠিক। টেস্টে ঢোকানোর আগে ইন্টারেক্টিভ অনুসন্ধান এবং XPath এক্সপ্রেশন পরীক্ষার জন্য Appium Inspector ব্যবহার করুন। WebDriverWait-এর মাধ্যমে এলিমেন্ট দৃশ্যমানতার জন্য অপেক্ষা সক্ষম করাও সহায়ক — এটি ধীর UI লোডিংয়ের সাথে সিঙ্ক্রোনাইজেশন সমস্যার সমাধান করে।
অনুচিত সেশন সমাপ্তি Appium টেস্ট অস্থিরতার একটি সাধারণ কারণ। finally ব্লকে বা AutoCloseable-এর মাধ্যমে সর্বদা ড্রাইভার বন্ধ করুন। ব্যর্থতার ক্ষেত্রে, জোর করে driver.quit() ব্যবহার করুন। iOS-এর জন্য, নিশ্চিত করুন যে WebKitAgent (WDA) সেশনগুলির মধ্যে পুনরায় শুরু হয়, অন্যথায় সেশন তৈরি হয়নি ত্রুটি ঘটতে পারে। CI-তে সেশন অবস্থা পর্যবেক্ষণের জন্য, Appium Dashboard প্লাগইন সংযোগ করা সুবিধাজনক, যা রিয়েল টাইমে সমস্ত চলমান টেস্টের অবস্থা দেখায়।
টেস্ট স্থিতিশীলতা উন্নত করতে, ব্যবহার করুন: shouldTerminateApp (পরীক্ষার মধ্যে অ্যাপ শেষ করুন), noReset (সেশনের মধ্যে ডেটা সংরক্ষণ করুন), autoGrantPermissions (স্বয়ংক্রিয়ভাবে সিস্টেম ডায়ালগ অনুমতি দিন)। ডেভেলপার অপশনের মাধ্যমে ডিভাইসে অ্যানিমেশন বন্ধ করারও সুপারিশ করা হয়।
সচরাচর জিজ্ঞাসিত প্রশ্ন
Appium ক্লায়েন্ট লাইব্রেরির মাধ্যমে সমস্ত জনপ্রিয় ভাষা সমর্থন করে: Java, Python, JavaScript, Ruby, C#, PHP এবং Kotlin। প্রতিটি লাইব্রেরি একই WebDriver প্রোটোকল বাস্তবায়ন করে, যা আপনাকে যেকোনো ভাষায় ক্রস-প্ল্যাটফর্ম টেস্ট লিখতে দেয়।
না, Appium আসল ডিভাইস এবং এমুলেটর ও সিমুলেটর উভয়ের সাথেই কাজ করে। Android-এর জন্য Android Studio এমুলেটর ব্যবহার করা হয়, iOS-এর জন্য Xcode সিমুলেটর। আসল ডিভাইস শুধুমাত্র হার্ডওয়্যার ফাংশন পরীক্ষার জন্য প্রয়োজনীয়: সেন্সর, NFC, ক্যামেরা।
Appium 2 প্লাগইন এবং পৃথক ড্রাইভার সহ মডুলার আর্কিটেকচার দিয়ে সম্পূর্ণরূপে পুনর্লিখিত হয়েছে। Appium 1-এ, সমস্ত ড্রাইভার সার্ভারে তৈরি ছিল। Appium 2 ড্রাইভার ইনস্টল করতে appium driver install এবং প্লাগইনের জন্য appium plugin install কমান্ড ব্যবহার করে।
Appium অনুসন্ধান কৌশল ব্যবহার করে: By.id, By.xpath, By.accessibilityId, By.className, By.androidUIAutomator এবং By.iOSClassChain। গতির জন্য, accessibilityId ব্যবহার করার সুপারিশ করা হয় — এটি স্থিতিশীল এবং লেআউট পরিবর্তনের উপর নির্ভর করে না।
হ্যাঁ, Appium মোবাইল ব্রাউজার পরীক্ষা সমর্থন করে — iOS-এ Safari এবং Android-এ Chrome। এর জন্য WEBVIEW বা CHROMIUM কনটেক্সট ব্যবহার করা হয়। টেস্টগুলি Selenium-এর মতো স্ট্যান্ডার্ড WebDriver-এর মাধ্যমে ব্রাউজারে চলে।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন