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