انٹیگریشن ٹیسٹنگ موبائل ایپلیکیشن کے اجزاء — ماڈیولز، سروسز، ڈیٹابیسز اور بیرونی API — کے درمیان باہمی تعامل کی درستی کی پڈتال کرتا ہے۔ یونٹ ٹیسٹس کے برخلاف، جو ہر اجزاء کو علاحدہ کرتے ہیں، انٹیگریشن ٹیسٹ جوڑوں پر غلطیاں دریافت کرتے ہیں: ڈیٹا فارمیٹ کی غیر مطابقت، پیرامیٹر ٹرانسمشن میں ناکامیاں اور سرور کے جوابات کی غلط پروسیسنگ۔ Martin Fowler, 2018 کے مطابق، انٹیگریشن ٹیسٹ یونٹ جائنچ میں چھوٹ جانے والے تقریبنا 40% تنقیدی نقائص کا احاطہ کرتے ہیں اور ریلیز سے پہلے سسٹم کے استحکام میں اعتماد فراہم کرتے ہیں۔
اہم نکات
انٹیگریشن ٹیسٹنگ سافٹویئر تصدیق کا ایک مرحلہ ہے جس میں ایپلیکیشن کے انفرادی ماڈیولز یا زیر سسٹمز کے درمیان باہمی تعامل کی درستی کا جائزہ لگایا جاتا ہے۔ جبکہ یونٹ ٹیسٹ ہر اجزاء کو علاحدہ پرکھتے ہیں، انٹیگریشن ٹیسٹ ان اجزاء کو اکٹھا کرتے ہیں اور چیک کرتے ہیں که وہ ایک ساتھ کیسے کام کرتے ہیں۔ معمولی مناظر میں نیٹورک لییر اور ریپازٹری کے درمیان ڈیٹا منتقلی، ORM کے ذریعے ڈیٹابیس میں لکھنا اور تیسرے فریق کی API سے جوابات کی پروسیسنگ شامل ہے۔
موبائل ڈیولپمنٹ کے سیاق میں، انٹیگریشن ٹیسٹ UI پرت، کاروبار لاجک اور ڈیٹا ذرائع کے درمیان باہمی تعامل کا احاطہ کرتے ہیں۔ مثل کے طور پر، ایک ٹیسٹ تصدیق کر سکتا ہے کہ “لاگ ان” بٹن دبانے کے بعد، ایپلیکیشن سرور کو درخواست بھیجتا ہے، ایک ٹوکن وصول کرتا ہے اور اسے مقامی ذخیرہ میں محفوظ کرتا ہے۔ ایسی تصدیق اس بات کی تصدیق کرتی ہے کہ اجزاء کا سلسلہ بغیر ناکامی کے کام کرتا ہے۔
World Quality Report 2023 کے مطابق، جو کمپنیاں باقاعدگی سے انٹیگریشن ٹیسٹنگ کا اطلاق کرتی ہیں، صرف یونٹ ٹیسٹس پر انحصار کرنے والے مناصب کے مقابلے میں پیداوار واقعات میں 35% تک کمی لاتی ہیں۔ یہ انٹیگریشن جائنچ کو تجارتی ڈیولپمنٹ میں کوالٹی ایشورنس حکمت عملی کا ایک لازمی عنصر بناتی ہے۔
موبائل ایپلیکیشنز بہت سے آپس میں منسلک اجزاء پر مشتمل ہیں: نیٹورک درخواستیں، مقامی ڈیٹابیسز، پش نوٹیفکیشنز، سسٹم سروسز اور تیسرے فریق کے SDK۔ ان میں سے ہر اجزاء علاحدہ پر تیار کیا جاتا ہے، لیکن ران ٹائم میں وہ حقیقی وقت میں ڈیٹا کا تبادلہ کرتے ہیں۔ انٹیگریشن ٹیسٹنگ ان نقائص کا پتا لگاتی ہے جو علاحدہ ماڈیول تصدیق کے ذریعے نہیں مل سکتے۔
انٹیگریشن ٹیسٹ کے ذریعے پائے جانے والے معمولی مسائل میں API اور ایپلیکیشن ماڈل کے درمیان ڈیٹا ٹائپ کی غیر مطابقت، JSON سیریالائزیشن کی غلطیاں، نیٹورک ٹائم آؤٹ کی غلط هینڈلنگ، اور Room یا Core Data کے ذریعے باہم وقت ڈیٹابیس رسائی کے دوران ناکامیاں شامل ہیں۔ انٹیگریشن جائنچ کے بغیر، ایسے نقائص پیداوار تک پہنچ جاتے ہیں اور صرف حقیقی صارفین پر ہی ظاہر ہوتے ہیں۔
Google Testing Blog (2021) کی تحقیق ظاہر کرتی ہے کہ انٹیگریشن ٹیسٹنگ کے دوران پائے گئے نقیصے کی مرممت کی لاگت ریلیز کے بعد کے مقابلے میں 5 گنا کم ہے۔ ایسا اس لیے ہے کیونکہ ابتدائی مراحل میں ڈیولپر کے پاس غلطی کا مکمل سیاق ہہتا ہے اور وہ بغیر کسی فوری hotfix سائکل کے اسے ٹھیک کر سکتا ہے۔ انٹیگریشن ٹیسٹ لکھنے میں وقت لگانا دیکھ بھال کے اخراجات میں کمی اور صارفین کے اعتماد میں اضافے کے ذریعے منافع دیتا ہے۔
انٹیگریشن ٹیسٹ کے انظام کے تین بنیادی نظریات ہیں: Big Bang، Bottom-Up اور Top-Down۔ حکمت عملی کا انتخاب منصوبے کے حجم، ایپلیکیشن آرکیٹیکچر اور ٹیسٹ لکھنے کے وقت اجزاء کی دستیابی پر منحصر کرتا ہے۔ ہر نظریے کے اپنے فوائد اور حدود ہیں جین پر ٹیسٹ کوریج کی منصوبہ بناتے وقت غور کیا جانا چاہیے۔
Big Bang — ایک نظریہ جس میں سسٹم کے تمام اجزاء باک ایک ساتھ منسلک کیے جاتے ہیں، اس کے بعد ایک عام ٹیسٹ ران کیا جاتا ہے۔ یہ طریقہ نفاذ میں سادہ ہے: stubs لکھنے یا انفرادی ماڈیولز کی نقل کرنے کی ضرورت نہیں ہے۔ تاہم، جب کوئی غلطی پائی جاتی ہے، تو یہ طے کرنا مشکل ہوتا ہے کہ کس اجزاء نے اسے پیدا کیا۔ Big Bang آسان آرکیٹیکچر والے چھوٹے مناصبوں میں جائز ہے جہاں ماڈیولز کی تعداد پانچ سے زیادہ نہیں ہیں۔
Bottom-Up — ایک حکمت عملی جس میں انٹیگریشن ٹیسٹنگ نیچے کے اجزاء سے شروع ہوتی ہے: ڈیٹابیس، نیٹورک پرت، سسٹم سروسز۔ ہر سطح کی تصدیق کے بعد، ٹیسٹ آہستہ آہرستہ اوپر کے ماڈیولز کو منسلک کرتے ہیں — ریپازیٹریز، Use Case کلاسز اور ViewModels۔ بنیادی فائدہ ایپلیکیشن کی بنیادی پرتوں میں نقائص کی جلد پھنچ ہے، جو ڈیولپمنٹ کے بعد کے مراحل میں سلسلہmوار غلطیوں کے خطرے کو کم کرتا ہے۔
Top-Down — ایک نظریہ جس میں ٹیسٹنگ اوپر کے اجزاء سے شروع ہوتی ہے — UI سکرینز اور نیویگیشن، جبکہ نیچے کے ماڈیولز کو stubs یا mocks استعمال کر کے سمولیٹ کیا جاتا ہے۔ یہ سرور سائیڈ یا ڈیٹابیس کے مکمل نفاذ سے پہلے صارف کے مناظر کی جائنچ کی اجازت دیتا ہے۔ Top-Down خاص طور پر کلائنٹ اور سرور حصوں کے متوازی ڈیولپمنٹ کے دوران مفید ہے جب بیک اینڈ ابھی حقیقی انضمام کے لیے تیار نہیں ہوتا۔
موبائل ایپلیکیشنز کے انٹیگریشن ٹیسٹنگ کے لیے، ماہر اوزاروں کی ایک رینج استعمال کی جاتی ہے، جو تین زمرے میں تقسیم ہیں: سرور نقل کی لائبریریز، ڈیٹابیس کے لیے فریم ورکز، اور سسٹم سروس تصدیق کے اوزار۔ مخصوص اوزار کا انتخاب پلیٹ فارم — Android یا iOS — اور منصوبے کے ٹیکنولاجی سٹیک پر منحصر کرتا ہے۔
آئیے Android اور iOS کے لیے انٹیگریشن ٹیسٹ کی عملی مثالیں دیکھیں۔ Android پلیٹ فارم کے لیے، ہم JUnit کے ساتھ MockWebServer استعمال کرتے ہیں، iOS کے لیے — OHHTTPStubs لائبریری کے ساتھ XCTest۔ دونوں مثالیں API سے ڈیٹا وصول کرنے اور اسے مقامی ریپازیٹری میں محفوظ کرنے کے منظر کی تصدیق کرتی ہیں۔
یہ ٹیسٹ تصدیق کرتا ہے کہ نقل شدہ سرور کو ایک Retrofit درخواست صحیح JSON واپس کرتی ہے، اور ریپازیٹری جواب کو ڈومین ماڈل میں تبدیل کرتی ہے۔ MockWebServer درخواست کو روکتا ہے اور متعین JSON واپس کرتا ہے، اس کے بعد ٹیسٹ متوقع نتیجے کا حقیقی سے موازنہ کرتا ہے۔
class UserRepositoryTest {
private val mockServer = MockWebServer()
@Before
fun setup() {
mockServer.start()
}
@Test
fun fetchUser_returnsCorrectData() {
val json = "{ \`"id\`": 1, \`"name\`": \`"Alice\`" }"
mockServer.enqueue(MockResponse()
.setBody(json)
.setResponseCode(200))
val repository = UserRepository(
createRetrofit(mockServer.url("/").toString()))
val user = repository.fetchUser(1)
assertEquals(1, user.id)
assertEquals("Alice", user.name)
}
@After
fun tearDown() {
mockServer.shutdown()
}
}
iOS کے لیے، ایک مماثل ٹیسٹ URL درخواستوں کو روکنے کے لیے OHHTTPStubs استعمال کرتا ہے۔ یہ لائبریری URL Loading System کے سسٹم فریم ورک کی سطح پر سرور کے جواب کو بدل دیتی ہے، جو کسی بھی نیٹورکنگ لائبریری — URLSession، Alamofire یا Moya — کی جائنچ کی اجازت دیتی ہے۔
import XCTest
import OHHTTPStubs
import OHHTTPStubsSwift
class UserRepositoryTests: XCTestCase {
func testFetchUser_returnsCorrectData() {
stub(condition: isPath("/users/1")) { _ in
return HTTPStubsResponse(
jsonObject: ["id": 1, "name": "Alice"],
statusCode: 200,
headers: nil
)
}
let repository = UserRepository()
let expectation = expectation(description: "fetch user")
repository.fetchUser(id: 1) { user in
XCTAssertEqual(user.id, 1)
XCTAssertEqual(user.name, "Alice")
expectation.fulfill()
}
waitForExpectations(timeout: 2.0)
}
}
مؤثر انٹیگریشن ٹیسٹنگ کے لیے ایک مجموعہ طریقوں پر عمل کرنا ضروری ہے جو ٹیسٹ استحکام میں اضافہ کرتے ہیں اور دیکھ بھال کے اخراجات میں کمی کرتے ہیں۔ باہری انحصارات کو علاحدہ کریں: پیداوار انسٹنسز کے بجاء میمری ڈیٹابیسز استعمال کریں اور stub لائبریریز کا استعمال کرکے تیسرے فریق کی API کی نقل کریں۔ یہ نیٹورک دستیابی یا باہری سروسز کی حالت کے کارن غیر یقینی ناکامیوں کو ختم کرتا ہے۔
ٹیسٹوں کی آزادگی برقرار رکھیں: ہر انٹیگریشن ٹیسٹ کو دیگر ٹیسٹوں کے نتائج پر انحصار کیے بغیر علاحدہ کام کرنا چاہیے۔ ٹیسٹ ماحول کو تیار اور صاف کرنے کے لیے JUnit میں @Before اور @After اینوٹیشنز یا XCTest میں setUp اور tearDown استعمال کریں۔ یہ ٹیسٹوں کے باہمی اثر کو روکتا ہے اور غلطی کی تشخیص کو آسان بناتا ہے۔
حدودی معاملات کا احاطہ کریں: انٹیگریشن ٹیسٹوں کو نہ صرف کامیاب مناظر (happy path) بلکہ غلطی کی ہینڈلنگ — ٹائم آؤٹ، HTTP 4xx اور 5xx کوڈز، خالی جوابات، ناقص JSON کی بھی تصدیق کرنی چاہیے۔ Google Testing Blog (2022) کے مطابق، 60% پیداوار واقعات کا تعلق حدودی معاملات کی غلط ہینڈلنگ سے ہے جو ٹیسٹ سے چھپ گئے تھے۔
اکثر پوچے جانے والے سوالات
یونٹ ٹیسٹ ایک کلاس یا فنکشن کو علاحدہ جانچتے ہیں، انحصارات کو stubs سے بدل کرکے۔ انٹیگریشن ٹیسٹ بہت سے حقیقی اجزاء کے درمیان باہمی تعامل کی تصدیق کرتے ہیں — مثل کے طور پر، ایک نیٹورک کنیکشن اور ایک ڈیٹابیس باک ایک ساتھ۔
انٹیگریشن ٹیسٹ چلانے میں عمومن ٹیسٹ کی تعداد اور ماحول کی پیچیدگی کے مطابق 2 سے 15 منٹ لگتا ہے۔ بڑے مناصبوں کے لیے، مرج سے پہلے کل تصدیق کا وقت کم کرنے کے لیے ٹیسٹوں کو CI سسٹم میں متوازی کاموں میں تقسیم کرنے کی سفارش کی جاتی ہے۔
سب سے پہلے، انٹیگریشن ٹیسٹ نیٹورک پرت، ڈیٹابیس اور سسٹم سروسز — نوٹیفکیشنز، کیمرا، جیو لوکیشن کے لیے لکھے جاتے ہیں۔ بیک اینڈ کو API درخواستیں اور مقامی ذخیرہ کے آپریشن سب سے زیادہ ROI فراہم کرتے ہیں کیونکہ یہ اجزاء اکثر ری گریشن کا ذریعہ بنتے ہیں۔
ایک سکرین کے لیے، ViewModel کے یونٹ ٹیسٹ اور UI ٹیسٹ کافی ہیں۔ ایک سکرین کے لیے انٹیگریشن ٹیسٹ صرف اس وقت جائز ہیں جب سکرین بہت سے ڈیٹا ذرائع کے ساتھ باہمی تعامل کرتی ہے — مثل کے طور پر، دو مختلف API کے جوابات کو مضمون کرتی ہے یا ایک ساتھ نیٹورک اور مقامی ڈیٹابیس میں ڈیٹا لکھتی ہے۔
انٹیگریشن ٹیسٹ ہر pull request پر CI پائپ لائن میں اور اهم ریلیز سے پہلے چلائے جانے چاہیے۔ رات کو (nightly build) انٹیگریشن ٹیسٹوں کا مکمل سیٹ چلانے کی بھی سفارش کی جاتی ہے تاکہ انحصارات یا ٹیسٹ ماحول میں تبدیلیوں سے متعلق نقائص کا پتا لگایا جا سکے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں