قم بإعداد التشغيل التلقائي لاختبارات واجهة المستخدم لتطبيقات Android من خلال TeamCity

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

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

عند المدخل لدينا:

  • يتم تشغيل الاختبار (الاختبارات) بنجاح محليًا
  • تشغيل خادم TeamCity
  • الخادم على دبيان مع KVM و X

إخلاء المسؤولية فورًا عن الخادم الذي سيتم فيه الإطلاق: لا يعد إعداد نظام التشغيل ، والظاهرية المادية للأجهزة ، والرسومات الرسومية موضوع هذه المقالة وسيتم حذفها.

قم بتثبيت وتكوين وكيل TeamCity


لنبدأ بـ Java. الشيء الرئيسي هنا هو اختيار الإصدار الصحيح. كان لدي 3 تبعيات: الاختبارات بأنفسهم ، وأدوات Android ، ووكيل teamcity. توقفت عند الإصدار 8 لاستخدام JVM واحد للجميع. إذا كنت محظوظًا أقل وستكون هناك تعارضات ، فسيتعين عليك تكوين استخدام العديد من إصدارات Java على نفس الجهاز. ملاحظة أخرى: إذا كان لديك ديبيان ، فأنت بحاجة أولاً إلى إضافة مستودع webupd8team (google سريع جدًا).

sudo apt-get install oracle-java8-installer sudo apt-get install oracle-java8-set-default 

بعد ذلك ، قم بإنشاء مستخدم سيتم بموجبه تشغيل الوكيل ، وبالتالي ، كل شيء آخر. لا تنس تعيين كلمة مرور.

 sudo useradd -d /home/tc_agent -s /bin/bash -m tc_agent sudo passwd tc_agent 

يمكن أخذ توزيع الوكيل في واجهة الويب الخاصة بمدينتك. للقيام بذلك ، انتقل إلى قسم وكلاء وانقر على رابط تثبيت عوامل البناء في الجزء العلوي الأيمن. قم بتنزيل الملف المطلوب وفك ضغطه على الخادم (أوصي بالمجلد الرئيسي للمستخدم - /home/tc_agent ). بعد ذلك ، أضف حقوق تشغيل جميع البرامج النصية:

 sudo chmod +x /home/tc_agent/BuildAgent/bin/* 

إذا كانت نسختك من teamcity تدعم Agent Push ، فلا يزال الأمر أسهل. ما عليك سوى فتح علامة التبويب المقابلة في واجهة الويب ، والنقر فوق الزر Install Agent ... واتبع التعليمات.

نقوم بتكوين التكوين. إذا كنت تستخدم تثبيتًا عن بعد ، فقد تم إنشاؤه بالفعل ولا تحتاج إلا إلى تحديد اسم الوكيل فيه. إذا لم يكن الأمر كذلك ، فقم بإنشاء:

 cd /home/tc_agent/BuildAgent/conf cp buildAgent.dist.properties buildAgent.properties nano buildAgent.properties 

serverUrl= بعنوان واجهة الويب للخادم ، name= بالاسم الفريد للوكيل. إذا كان لديك عدة وكلاء أو كان المنفذ الافتراضي (9090) مشغولاً ، ownPort= الخاص بك باستخدام المعلمة ownPort= .

/home/tc_agent/BuildAgent/bin/agent.sh start الأمر /home/tc_agent/BuildAgent/bin/agent.sh start . إذا تم تكوين كل شيء بشكل صحيح ، فسوف نرى وكيلنا في علامة التبويب غير المصرح به . نحن نفوض ويمكنك استخدام.

لبدء الوكيل تلقائيًا ، قم بإنشاء البرنامج النصي /etc/init.d/teamcity_agent بالمحتويات التالية:

 #!/bin/bash BINARY="/home/tc_agent/BuildAgent/bin/agent.sh" RUNAS="tc_agent" LOGFILE="/home/tc_agent/BuildAgent/logs/start.log" CMD="$BINARY $1 $2" runuser - "$RUNAS" -c "$CMD > $LOGFILE" cat $LOGFILE 

أضف حقوق تشغيل sudo chmod +x /etc/init.d/teamcity_agent وأضف السطر /etc/init.d/teamcity_agent start إلى الملف /etc/rc.local .

إعادة تشغيل التحكم ، ارتفع الوكيل ، ننتقل.

قم بتثبيت Android SDK والمحاكي


قم بتنزيل أدوات android sdk ( أدوات سطر الأوامر فقط) وفكها في الدليل المطلوب. قم بإنشاء دليل لتخزين صور AVD المستقبلية (يجب أن يكون هناك مساحة كافية). بالنسبة لي ، قام المسؤولون بتوصيل المستودع الرئيسي بدليل /var, وسأضع كل شيء هناك. بعد ذلك ، نغير مالك الملفات إلى مستخدمنا والخطوات التالية هي الأفضل في ظله.

 sudo chown tc_agent -R /var/opt/android-sdk sudo mkdir /var/opt/.android sudo chown tc_agent /var/opt/.android 

أضف متغيرات البيئة. افتح الملف / /home/tc_agent/.bash_profile للتحرير والكتابة:

 export ANDROID_HOME=/var/opt/android-sdk export ANDROID_AVD_HOME=/var/opt/.android/avd export PATH=$ANDROID_HOME/platform-tools:$PATH export PATH=$ANDROID_HOME/tools:$PATH 

نقوم بإعادة التشغيل والتحقق من أن المتغيرات معروضة بشكل صحيح في واجهة الويب teamcity في علامة التبويب Agent Parameters .

نحاول تشغيل sdkmanager: يجب أن يسرد $ANDROID_HOME/tools/bin/sdkmanager --list list الحزم المثبتة والمتوفرة. إذا تلقيت خطأ مثل Exception in thread "main" java.lang.NoClassDefFoundError ، فجرّب هذا الحل .

قم بتثبيت الأدوات اللازمة وصورة (صور) الأجهزة الافتراضية.

 $ANDROID_HOME/tools/bin/sdkmanager emulator platform-tools tools $ANDROID_HOME/tools/bin/sdkmanager 'system-images;android-25;google_apis;x86' 

إنشاء وتشغيل AVD


لذلك ، قمنا بتنزيل صورة 'system-images;android-25;google_apis;x86' (Android 7.1.1) ، قم بإنشاء جهاز افتراضي بناءً على ذلك. لن أخوض في تفاصيل جميع المعلمات الممكنة لأداة avdmanager ، سأعرضها على الحد الأدنى للمبلغ الممكن:

 $ANDROID_HOME/tools/bin/avdmanager create avd -n avd_name -k "system-images;android-25;google_apis;x86" 

نقوم بنقل الاسم والصورة الأصلية (يجب تنزيله مسبقًا من خلال sdkmanager). إذا عاد الخطأ ، أضف علامة -v لعرض النص.

نحن نمر إلى المحاكي. أولاً ، تحقق من مجلدات المحاكي والمنصات وأدوات النظام الأساسي ومجلدات صور النظام في دليل SDK. لقد أنشأت منصات بيدي ، وتم إنشاء الباقي عند تثبيت الحزم من خلال sdkmanager. بعد ذلك ، تحقق من تسريع الأجهزة. يجب أن يكون هناك مثل هذا الجواب.

 $ANDROID_HOME/emulator/emulator -accel-check accel: 0 KVM (version 12) is installed and usable. accel 

إذا كان هناك خطأ في الوصول /dev/kvm ، فأضف الحقوق:

 addgroup kvm usermod -a -G kvm tc_agent chown root:kvm /dev/kvm 

بالإضافة إلى ذلك ، ما زلت بحاجة إلى تثبيت QEMU: sudo apt-get install qemu-kvm
قم بإعادة تسجيل الدخول وتحقق من المحاكي مرة أخرى.

إذا كان كل شيء على ما يرام ، فحاول الركض. لترى من خلال العينين ، اتصل بالخادم عبر vnc. وقم بتشغيل المحاكي:

 $ANDROID_HOME/emulator/emulator @avd_name 

يجب أن تظهر النافذة التالية:


أثناء تشغيل الاختبار ، سنعمل بدون رسومات ، لذلك سنضيف المعلمة -no-window .

تكوين البناء في TeamCity


ننتقل إلى المرحلة النهائية - إعداد الإطلاق المستقل لاختباراتنا. حصلت على بناء من 4 خطوات.

1. بدء تشغيل المحاكي

 nohup /var/opt/android-sdk/emulator/emulator @avd_name -no-snapshot-save -no-boot-anim -no-window -snapshot clean_snap_1 > start_emulator.log 2>&1& 

نظرًا لأن المحاكي "يقفل" المحطة الطرفية ، فأنت بحاجة إلى فك العملية باستخدام أداة nohup (يمكنك القيام بذلك بالطريقة الأخرى - أنت تقرر). تحسبًا لذلك ، احفظ سجل المحاكي إلى ملف start_emulator.log . لإجراء الاختبارات ، قمت بإنشاء لقطة نظيفة (انظر هنا لمعرفة كيفية القيام بذلك ) وأضفت مفتاح -no-snapshot-save حتى لا يتم استبداله.

2. في انتظار تمهيد الجهاز.

 adb wait-for-device shell 'while [[ -z $(getprop sys.boot_completed) ]]; do sleep 1; done;' 

أولاً ، ننتظر حالة wait-for-device ، ثم ننتظر في الحلقة عندما يعود المتغير sys.boot_completed 1.

3. تشغيل الاختبارات. كل شيء فردي هنا ، هنا مثالي:

 ./gradlew clean connectedAndroidTest 

4. أغلق المحاكي. هنا حتى الآن قمت بإنهاء بسيط للعملية.

 kill -s 2 `pgrep qemu-system` 

لكن من الأفضل بالطبع تذكر معرف العملية عند إنشاء المحاكي. سيكون ذلك ضروريًا عندما نبدأ في تشغيل الاختبارات في العديد من الخيوط ، والتي لا "تقتل" عن طريق الخطأ العملية الخاطئة.

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

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


All Articles