عاجلاً أم آجلاً ، يواجه أي اختبار يقوم بتطوير ممارسة الاختبار الذاتي مشكلة التنفيذ المستقل لاختباراته. علاوة على ذلك ، إذا كان الأخصائي من ذوي الخبرة ، فإنه يحاول التعامل مع هذا في أقرب وقت ممكن. لذا ، بعد أول اختبار تلقائي ناجح محليًا ، قررت تهيئة الإطلاق في 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 بالمحتويات التالية:
 
أضف حقوق تشغيل 
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` 
لكن من الأفضل بالطبع تذكر معرف العملية عند إنشاء المحاكي. سيكون ذلك ضروريًا عندما نبدأ في تشغيل الاختبارات في العديد من الخيوط ، والتي لا "تقتل" عن طريق الخطأ العملية الخاطئة.
هذا كل شيء ، شكرا للقراءة. إذا كانت هناك تعليقات من زملاء أكثر خبرة ، فسأقوم بكل سرور بإجراء تغييرات على الدليل.