اختبارات واجهة المستخدم في Xcode مع أمباسي وعصاري

مرحبا بالجميع!

حداثة أخرى في قائمة دوراتنا: "iOS Developer" ، مما يعني أن الوقت قد حان للقطع المثيرة للاهتمام التي وجدناها أثناء إعداد الدورة. في هذه المقالة ، يحلل المؤلف كيفية تسجيل وتشغيل طلبات واجهة برمجة التطبيقات لاختبارات واجهة المستخدم.



دعنا نذهب.

لقد قمت مؤخرًا بدمج أمباسي وعصاري في اختبارات واجهة المستخدم الخاصة بي. إذا كنت بحاجة إلى تشغيل اختبارات واجهة المستخدم لتطبيق يستخدم واجهات برمجة التطبيقات هذه ، فقد يقدم هذا الدليل بديلاً للسخرية / كعب الروتين.

المشاكل:

  • يستخدم التطبيق بيانات API لملء واجهة المستخدم ؛
  • قد يتطلب استخدام بذرة كتابة وصيانة عدد كبير من الملفات ؛
  • عند استخدام النماذج ، قد يختلف منطق التطبيق عن مكالمة الشبكة الفعلية ؛
  • باستخدام واجهة برمجة التطبيقات للاتصال - تم استبعادها تمامًا ، العديد من المتغيرات والأعطال


أمباسي + حل عصاري

الحل هو إنشاء خادم محلي يتم توجيه تطبيقك إليه (باستخدام أمباسي) ، وتسجيل / الرد على مكالمات الشبكة (باستخدام Succulent).

في المرة الأولى التي تقوم فيها بإجراء الاختبار ، سيتم إجراء مكالمات شبكة قياسية وكتابتها إلى ملف التتبع.

في المرة القادمة ، سيتم الرد على مكالمات الشبكة نفسها تلقائيًا. رائع ، أليس كذلك؟ لا حاجة لكتابة صور وهمية ، يمكنك محاكاة التأخيرات والأخطاء ، وكل هذا يجري داخل آلة البناء ، داخل XCtest!

كيفية استخدامه؟

1. تنزيل وتثبيت تحت عصاري. في وقت كتابة هذه السطور ، لم يكن هناك جراب على cocoapods.com ، لذلك تحتاج إلى تنزيل المصدر وإضافته إلى ملفك الفرعي على النحو التالي:

target “UI Tests” do inherit! :search_paths pod 'Succulent', :path => 'Succulent/' end 

مطلوب السفارة النضرة وسيتم تثبيته تلقائيًا.

2. إنشاء ملف واجهة مستخدم اختبار جديد ونسخ التعليمات من Suitulent GitHub . نتيجة لذلك ، يجب أن تحصل على هذا الملف:

 import Succulent @testable import TestAppUITests class SucculentTestUITest: XCTestCase { private var succulent: Succulent! var session: URLSession! var baseURL: URL! /// The name of the trace file for the current test private var traceName: String { return self.description.trimmingCharacters(in: CharacterSet(charactersIn: "-[] ")).replacingOccurrences(of: " ", with: "_") } /// The URL to the trace file for the current test when running tests private var traceUrl: URL? { let bundle = Bundle(for: type(of: self)) return bundle.url(forResource: self.traceName, withExtension: "trace", subdirectory: "Traces") } /// The URL to the trace file for the current test when recording private var recordUrl: URL { let bundle = Bundle(for: type(of: self)) let recordPath = bundle.infoDictionary!["TraceRecordPath"] as! String return URL(fileURLWithPath: "\(recordPath)/\(self.traceName).trace") } override func setUp() { super.setUp() continueAfterFailure = false if let traceUrl = self.traceUrl { // Replay using an existing trace file succulent = Succulent(traceUrl: traceUrl) } else { // Record to a new trace file succulent = Succulent(recordUrl: self.recordUrl, baseUrl: URL(string: "https//base-url-to-record.com/")!) } succulent.start() let app = XCUIApplication() app.launchEnvironment["succulentBaseURL"] = "http://localhost:\(succulent.actualPort)/" app.launch() } override func tearDown() { super.tearDown() } } 

عند بدء تشغيل Succulent ، يمكنك تحديد عنوان URL الأساسي ، والذي بفضله سيتم تسجيل جميع الطلبات بما في ذلك عنوان URL الأساسي ، وسيتم تجاهل جميع الطلبات الأخرى.

3. أضف السطر التالي إلى هدف Info.plist لواجهة مستخدم الاختبار:

 <key>TraceRecordPath</key> <string>$(PROJECT_DIR)/Succulent/Traces</string> 

4. توجيه التطبيق إلى الخادم المحلي.

للقيام بذلك داخل التطبيق الرئيسي الخاص بك ، تحتاج إلى التحقق من وجود متغير البيئة "succulentBaseURL" وإذا تم تكوينه.

يعرض عنوان url لخادم الويب المحلي الخاص بك ويتم تكوينه في وظيفة الإعداد ، والتي تم نسخها أعلاه في الخطوة 2.

 #if DEBUG if let localServerUrl = ProcessInfo.processInfo.environment[“succulentBaseURL”] { return URL(string: localServerUrl)! } #endif 

هذا كل شيء ، ربما!

الآن عندما تجري اختبارًا بسيطًا وتقوم بتشغيله ، سوف يكتب Succulent طلب واجهة برمجة التطبيقات وينشئ ملف .trace في المجلد Traces من الدليل الهدف لاختبار واجهة المستخدم الخاص بك. في المرة التالية التي تقوم فيها بإجراء نفس الاختبار ، سيتم التحقق من وجود الملف وتشغيله.

يمكنك فتح ملفات .trace مباشرة من Xcode ، ومشاهدة جميع طلبات الشبكة وتعديلها حسب الحاجة.

آمل أن تكون المقالة مفيدة ، إليك البيتزا:



النهاية

كالعادة ، نحن في انتظار التعليقات والأسئلة وما إلى ذلك هنا أو يمكنك إلقاء نظرة على اليوم المفتوح وطرح سؤال على المعلم هناك.

Source: https://habr.com/ru/post/ar412955/


All Articles