Screenshot Test ایپلیکیشن اسکرینوں کے اسکرین شاٹس کو کیپچر کرکے اور حوالہ تصاویر سے موازنہ کرکے صارف انٹرفیس کی ایک خودکار جانچ ہے۔ گولڈن ٹیسٹ کے برعکس، اسکرین شاٹ ٹیسٹ حقیقی آلات یا ایمولیٹر پر انجام دیے جاتے ہیں، نیویگیشن، سسٹم عناصر اور اینی میشن کے ساتھ مکمل اسکرینوں کو کیپچر کرتے ہیں، اور ایپلیکیشن کے ساتھ تعامل کے لیے UI Automator (Android) یا XCUITest (iOS) استعمال کرتے ہیں۔ مزید تفصیلات Android UI Automator دستاویزات میں۔
اہم نکات
Screenshot Test ایک اینڈ ٹو اینڈ یوزر انٹرفیس ٹیسٹ ہے جہاں ٹیسٹ ایپلیکیشن اسکرین کھولتا ہے، اعمال انجام دیتا ہے (ٹیپ، ٹیکسٹ ان پٹ، اسکرول) اور نتیجے کی حالت کا اسکرین شاٹ لیتا ہے۔ اسکرین شاٹ کا موازنہ ریپوزٹری میں محفوظ بیس لائن سے کیا جاتا ہے۔ اگر اسکرین شاٹس مختلف ہوں — ٹیسٹ ناکام ہو جاتا ہے۔ اسکرین شاٹ ٹیسٹ بصری رجعت کا پتہ لگاتے ہیں جو یونٹ ٹیسٹ نہیں دیکھ سکتے: غلط مارجن، اوورلیپنگ عناصر، غلط رنگ۔
گولڈن ٹیسٹ ہونے کے باوجود اسکرین شاٹ ٹیسٹ کی ضرورت کیوں؟ — گولڈن ٹیسٹ اجزاء کو الگ تھلگ جانچتے ہیں: ایک بٹن، ایک کارڈ، ایک متن۔ اسکرین شاٹ ٹیسٹ پروڈکشن کے جتنا ممکن ہو سکے قریب ماحول میں پوری اسکرین کو جانچتے ہیں: حقیقی نیویگیشن، حقیقی ڈیٹا (یا زیادہ سے زیادہ حقیقت پسندانہ موک)، حقیقی سسٹم فونٹ، حقیقی اسٹیٹس بار۔ صرف ایک اسکرین شاٹ ٹیسٹ دکھائے گا کہ ایک بٹن حقیقی ڈیوائس پر کسی دوسرے عنصر سے اوورلیپ ہو رہا ہے۔
کاروباری اہمیت — Google (2023) کے مطابق، بصری بگز تمام موبائل ایپلیکیشن بگز کا 15-25% بنتے ہیں۔ اسکرین شاٹ ٹیسٹ بصری معیار کی جانچ کو خودکار کرتے ہیں جو پہلے QA انجینئرز کے ذریعے دستی طور پر کی جاتی تھی۔ ایک اسکرین شاٹ ٹیسٹ ایک اسکرین کے 5-10 منٹ کے دستی ٹیسٹنگ کی جگہ لیتا ہے۔ 50 اسکرینوں والی ایپلیکیشن کے لیے، بچت: 4-8 اہلکار گھنٹے فی رجریشن رن۔ اسکرین شاٹ ٹیسٹ 2-3 ریلیز سائیکل میں اپنی لاگت پوری کر لیتے ہیں۔
گولڈن ٹیسٹ تیز اور آسان ہیں: آف اسکرین بفر میں ایک جزو کو رینڈر کرنے میں ملی سیکنڈ لگتے ہیں، ڈیوائس کی ضرورت نہیں ہوتی، اور CI پر مستحکم ہوتے ہیں۔ اسکرین شاٹ ٹیسٹ زیادہ حقیقت پسندانہ ہوتے ہیں: وہ سسٹم عناصر کے ساتھ حقیقی اسکرین کیپچر کرتے ہیں، اینی میشن اور نیویگیشن کو سپورٹ کرتے ہیں، اور حقیقی آلات پر کام کرتے ہیں۔ انتخاب مقصد پر منحصر ہے: ڈیولپر کے لیے فوری فیڈ بیک (گولڈن) یا ریلیز سے پہلے زیادہ سے زیادہ حقیقت پسندی (اسکرین شاٹ)۔
| خصوصیت | Screenshot Test | Golden Test |
|---|---|---|
| رفتار | 2-30 سیکنڈ | 50-200 ms |
| حقیقت پسندی | زیادہ سے زیادہ (حقیقی ڈیوائس) | محدود (آف اسکرین) |
| ڈیوائس درکار | ہاں (ایمولیٹر/فزیکل) | نہیں (JVM، XCTest) |
| اینیمیشن | سپورٹ کرتا ہے | سپورٹ نہیں کرتا |
| نیویگیشن | ملٹی سٹیپ منظرنامے | واحد جزو |
| عدم استحکام | زیادہ (نیٹ ورک، ٹائمنگ) | درمیانہ (GPU، فونٹ) |
| متوازیت | Device Farm (Firebase، AWS) | ملٹی تھریڈڈ JVM/XCTest |
Golden + Screenshot — اجزاء کی لائبریری (Design System) میں ہر UI جزو کے لیے گولڈن ٹیسٹ استعمال کریں۔ 80% بصری رجعت جزو کی سطح پر پکڑی جاتی ہے۔ اسکرین شاٹ ٹیسٹ — اہم صارف راستوں کے لیے: آن بورڈنگ، لاگ ان، ادائیگی کا بہاؤ، شاپنگ کارٹ۔ حقیقی اسکرین پر جزو انضمام سے متعلق 20% رجعت صرف اسکرین شاٹ ٹیسٹ سے پکڑی جاتی ہے۔ IT Sectr میں ہم 80/20 تناسب استعمال کرتے ہیں: 400 گولڈن + 100 اسکرین شاٹ۔
اسکرین شاٹ ٹیسٹ کب ضروری نہیں — اگر اسکرین تعامل کے بغیر جامد مواد پر مشتمل ہو، تو گولڈن جزو ٹیسٹ کم قیمت پر تصدیق کی ایک جیسی سطح فراہم کرتا ہے۔ اگر اسکرین متحرک طور پر تبدیل ہوتی ہے (فیڈ، چیٹ)، تو اسکرین شاٹ ٹیسٹ کو پیچیدہ ڈیٹا سیٹ اپ اور انتظار کے اوقات درکار ہوتے ہیں۔ ایسی صورتوں میں، بیس لائن حالت (خالی فہرست، لوڈنگ) کے لیے اسکرین شاٹ اور فہرست میں انفرادی کارڈز کے لیے گولڈن استعمال کریں۔
UI Automator کراس ایپلیکیشن UI ٹیسٹنگ کے لیے Android فریم ورک ہے۔ یہ UiDevice.takeScreenshot() کے ذریعے اسکرین شاٹس لینے کی اجازت دیتا ہے۔ Espresso (ایک ایپلیکیشن کے اندر کام کرتا ہے) کے برعکس، UI Automator سسٹم ڈائیلاگ (اجازتیں، اطلاعات) اور دیگر ایپلیکیشنز کے ساتھ تعامل کر سکتا ہے۔ UI Automator پر اسکرین شاٹ ٹیسٹ: ایپ کھولیں، لوڈ ہونے کا انتظار کریں، اسکرین شاٹ لیں، بیس لائن سے موازنہ کریں۔
class LoginScreenScreenshotTest {
@get:Rule
val rule = ComposeTestRule.createAndroidComposeRule<MainActivity>()
@Test
fun login_screen_default() {
val device = UiDevice.getInstance(
InstrumentationRegistry.getInstrumentation()
)
// اسکرین کی لوڈنگ کا انتظار کریں
IdlingRegistry.getInstance().waitForIdle()
// اسکرین شاٹ لیں
val screenshot = device.takeScreenshot()
val golden = loadGolden("login_default.png")
// حوالہ سے موازنہ کریں
val diff = ImageComparator.compare(screenshot, golden)
assertTrue(diff.similarity > 0.98)
}
}
Firebase Test Lab سینکڑوں حقیقی آلات پر متوازی طور پر انسٹرومینٹڈ ٹیسٹ چلانے کے لیے Google Cloud سروس ہے۔ Firebase Test Lab پر اسکرین شاٹ ٹیسٹ مختلف آلات (Pixel 7، Galaxy S24، Xiaomi 14) پر اسکرین شاٹس کیپچر کرتے ہیں اور بیس لائنز سے موازنہ کرتے ہیں۔ فائدہ: ایک ٹیسٹ 20 آلات پر 10-15 منٹ میں UI چیک کرتا ہے۔ نقصان: قیمت ($1-5 فی ٹیسٹ 20 آلات پر)۔ Firebase Test Lab gcloud CLI یا Gradle پلگ ان کے ذریعے CI سے مربوط ہوتا ہے۔
Shot Android پر اسکرین شاٹ ٹیسٹنگ کے لیے ایک لائبریری ہے جو اسکرین شاٹس بنانے اور موازنہ کرنے کو آسان بناتی ہے۔ Shot Espresso اور UI Automator کے اوپر کام کرتا ہے، گولڈن مینجمنٹ (بنانا، اپ ڈیٹ کرنا، حذف کرنا)، حد کے ساتھ موازنہ (پکسلز یا فیصد) اور HTML رپورٹ جنریشن شامل کرتا ہے۔ Shot ان منصوبوں کے لیے موزوں ہے جو اپنا تصویری موازنہ کا انفراسٹرکچر لکھے بغیر فوری طور پر اسکرین شاٹ ٹیسٹنگ نافذ کرنا چاہتے ہیں۔
XCUITest iOS، iPadOS اور tvOS ایپلیکیشنز کے UI ٹیسٹنگ کے لیے Apple کا فریم ورک ہے۔ XCUITest پر اسکرین شاٹ ٹیسٹ اسکرین کیپچر کے لیے XCUIScreen.main.screenshot() اور اسکرین شاٹس محفوظ کرنے کے لیے XCAttachment استعمال کرتے ہیں۔ XCUITest صارف کے اعمال کی نقل کرتا ہے: ٹیپ، سوائپ، typeText، اور ہر مرحلے کے بعد اسکرین شاٹس لیتا ہے۔ Xcode 16+ میں، XCTAttachment کے ذریعے بیس لائنز کے ساتھ اسکرین شاٹ موازنہ کے لیے بلٹ ان سپورٹ شامل کیا گیا ہے۔
final class LoginScreenScreenshotTests: XCTestCase {
var app: XCUIApplication!
override func setUp() {
super.setUp()
app = XCUIApplication()
app.launch()
}
func test_login_initial_state() {
let loginButton = app.buttons["login_button"]
XCTAssertTrue(loginButton.exists)
// اسکرین شاٹ لیں
let screenshot = app.screenshot()
let attachment = XCTAttachment(screenshot: screenshot)
attachment.name = "Login-Screen-Initial"
attachment.lifetime = .keepAlways
add(attachment)
// حوالہ سے موازنہ (XCTAttachment + golden درکار ہے)
assertScreenshot(
screenshot: screenshot,
goldenName: "login_initial_state"
)
}
}
Xcode Cloud iOS ایپلیکیشنز بنانے اور جانچنے کے لیے Apple کا کلاؤڈ CI ہے۔ Xcode Cloud سمیلیٹر پر XCUITest ٹیسٹ چلانے کی حمایت کرتا ہے۔ اسکرین شاٹ ٹیسٹ ایک سے زیادہ سمیلیٹر پر متوازی طور پر چلائے جا سکتے ہیں (iPhone 15، iPhone 15 Pro Max، iPad Pro)۔ نتائج: منسلکات کے ساتھ XCResult Bundle۔ Xcode Cloud GitHub/GitLab میں بلٹ ان نہیں ہے — انضمام کے لیے Xcode Cloud Webhooks استعمال کریں۔ متبادل: macos-14 اور xcodebuild کے ساتھ GitHub Actions۔
موازنہ فریم ورک — iOSSnapshotTestCase (Uber) سمیلیٹر پر چلانے پر اسکرین شاٹ ٹیسٹ کے لیے بھی کام کرتا ہے۔ SwiftSnapshotTesting (pointfree) اجزاء کے گولڈن ٹیسٹ کے لیے زیادہ موزوں ہے۔ iOS پر اسکرین شاٹ ٹیسٹ کے لیے، بلٹ ان XCUITest ٹولز + XCTAttachment + کسٹم ImageComparator (Pixelmator یا AImage) استعمال کریں۔ CI پر سمیلیٹر استعمال کریں — حقیقی آلات پر اسکرین شاٹ ٹیسٹ صرف Device Farm (AWS Device Farm) کے ذریعے کام کرتے ہیں۔
بیس لائن مینجمنٹ — بیس لائن اسکرین شاٹس ریپوزٹری (Git LFS) یا S3 میں محفوظ کیے جاتے ہیں۔ ہر اسکرین شاٹ کو ٹیمپلیٹ کے مطابق نام دیا جاتا ہے: {testName}_{device}_{orientation}_{locale}.png۔ مثال: loginScreenPixel7PortraitRu.png۔ نیا ڈیوائس یا لوکیل شامل کرتے وقت، ایک نئی بیس لائن بنائی جاتی ہے۔ UI تبدیل کرتے وقت، کوڈ ریویو کے بعد پرانی بیس لائنز نئی سے تبدیل کر دی جاتی ہیں۔ بیس لائن کوڈ بیس کا حصہ ہے، ٹیسٹ سورسز کی طرح۔
CI پائپ لائن — (1) ایپلیکیشن بنائیں۔ (2) ایمولیٹر/سمیلیٹر پر اسکرین شاٹ ٹیسٹ چلائیں۔ (3) اسکرین شاٹس کا بیس لائنز سے موازنہ کریں۔ (4) عدم مطابقت پر — diff تصویر بنائیں۔ (5) diff آرٹیفیکٹس اپ لوڈ کریں (actual، expected، diff — تین فائلیں)۔ (6) نتائج کے جدول کے ساتھ HTML رپورٹ شائع کریں۔ (7) اگر حد سے تجاوز ہو جائے — ٹیسٹ ناکام ہو جاتا ہے۔ (8) جائزہ لینے والا diff آرٹیفیکٹس کا جائزہ لیتا ہے اور فیصلہ کرتا ہے: منظوری (بیس لائن اپ ڈیٹ کریں) یا مسترد (کوڈ ٹھیک کریں)۔
حد اور رواداری — پکسل بہ پکسل مطلق موازنہ بہت سخت ہے۔ SSIM (سٹرکچرل سیمیلیرٹی انڈیکس) یا MSE (مین اسکوائرڈ ایرر) استعمال کریں۔ SSIM 0.98 = 98% ساختی مماثلت — ایک اچھی حد۔ مختلف اسکرینوں کو مختلف حدود کی ضرورت ہو سکتی ہے: ڈارک تھیم (زیادہ سیاہ — زیادہ درستگی)، گریڈینٹ (زیادہ شور — کم درستگی)۔ پیرامیٹر کے ذریعے فی ٹیسٹ حد ترتیب دیں: @ScreenshotTest(threshold = 0.99)۔
Device Farm بمقابلہ سمیلیٹر — حقیقی آلات پر ٹیسٹ (Firebase Test Lab، AWS Device Farm) زیادہ سے زیادہ حقیقت پسندی فراہم کرتے ہیں لیکن سست اور ادائیگی کے ساتھ ہیں۔ سمیلیٹر/ایمولیٹر پر ٹیسٹ تیز اور مفت ہیں لیکن حقیقی ڈیوائس کی خصوصیات (مختلف GPU، ڈسپلے رنگ کی تولید، پکسل کثافت) نہیں دکھاتے۔ حکمت عملی: پری مرج چیک کے لیے سمیلیٹر (5 منٹ)، رات بھر کے لیے Device Farm (30 منٹ، 20 ڈیوائس)۔ IT Sectr میں ہم ٹاپ 10 Android آلات پر رات بھر کے رنز کے لیے Firebase Test Lab استعمال کرتے ہیں۔
اکثر پوچھے گئے سوالات
Golden Test — ہر کمٹ پر انفرادی UI اجزاء کی فوری تصدیق کے لیے (50-200 ms)۔ Screenshot Test — ریلیز سے پہلے حقیقی آلات پر پوری اسکرینوں کی E2E تصدیق کے لیے (2-30 سیکنڈ)۔ دونوں استعمال کریں: Design System اجزاء کے لیے گولڈن، اہم صارف راستوں کے لیے اسکرین شاٹ۔ زیادہ تر منصوبوں کے لیے 80/20 تناسب بہترین ہے۔
SSIM 0.98 زیادہ تر اسکرینوں کے لیے ایک اچھی ابتدائی حد ہے۔ ڈارک تھیم کے لیے، آپ 0.99 استعمال کر سکتے ہیں (زیادہ کنٹراسٹ — زیادہ درست موازنہ)۔ گریڈینٹ اور تصاویر والی اسکرینوں کے لیے — 0.95-0.97۔ پکسل بہ پکسل مطلق موازنہ (MSE = 0) استعمال نہ کریں — یہ اینٹی ایلیاسنگ اور GPU فرق کی وجہ سے 20-30% غلط مثبت نتائج دیتا ہے۔ ہر ٹیسٹ کے لیے انفرادی طور پر حد ترتیب دیں۔
ہر جان بوجھ کر UI تبدیلی کے ساتھ — رنگوں، فونٹس، مارجن، آئیکنز، عناصر کو شامل کرنے/ہٹانے میں تبدیلی۔ جب ماحول تبدیل ہو (OS ورژن، CI پر فونٹس) تو بیس لائنز اپ ڈیٹ نہ کریں — یہ ایک غیر مستحکم ٹیسٹ کی علامت ہے۔ بیس لائنز کوڈ ریویو کے بعد صرف ڈیولپر کے ذریعے مقامی طور پر اپ ڈیٹ کیا جاتا ہے: پرانی بیس لائنز حذف کریں، record=true کے ساتھ ٹیسٹ چلائیں، نئے اسکرین شاٹس چیک کریں، کمٹ کریں۔
ہاں — Android پر Espresso اور iOS پر XCUITest کے ذریعے۔ Espresso ایپلیکیشن کے عمل کے اندر کام کرتا ہے اور اسے Accessibility Service (UI Automator کی طرح) کی ضرورت نہیں ہوتی۔ XCUITest UI ٹیسٹ کے لیے Apple کا معیاری فریم ورک ہے۔ اسکرین شاٹ ٹیسٹ کے لیے فرق کم سے کم ہے: XCUITest تھوڑا زیادہ مستحکم ہے (اصلی Apple API)، UI Automator تھوڑا زیادہ لچکدار ہے (انٹر پروسیس تعامل)۔
اگر صحیح طریقے سے ترتیب دیے گئے ہوں — نہیں۔ پری مرج: صرف تبدیل شدہ اسکرینوں پر اسکرین شاٹ ٹیسٹ چلائیں (30-60 سیکنڈ)۔ رات بھر: Device Farm پر مکمل رن (30 منٹ، 20 ڈیوائس)۔ ایمولیٹر پر اسکرین شاٹ ٹیسٹ پر عملدرآمد کا وقت: 2-10 سیکنڈ فی اسکرین۔ 20 اسکرینیں = 40-200 سیکنڈ۔ یہ ایک اسکرین کے دستی ٹیسٹنگ وقت (5-10 منٹ) سے کم ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں