نام من دیمیتری است، من به عنوان تستر در شرکت کار می کنم
قبل از این، من قبلاً Firebase Test Lab را برای اندروید امتحان کرده بودم و واقعاً همه چیز را دوست داشتم، بنابراین تصمیم گرفتم سعی کنم زیرساخت آزمایش iOS پروژه را در همین راستا قرار دهم. من مجبور شدم خیلی در گوگل جستجو کنم و بار اول همه چیز درست نشد، بنابراین تصمیم گرفتم یک مقاله آموزشی برای کسانی که هنوز درگیر هستند بنویسم.
بنابراین، اگر آزمایشهای رابط کاربری روی پروژههای iOS دارید، میتوانید همین امروز آنها را روی دستگاههای واقعی اجرا کنید، با مهربانی توسط Good Corporation ارائه شده است. برای علاقه مندان، به گربه خوش آمدید.
در داستان، تصمیم گرفتم بر روی برخی از داده های اولیه ایجاد کنم - یک مخزن خصوصی در GitHub و سیستم ساخت CircleCI. نام برنامه AmazingApp است، bundleID com.company.amazingapp است. من این داده ها را بلافاصله ارائه می کنم تا سردرگمی بعدی را کاهش دهم.
اگر راه حل های خاصی را در پروژه خود به طور متفاوت اجرا کردید، تجربه خود را در نظرات به اشتراک بگذارید.
1. خود آزمون ها
یک شاخه پروژه جدید برای تست های UI ایجاد کنید:
$ git checkout develop
$ git pull
$ git checkout -b “feature/add-ui-tests”
بیایید پروژه را در XCode باز کنیم و با تست های رابط کاربری [XCode -> File -> New -> Target -> iOS Testing Bundle] یک Target جدید ایجاد کنیم و نام واضح AmazingAppUITests را به آن بدهیم.
به بخش Build Phases در Target ایجاد شده بروید و وجود Target Dependencies - AmazingApp را در Compile Sources - AmazingAppUITests.swift بررسی کنید.
یک تمرین خوب این است که گزینه های ساخت مختلف را به Schemes جداگانه جدا کنید. ما یک طرح برای تستهای UI خود [XCode -> Product -> Scheme -> New Scheme] ایجاد میکنیم و به آن نام یکسان میدهیم: AmazingAppUITests.
ساخت طرح ایجاد شده باید شامل هدف برنامه اصلی باشد - AmazingApp و تست های رابط کاربر هدف - AmazingAppUITests - به اسکرین شات مراجعه کنید
در مرحله بعد، یک پیکربندی ساخت جدید برای تست های UI ایجاد می کنیم. در XCode روی فایل پروژه کلیک کنید و به قسمت Info بروید. روی "+" کلیک کنید و یک پیکربندی جدید، به عنوان مثال XCtest ایجاد کنید. ما در آینده به این نیاز خواهیم داشت تا از رقصیدن با تنبور در هنگام امضای کد جلوگیری کنیم.
حداقل سه هدف در پروژه شما وجود دارد: برنامه اصلی، تست های واحد (در نهایت وجود دارند، درست است؟) و تست های Target UI که ما ایجاد کردیم.
به Target AmazingApp، تب تنظیمات ساخت، بخش Code Signing Identity بروید. برای پیکربندی XCtest، iOS Developer را انتخاب کنید. در قسمت Code Signing Style گزینه Manual را انتخاب کنید. ما هنوز یک نمایه تدارکاتی ایجاد نکرده ایم، اما مطمئناً کمی بعد به آن باز خواهیم گشت.
برای Target AmazingAppUITests ما همین کار را انجام می دهیم، اما در ستون Product Bundle Identifier وارد com.company.amazingappuitests می شویم.
2. راه اندازی یک پروژه در برنامه توسعه دهنده اپل
به صفحه برنامه برنامهنویس اپل میرویم، به بخش Certificates, Identifiers & Profiles و سپس به ستون App IDs آیتم Identifiers میرویم. یک شناسه برنامه جدید به نام AmazingAppUITests و bundleID com.company.amazingappuitests ایجاد کنید.
اکنون ما این فرصت را داریم که تست های خود را با یک گواهی جداگانه امضا کنیم، اما ... روال مونتاژ یک بیلد برای آزمایش شامل مونتاژ خود برنامه و مونتاژ تست رانر است. بر این اساس، با مشکل امضای دو شناسه باندل با یک پروفایل تأمین مواجه هستیم. خوشبختانه، یک راه حل ساده و زیبا وجود دارد - Wildcard App ID. ما روند ایجاد یک App ID جدید را تکرار می کنیم، اما به جای Explicit App ID، Wildcard App ID را مانند تصویر انتخاب کنید.
در این مرحله، کار با developer.apple.com تمام شده است، اما پنجره مرورگر را کوچک نمی کنیم. برویم به
یک خواننده با دقت متوجه شد که برای استفاده از این ابزار به یک مخزن خصوصی و یک حساب کاربری با دسترسی به برنامه توسعه دهنده اپل و Github نیاز داریم. ما یک حساب کاربری از فرم ایجاد می کنیم (اگر به طور ناگهانی چنین چیزی وجود نداشته باشد). [ایمیل محافظت شده]، یک رمز عبور قوی پیدا کنید، آن را در developer.apple.com ثبت کنید و آن را به عنوان مدیر پروژه منصوب کنید. در مرحله بعد، ما به حساب کاربری اجازه دسترسی به مخزن github شرکت شما را می دهیم و یک مخزن خصوصی جدید با نامی مانند AmazingAppMatch ایجاد می کنیم.
3. راه اندازی Fastlane و ابزار match
یک ترمینال را باز کنید، به پوشه پروژه بروید و fastlane را همانطور که در آن نشان داده شده است مقداردهی اولیه کنید
$ fastlane init
از شما خواسته می شود که تنظیمات استفاده موجود را انتخاب کنید. گزینه چهارم - تنظیم دستی پروژه را انتخاب کنید.
این پروژه دارای یک دایرکتوری جدید fastlane است که شامل دو فایل Appfile و Fastfile است. به طور خلاصه، ما داده های سرویس را در Appfile ذخیره می کنیم و کارهایی را در Fastfile می نویسیم که در اصطلاح Fastlane خطوط نامیده می شود. توصیه می کنم اسناد رسمی را بخوانید:
Appfile را در ویرایشگر متن دلخواه خود باز کرده و به فرم زیر بیاورید:
app_identifier "com.company.amazingapp" # Bundle ID
apple_dev_portal_id "[email protected]" # Созданный инфраструктурный аккаунт, имеющий право на редактирование iOS проекта в Apple Developer Program.
team_id "LSDY3IFJAY9" # Your Developer Portal Team ID
ما به ترمینال برمی گردیم و طبق دفترچه راهنمای رسمی شروع به پیکربندی مسابقه می کنیم.
$ fastlane match init
$ fastlane match development
بعد، داده های درخواستی - مخزن، حساب، رمز عبور و غیره را وارد کنید.
مهم: هنگامی که برای اولین بار برنامه match را راه اندازی می کنید، از شما خواسته می شود یک رمز عبور برای رمزگشایی مخزن وارد کنید. ذخیره این رمز عبور بسیار مهم است؛ هنگام راه اندازی سرور CI به آن نیاز خواهیم داشت!
یک فایل جدید در پوشه fastlane - Matchfile ظاهر شده است. آن را در ویرایشگر متن مورد علاقه خود باز کنید و به صورت زیر نمایش دهید:
git_url("https://github.com/YourCompany/AmazingAppMatch") #Созданный приватный репозиторий для хранения сертификатов и профайлов.
type("development") # The default type, can be: appstore, adhoc, enterprise or development
app_identifier("com.company.amazingapp")
username("[email protected]") # Your Infrastructure account Apple Developer Portal username
اگر بخواهیم در آینده از match برای امضای بیلدها برای نمایش در Crashlytics و/یا AppStore استفاده کنیم، دقیقاً به این صورت پر می کنیم، یعنی برای امضای ID بسته برنامه شما.
اما، همانطور که به یاد داریم، یک شناسه Wildcard ویژه برای امضای ساخت آزمایشی ایجاد کردیم. بنابراین، Fastfile را باز کنید و یک خط جدید وارد کنید:
lane :testing_build_for_firebase do
match(
type: "development",
readonly: true,
app_identifier: "com.company.*",
git_branch: "uitests" # создаем отдельный бранч для development сертификата для подписи тестовой сборки.
)
end
ذخیره کنید و وارد ترمینال شوید
fastlane testing_build_for_firebase
و ما می بینیم که چگونه fastlane یک گواهی جدید ایجاد کرد و آن را در مخزن قرار داد. عالی!
XCode را باز کنید. اکنون مشخصات تدارکات لازم از فرم Match Development com.company.* را داریم که باید در قسمت Provisioning profile برای اهداف AmazingApp و AmazingAppUITests مشخص شود.
باقی مانده است که برای آزمایشات مونتاژ خط اضافه شود. برویم به
بیایید از نمونه اصلی کپی پیست کنیم تا lane testing_build_for_firebase ما به این شکل ختم شود:
lane :testing_build_for_firebase do
match(
type: "development",
readonly: true,
app_identifier: "com.company.*",
git_branch: "uitests"
)
scan(
scheme: 'AmazingAppUITests', # UI Test scheme
clean: true, # Recommended: This would ensure the build would not include unnecessary files
skip_detect_devices: true, # Required
build_for_testing: true, # Required
sdk: 'iphoneos', # Required
should_zip_build_products: true, # Must be true to set the correct format for Firebase Test Lab
)
firebase_test_lab_ios_xctest(
gcp_project: 'AmazingAppUITests', # Your Google Cloud project name (к этой строчке вернемся позже)
devices: [ # Device(s) to run tests on
{
ios_model_id: 'iphonex', # Device model ID, see gcloud command above
ios_version_id: '12.0', # iOS version ID, see gcloud command above
locale: 'en_US', # Optional: default to en_US if not set
orientation: 'portrait' # Optional: default to portrait if not set
}
]
)
end
برای اطلاعات کامل در مورد راه اندازی fastlane در CircleCI، توصیه می کنم اسناد رسمی را مطالعه کنید
فراموش نکنید که یک کار جدید به config.yml خود اضافه کنید:
build-for-firebase-test-lab:
macos:
xcode: "10.1.0"
working_directory: ~/project
shell: /bin/bash --login -o pipefail
steps:
- checkout
- attach_workspace:
at: ~/project
- run: sudo bundle install # обновляем зависимости
- run:
name: install gcloud-sdk # на mac машину необходимо установить gcloud
command: |
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" < /dev/null 2> /dev/null ; brew install caskroom/cask/brew-cask 2> /dev/null
brew cask install google-cloud-sdk
- run:
name: build app for testing
command: fastlane testing_build_for_firebase # запускаем lane сборки и отправки в firebase
4. در مورد نیمکت آزمون ما چطور؟ راه اندازی Firebase
بیایید به این موضوع بپردازیم که مقاله برای چه نوشته شده است.
شاید برنامه شما از Firebase در یک طرح رایگان یا شاید اصلا استفاده نمی کند. مطلقاً هیچ تفاوت اساسی وجود ندارد، زیرا برای نیازهای آزمایشی می توانیم یک پروژه جداگانه با یک سال استفاده رایگان ایجاد کنیم (باحال، درست است؟)
ما به حساب زیرساخت خود (یا هر چیز دیگر، مهم نیست) وارد می شویم و به آن می رویم
مهم: در مرحله قبل در Fastfile in lane firebase_test_lab_ios_xctest پارامتر gcp_project باید با نام پروژه مطابقت داشته باشد.
تنظیمات پیش فرض به خوبی برای ما مناسب است.
برگه را نبندید، در همان حساب ثبت نام کنید
گوگل برای یک سال 300 دلار می دهد که در زمینه انجام تست های خودکار معادل یک سال استفاده رایگان از این سرویس است. اطلاعات پرداخت شما را وارد می کنیم، منتظر بدهی آزمایشی 1 دلار می شویم و 300 دلار به حساب شما دریافت می کنیم. پس از گذشت یک سال، پروژه به صورت خودکار به یک طرح تعرفه رایگان منتقل می شود، بنابراین نیازی به نگرانی در مورد ضرر احتمالی نیست.
بیایید به برگه پروژه Firebase برگردیم و آن را به طرح تعرفه Blaze منتقل کنیم - اکنون در صورت تجاوز از حد مجاز چیزی برای پرداخت داریم.
در رابط gcloud، پروژه Firebase ما را انتخاب کنید، آیتم منوی اصلی "Directory" را انتخاب کنید و Cloud Testing API و Cloud Tools Result API را اضافه کنید.
سپس به آیتم منو "IAM and Administration" -> Service Accounts -> Create Service بروید. ما حقوق ویرایش پروژه را اعطا می کنیم.
یک کلید API با فرمت JSON ایجاد کنید
کمی دیرتر به JSON دانلود شده نیاز خواهیم داشت، اما فعلاً راه اندازی Test Lab را کامل می دانیم.
5. راه اندازی CircleCI
یک سوال منطقی مطرح می شود - با رمزهای عبور چه باید کرد؟ مکانیسم متغیر محیطی دستگاه ساخت ما به ما کمک می کند تا رمز عبور و سایر داده های حساس خود را به صورت ایمن ذخیره کنیم. در تنظیمات پروژه CircleCI، Environment Variables را انتخاب کنید
و متغیرهای زیر را تنظیم کنید:
- کلید: GOOGLE_APPLICATION_CREDENTIALS
مقدار: محتویات فایل json کلید حساب سرویس gcloud - کلید: MATCH_PASSWORD
مقدار: رمز عبور برای رمزگشایی مخزن github با گواهی - کلید: FASTLANE_PASSWORD
مقدار: رمز عبور حساب زیرساخت پورتال توسعهدهنده اپل
ما تغییرات را ذخیره می کنیم، یک PR ایجاد می کنیم و آن را برای بررسی به سرپرست تیم خود ارسال می کنیم.
نمایش نتایج: از
در نتیجه این دستکاری های ساده، یک پایه کار خوب و پایدار با قابلیت ضبط ویدیو بر روی صفحه نمایش دستگاه در زمان آزمایش دریافت کردیم. در مثال آزمایشی، من مدل دستگاه آیفون X را مشخص کردم، اما مزرعه انتخابی غنی از ترکیبی از مدلهای مختلف و نسخههای iOS ارائه میکند.
بخش دوم به راه اندازی مرحله به مرحله Firebase Test Lab برای یک پروژه اندروید اختصاص خواهد داشت.
منبع: www.habr.com