XCUITest হল iOS, iPadOS এবং macOS অ্যাপ্লিকেশনের UI টেস্টিংয়ের জন্য Apple-এর ফ্রেমওয়ার্ক, যা সরাসরি XCTest এবং Xcode-এ তৈরি। এটি ব্যবহারকারীর ক্রিয়া সিমুলেট করতে দেয়: ট্যাপ, টেক্সট ইনপুট, সোয়াইপ, স্ক্রল এবং জেসচার — ইন্টারফেস উপাদানের অভ্যন্তরীণ অবস্থায় অ্যাক্সেস সহ। Apple Developer Documentation, 2025 অনুসারে, XCUIApplication হল সমস্ত UI টেস্টের এন্ট্রি পয়েন্ট এবং স্ক্রিন উপাদানের শ্রেণিবিন্যাসে অ্যাক্সেস প্রদান করে।
মূল পয়েন্ট
XCUITest হল Apple দ্বারা Xcode 7 (2015)-এ প্রকাশিত একটি UI টেস্টিং ফ্রেমওয়ার্ক। এটি UI Automation (UIA)-কে প্রতিস্থাপন করেছে এবং Apple প্ল্যাটফর্মে স্বয়ংক্রিয় ইন্টারফেস টেস্টিংয়ের জন্য আদর্শ টুল হয়ে উঠেছে। XCUITest সম্পূর্ণরূপে XCTest — Apple-এর ইউনিফাইড টেস্টিং ফ্রেমওয়ার্ক-এর সাথে সংহত।
ইউনিট টেস্টের বিপরীতে, যা ক্লাস এবং মেথডের স্তরে লজিক যাচাই করে, XCUITest ক্রিয়া সিমুলেশনের মাধ্যমে ব্যবহারকারী ইন্টারফেস পরীক্ষা করে। টেস্টগুলি অ্যাপ্লিকেশন থেকে আলাদা প্রক্রিয়ায় চলে এবং অ্যাক্সেসিবিলিটি API-এর মাধ্যমে এর সাথে ইন্টারঅ্যাক্ট করে — এটি বিচ্ছিন্নতা এবং নির্ভরযোগ্যতা নিশ্চিত করে।
XCUITest-এর তৃতীয় পক্ষের সার্ভার (Appium-এর বিপরীতে) বা ডিভাইস ইন্টারঅ্যাকশনের জন্য অতিরিক্ত লাইব্রেরি ইনস্টল করার প্রয়োজন নেই। প্রয়োজনীয় সবকিছু ইতিমধ্যে Xcode-এ অন্তর্ভুক্ত। এটি নতুন iOS সংস্করণের সাথে সর্বোত্তম সামঞ্জস্য এবং নতুন জেসচার এবং কন্ট্রোলে তাত্ক্ষণিক অ্যাক্সেস নিশ্চিত করে।
XCUITest আর্কিটেকচার দুটি মূল ক্লাসের উপর নির্মিত: XCUIApplication — লঞ্চ করা টেস্টযোগ্য অ্যাপ্লিকেশন, এবং XCUIElement — ইন্টারফেস উপাদান। XCTest টেস্ট রানার টেস্ট লাইফসাইকেল পরিচালনা করে: setUp, টেস্ট মেথড, tearDown। XCUITest একটি আলাদা প্রক্রিয়া হিসেবে চলে যা অ্যাক্সেসিবিলিটি ব্রিজের মাধ্যমে অ্যাপ্লিকেশন নিয়ন্ত্রণ করে।
প্রতিটি UI উপাদান একটি XCUIElement অবজেক্ট দ্বারা উপস্থাপিত হয়, যাতে অবস্থা (exists, isHittable, label, value) এবং ক্রিয়া (tap, pressForDuration, swipeUp, typeText) কুয়েরি করার জন্য মেথড থাকে। উপাদানগুলি কুয়েরি চেইনের মাধ্যমে শ্রেণিবিন্যাসে সংগঠিত হয়: app.buttons[].staticTexts[].tables[]। এটি স্ক্রিনে যেকোনো উপাদান নমনীয়ভাবে খুঁজে পাওয়ার অনুমতি দেয়।
XCUITest উপাদান শনাক্ত করতে অ্যাক্সেসিবিলিটি অ্যাট্রিবিউট ব্যবহার করে: accessibilityIdentifier — একটি প্রোগ্রামেটিক শনাক্তকারী, এবং accessibilityLabel — VoiceOver-এর জন্য বিবরণ। অ্যাপ্লিকেশন কোডে accessibilityIdentifier সেট করার সুপারিশ করা হয় — এটি স্থানীয়করণ এবং লেআউট নির্বিশেষে টেস্টগুলিকে স্থিতিশীল করে।
XCUITest টেস্ট XCTest সিনট্যাক্স ব্যবহার করে Swift-এ লেখা হয়। প্রতিটি টেস্ট ক্লাস XCTestCase থেকে ইনহেরিট করে এবং test দিয়ে শুরু হওয়া মেথড ধারণ করে। setUp মেথডে প্রয়োজনীয় কনফিগারেশনের সাথে অ্যাপ্লিকেশন লঞ্চ করা হয়, এবং tearDown-এ ক্লিনআপ এবং সেশন শেষ করা হয়।
একটি সাধারণ টেস্ট: উপাদান খুঁজুন → ক্রিয়া সম্পাদন করুন → ফলাফল যাচাই করুন। উপাদান অনুসন্ধান XCUIElementQuery চাইল্ড কুয়েরির মাধ্যমে করা হয়: app.buttons["loginButton"], app.textFields["email"]। ক্রিয়া: .tap(), .typeText("text"), .swipeUp()। যাচাইকরণ: XCTAssertTrue(element.exists) বা XCTAssertEqual(element.label, "expected")।
import XCTest
class LoginTests: XCTestCase {
let app = XCUIApplication()
override func setUp() {
continueAfterFailure = false
app.launch()
}
func testLoginWithValidCredentials() {
let emailField = app.textFields["emailInput"]
emailField.tap()
emailField.typeText("user@test.com")
let passwordField = app.secureTextFields["passwordInput"]
passwordField.tap()
passwordField.typeText("password123")
app.buttons["loginButton"].tap()
let homeLabel = app.staticTexts["homeTitle"]
XCTAssertTrue(homeLabel.exists)
}
}
XCUITest XCTWaiter এবং NSPredicate প্রেডিকেটের মাধ্যমে স্পষ্ট প্রত্যাশা সমর্থন করে। উদাহরণস্বরূপ, 5 সেকেন্ডের মধ্যে উপাদান উপস্থিত হওয়ার অপেক্ষা: XCTWaiter().wait(for: [expectation], timeout: 5)। Detox-এর বিপরীতে, XCUITest-এ নেটওয়ার্ক অনুরোধের সাথে স্বয়ংক্রিয় সিঙ্ক্রোনাইজেশন নেই।
// টাইমআউট সহ উপাদান উপস্থিত হওয়ার অপেক্ষা
let expectedElement = app.staticTexts["welcomeMessage"]
let existsPredicate = NSPredicate(format: "exists == true")
let expectation = XCTNSNotificationExpectation(object: expectedElement)
let result = XCTWaiter().wait(
for: [expectation], timeout: 5
)
XCTAssertEqual(result, .completed)
XCUITest জটিল পরিস্থিতির টেস্টিং সমর্থন করে: মাল্টি-টাচ জেসচার, পুশ নোটিফিকেশন, ডিপ লিংক, SFSafariViewController এবং আন্তঃঅ্যাপ্লিকেশন ইন্টারঅ্যাকশন। Siri ইন্টেন্ট-ও Siri Remote সিমুলেশন ব্যবহার করে XCUITest-এর মাধ্যমে টেস্ট করা যেতে পারে।
XCUITest সমস্ত জনপ্রিয় জেসচার সমর্থন করে: tap, doubleTap, pressForDuration, swipeUp/Down/Left/Right, pinch, rotate, twoFingerTap। জটিল পরিস্থিতির জন্য, কাস্টম কোঅর্ডিনেট এবং সময়কাল সহ XCUIGesture ব্যবহার করা হয়। এটি ড্রইং বা ড্র্যাগ-এন্ড-ড্রপের মতো কাস্টম জেসচার টেস্ট করার অনুমতি দেয়।
Xcode 12 থেকে শুরু করে, XCUITest XCTestExpectation এবং URLProtocol-এর মাধ্যমে নেটওয়ার্ক অনুরোধ ইন্টারসেপশন সমর্থন করে। এটি অ্যাপ্লিকেশন কোড পরিবর্তন না করেই অফলাইন মোডে বা নকল সার্ভার প্রতিক্রিয়া সহ অ্যাপ্লিকেশন টেস্ট করার অনুমতি দেয়।
XCUITest CI পরিবেশে xcodebuild-এর মাধ্যমে test ফ্ল্যাগ সহ চলে। একাধিক সিমুলেটরে সমান্তরাল এক্সিকিউশনের জন্য, Xcode স্কিমে সমান্তরাল এক্সিকিউশন কনফিগারেশন সহ xcodebuild -testPlan ব্যবহার করা হয়। GitHub Actions, Bitrise এবং Jenkins-এ XCUITest-এর জন্য অন্তর্নির্মিত সমর্থন রয়েছে।
CI-এর জন্য, কোড সাইনিং, প্রোভিজনিং প্রোফাইল এবং গন্তব্য (সিমুলেটর বা ডিভাইস) কনফিগার করতে হবে। সিমুলেটরে iOS টেস্টের জন্য সার্টিফিকেটের প্রয়োজন নেই। বাস্তব ডিভাইসের জন্য, Xcode Cloud বা Fastlane-এর মাধ্যমে স্বয়ংক্রিয় স্বাক্ষর প্রয়োজন।
# xcodebuild-এর মাধ্যমে সিমুলেটরে XCUITest চালানো
xcodebuild test \
-project MyApp.xcodeproj \
-scheme MyApp \
-destination 'platform=iOS Simulator,name=iPhone 15,OS=17.5' \
-resultBundlePath ./TestResults \
-parallel-testing-enabled YES \
-parallel-testing-worker-count 4
XCUITest Apple-এর অ্যাক্সেসিবিলিটি API-এর সাথে ঘনিষ্ঠভাবে সম্পর্কিত, কারণ উপাদান অনুসন্ধান অ্যাক্সেসিবিলিটি অ্যাট্রিবিউটের উপর ভিত্তি করে। অ্যাক্সেসিবিলিটি টেস্টিং শুধু উপাদান খোঁজার একটি উপায় নয়, বরং প্রতিবন্ধী ব্যক্তিদের জন্য অ্যাপ্লিকেশনের অ্যাক্সেসযোগ্যতা যাচাই করার একটি উপায়। XCUITest accessibilityLabel, traits এবং hints পরীক্ষা করতে পারে।
VoiceOver হল দৃষ্টিপ্রতিবন্ধী ব্যবহারকারীদের জন্য Apple-এর স্ক্রিন রিডার। XCUITest পরীক্ষা করার অনুমতি দেয়: accessibilityLabel — উপাদানটি কি স্পষ্ট টেক্সটে বর্ণিত, accessibilityTraits — উপাদানের ধরন কি মেলে (বাটন, শিরোনাম, ছবি), এবং accessibilityHint — এটি কি ক্রিয়ার ফলাফল সম্পর্কে ইঙ্গিত প্রদান করে। App Store প্রকাশের জন্য এই চেকগুলি বাধ্যতামূলক, এবং XCUITest রিগ্রেশন রানের অংশ হিসেবে সেগুলি স্বয়ংক্রিয় করে।
Xcode 15 থেকে শুরু করে, XCUITest accessibilityAudit টাইপ সহ XCTAttachment-এর মাধ্যমে অন্তর্নির্মিত অ্যাক্সেসিবিলিটি চেক সমর্থন করে। টেস্ট স্বয়ংক্রিয়ভাবে অপর্যাপ্ত কন্ট্রাস্টযুক্ত উপাদান, লেবেলবিহীন ছবি এবং ভুল traits সম্পর্কে রিপোর্ট করে। এটি ম্যানুয়াল অ্যাক্সেসিবিলিটি ইন্সপেক্টরকে প্রতিস্থাপন করে।
// XCUITest-এ অ্যাক্সেসিবিলিটি অডিট
func testAccessibilityAudit() {
let app = XCUIApplication()
app.launch()
let audit = XCTAttachment(accessibilityAudit: app)
add(audit)
// একটি নির্দিষ্ট উপাদান পরীক্ষা করা
let button = app.buttons["submitButton"]
XCTAssertTrue(button.label.count > 0)
XCTAssertTrue(button.isAccessibilityElement)
}
XCUITest XCTOSSignpostMetric এবং XCUIApplication.metrics-এর মাধ্যমে UI পারফরম্যান্স মাপতে সমর্থন করে। অ্যাপ্লিকেশন লঞ্চ টাইম, নেভিগেশন গতি এবং জেসচার প্রতিক্রিয়া সময় মাপা যায়। পারফরম্যান্স টেস্টগুলি বেসলাইন মাপার সাথে চলে এবং থ্রেশহোল্ড অতিক্রম করলে স্বয়ংক্রিয়ভাবে ব্যর্থ হয়। এটি রিলিজ বিল্ডে ব্যবহারকারীদের কাছে পৌঁছানোর আগে পারফরম্যান্স রিগ্রেশন প্রতিরোধে সহায়তা করে।
বেসলাইন হল একটি টেস্টের রেফারেন্স এক্সিকিউশন সময়। Xcode একটি নির্দিষ্ট ডিভাইস মডেল এবং iOS সংস্করণে প্রতিটি টেস্টের জন্য বেসলাইন মনে রাখে। যদি একটি নতুন রান নির্দিষ্ট শতাংশ (ডিফল্ট 10%) দ্বারা বেসলাইন অতিক্রম করে, টেস্টটি ব্যর্থ বলে বিবেচিত হয়। বেসলাইন আপডেট করতে, টেস্ট রিপোর্টে Edit Baseline কমান্ড ব্যবহার করা হয়। iOS সংস্করণ আপডেট করার সময় বা CI ফার্মের জন্য ডিভাইস মডেল পরিবর্তন করার সময় বেসলাইন পুনরায় গণনা করা গুরুত্বপূর্ণ।
XCUITest টেস্টের স্থিতিশীলতা পর্যবেক্ষণের জন্য, ফ্ল্যাগ ব্যবহার করা হয়: continueAfterFailure (প্রথম ব্যর্থতার পর টেস্ট চালিয়ে যাওয়া হবে কিনা) এবং পুনরায় চেষ্টা কনফিগারেশন সহ Xcode টেস্ট পরিকল্পনা। ব্যর্থ টেস্টের (retry) স্বয়ংক্রিয় পুনরায় শুরু কনফিগার করার সুপারিশ করা হয় — অ্যানিমেশন টাইমিং বা নেটওয়ার্ক বিলম্ব সম্পর্কিত অস্থির টেস্টের জন্য ৩টি প্রচেষ্টা পর্যন্ত।
XCUITest springboard এবং launchArguments-এর মাধ্যমে পুশ নোটিফিকেশন এবং ডিপ লিংক টেস্টিং সমর্থন করে। পুশ নোটিফিকেশনের জন্য, -UNUserNotificationCenter প্যারামিটার সহ XCUIApplication().launchArguments এবং XCTest-এর মাধ্যমে পাঠানো ব্যবহার করা হয়। ডিপ লিংক কাস্টম স্কিম সহ open URL-এর মাধ্যমে টেস্ট করা হয় — XCUITest সিস্টেম ডায়ালগ ইন্টারসেপ্ট করে এবং পরীক্ষা করে যে অ্যাপ্লিকেশন সঠিক স্ক্রিন দিয়ে খুলেছে কিনা। নোটিফিকেশন প্রতিক্রিয়া পরিস্থিতি টেস্ট করার জন্য, XCUIApplication().springboard ব্যবহার করা হয়, যা iOS নোটিফিকেশন সেন্টারে নোটিফিকেশন ব্যানারে ট্যাপ সিমুলেট করে। এই পরিস্থিতিগুলি ডিপ লিংক এবং পুশ ক্যাম্পেইন সহ অ্যাপ্লিকেশনের জন্য গুরুত্বপূর্ণ, যেখানে বাহ্যিক কলের সঠিক হ্যান্ডলিং যাচাই করা প্রয়োজন।
বিস্তারিত পারফরম্যান্স প্রোফাইলিংয়ের জন্য, XCUITest Instruments-এর সাথে সংহত হয়। টেস্টের সময়, XCTMetric-এর মাধ্যমে Time Profiler, Core Animation বা Leaks-এর প্রোফাইলিং লঞ্চ করা যেতে পারে। প্রোফাইলিং ফলাফল রিপোর্টে সংরক্ষিত হয় এবং Xcode-এ বিশ্লেষণের জন্য উপলব্ধ। এটি অ্যাপ্লিকেশন লঞ্চ টাইম, স্ক্রিনের মধ্যে নেভিগেশন এবং অ্যানিমেশন পারফরম্যান্স — iOS অ্যাপ্লিকেশনে সাধারণ বাধাগুলি অপ্টিমাইজ করার জন্য বিশেষভাবে উপযোগী।
সচরাচর জিজ্ঞাসিত প্রশ্ন
XCTest হল সমস্ত ধরণের Apple টেস্টের জন্য সাধারণ ফ্রেমওয়ার্ক, যার মধ্যে ইউনিট টেস্ট এবং পারফরম্যান্স টেস্ট অন্তর্ভুক্ত। XCUITest হল UI টেস্টিংয়ের জন্য XCTest-এর উপরে একটি এক্সটেনশন যা ইন্টারফেসের সাথে ইন্টারঅ্যাক্ট করার জন্য XCUIApplication, XCUIElement এবং XCUIElementQuery ক্লাস যুক্ত করে।
হ্যাঁ, XCUITest Swift এবং Objective-C উভয়ই সমর্থন করে। তবে, বেশিরভাগ Apple উদাহরণ এবং ডকুমেন্টেশন Swift-এ লেখা। Objective-C প্রকল্পগুলি অতিরিক্ত সেটআপ ছাড়াই XCUITest ব্যবহার করতে পারে — ফ্রেমওয়ার্কটি @import XCTest-এর মাধ্যমে উপলব্ধ।
XCUITest Apple-এর অ্যাক্সেসিবিলিটি API ব্যবহার করে। উপাদানগুলি accessibilityIdentifier, accessibilityLabel, টাইপ (button, textField, staticText) বা শ্রেণিবিন্যাসে অবস্থান দ্বারা পাওয়া যায়। অ্যাপ্লিকেশন কোডে অ্যাক্সেসিবিলিটি অ্যাট্রিবিউট যত নির্ভুল হবে, টেস্টগুলি তত স্থিতিশীল হবে।
হ্যাঁ, Xcode-এ UI টেস্টের একটি অন্তর্নির্মিত রেকর্ডার অন্তর্ভুক্ত রয়েছে। রেকর্ডিং মোডে টেস্ট চালানোর সময়, Xcode ইন্টারফেসের সাথে সমস্ত ইন্টারঅ্যাকশন ক্যাপচার করে এবং Swift কোড জেনারেট করে। রেকর্ড করা কোড পরিমার্জিত করা যেতে পারে: যাচাইকরণ যোগ করুন, Page Objects-এ নিষ্কাশন করুন এবং প্যারামিটারাইজ করুন।
বাস্তব ডিভাইসে চালানোর জন্য প্রয়োজন: ডিভাইসটিকে Mac-এর সাথে সংযুক্ত করুন, এটি Apple Developer Program-এ যোগ করুন, একটি প্রোভিজনিং প্রোফাইল কনফিগার করুন, একটি ডেভেলপমেন্ট সার্টিফিকেট দিয়ে অ্যাপ্লিকেশন সাইন করুন এবং xcodebuild-এ ডিভাইসটিকে গন্তব্য হিসেবে নির্বাচন করুন।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন