5 فریم ورک برتر جهت تست در اندروید

5 فریم ورک برتر جهت تست در اندروید

سیستم عامل اندروید به سرعت در حال گسترش است. OEM های جدید موبایل به طور مشهود در هر گوشه از جهان در حال ظهور بوده و اندازه های گوناگون صفحات نمایش، ROM/firmware و چیپ ست های مختلفی را ارائه می دهند. برای برنامه نویسان اندروید مقابله با این گسستگی کاری دشواریست. خوشبختانه برنامه نویسان اندروید و یا IOS به صورت نامحدودی به سیستم های cloud-based همچون Testdroid Cloud دسترسی دارند و از این رو قادر به انجام تست هایی در مقیاس عظیم جهت کسب اطمینان از کیفیت کارشان هستند. علاوه بر این فریم ورک های تست اندروید به طور قابل ملاحظه ای کار برنامه نویسان را راحت کرده است. در این مقاله قصد بر این است تا شما را با 5 فریم ورک تستی که برای اندروید ساخته شده اند آشنا کنیم.

 Robotium

بدون شک Robotium پراستفاده ترین فریم ورک تست برای اندروید است که از زمان ظهور سیستم عامل اندروید روی کار آمده است. مشابه Selenium این فریم ورک نیز با کمک API عملیات تست را آسان کرده است. Robotium یک کتابخانه open source دارد که از JUnit و سایر متدهای تست واسط کاربر یا همان UI نشات گرفته است. Robotium تست های جعبه سیاه خودکار بسیار قوی را ارائه می دهد که قابل استفاده برای اپلیکیشن های native و hybrid و همچنین تست های وب می باشند. با بهره گیری از این فرم ورک شما می توانید سناریوهای تست مختلفی طراحی کرده و با در اختیار داشتن کدهای منبع، اپلیکیشن اندروید خود را تست کنید. نمونه کدهای Robotium:
// Public void for the operation
public void testRecorded() throws Exception {
// Wait for the text 'Hello!' to be shown for newbie
if (solo.waitForText("Hello!")) {
// R class ID identifier for 'Sign in' - and click it
solo.clickOnView(solo.findViewById("com.twitter.android.R.id.sign_in"));
// R class ID identifier for entering username
solo.enterText((EditText) solo.
findViewById("com.twitter.android.R.id.login_username"),"username");
// R class ID identifier for entering password
solo.enterText((EditText) solo.
findViewById("com.twitter.android.R.id.login_password"),"password");
// R class ID identifier for clicking log in
solo.clickOnView(solo.findViewById("com.twitter.android.R.id.login_login"));
// Wait until log in is done
solo.waitForActivity("HomeTabActivity");
}
// Activate the text field to compose a tweet
solo.clickOnView(solo.
findViewById("com.twitter.android.R.id.menu_compose_tweet"));
// Type the tweet
solo.enterText((EditText) solo.
findViewById("com.twitter.android.R.id.edit"), "Testdroid");
// Tweeting!
solo.clickOnView(solo.
findViewById("com.twitter.android.R.id.composer_post"));
}
برای راحتی کار شما Testdoid Recorder ابزاری جهت ایجاد اسکریپت تستی ساخته است.با انجام هر نوع فعالیتی در گوشی همه چیز مرحله به مرحله ثبت شده و برای تغییرات آتی به Javascript تبدیل می گردند. به علاوه شما حق دانلود و استفاده از کتابخانه ExtSolo را که شامل متدهایی که در Robotium جایگذاری نشده اند را دارید. برای مثال بعضی از این کتابخانه ها عبارتنند از: مقیاس گذاری خودکار برای x و Y با هر وضوح صفحه ای درگ های muti-path تصویربرداری خودکار از صفحه در صورت عدم موفقیت تست مکان های ساختگی تغییر زبان گوشی کنترل ارتباط WiFi

 uiautomator

بدون شک فرم ورک Robotium ابزاری خوبی برای تست است، ولی با این حال uiautomator به شما اجازه می دهد در زمینه تست اپلیکیشن ها و بازی ها یک گام فراتر روید. فریم ورک تست گوگل به شما امکان تست واسط کاربری اپلیکیشن native اندرویدی را بر روی یک یا چند گوشی می دهد. مزیت دیگر uiautomator امکان انجام تست ها با اجرای JUnit و امتیازات بیشتر است، به این معنا که می توانند در فرآیند های گوناگون گسترش یابند. این فریم ورک همچنین شامل 5 کلاس گوناگون برای استفاده توسط برنامه نویسان می باشد که در زیر آورده شده اند:
 ;com.android.uiautomator.core.UiCollection
 ;com.android.uiautomator.core.UiDevice
 ;com.android.uiautomator.core.UiObject
 ;com.android.uiautomator.core.UiScrollable
 ;com.android.uiautomator.core.UiSelector
با توجه یا تاریخ ایجاد آن تنها بر روی APIهای سطح 16 یا بالاتر قابل استفاده است. یکی دیگر از عیوب uiautomator عدم پشتیبانی از webview می باشد و هیچ راهی برای دسترسی مستقیم به object های اندروید وجود ندارد. نمونه کدهای uiautomator:
// Public void for the operation
public void testSignInAndTweet() throws Exception {
// Starting application:
getUiDevice().wakeUp(); // Press Home button to ensure we're on homescreen
getUiDevice().pressHome(); // Select 'Apps' and click button
new UiObject(new UiSelector().description("Apps")).click(); 
// Select 'Twitter' and click
new UiObject(new UiSelector().text("Twitter")).click(); 
// Locate and select 'Sign in'
UiSelector signIn = new UiSelector().text("Sign In"); 
// If button is available, click
UiObject signInButton = new UiObject(signIn);
if (signInButton.exists()) {
signInButton.click(); // Set the username
new UiObject(new
UiSelector().className("android.widget.EditText").instance(0)).
setText("username");
new UiObject(new
UiSelector().className("android.widget.EditText").instance(1)).
setText("password");
new UiObject(new UiSelector().className("android.widget.Button").
text("Sign In").instance(0)).click(); // Wait Sign in progress window
getUiDevice().waitForWindowUpdate(null, 2000); // Wait for main window
getUiDevice().waitForWindowUpdate(null, 30000);
}
new UiObject(new UiSelector().description("New tweet")).click(); 
// Typing text for a tweet
new UiObject(new UiSelector().
className("android.widget.LinearLayout").instance(8)).
setText("Awesome #Testdroid!"); // Tweeting!
new UiObject(new UiSelector().text("Tweet")).click();

 Espresso

Espresso آخرین فریم ورک خودکاری است که گوگل به صورت open source ساخته و به برنامه نویسان و آزمونگرها امکان توافق بر روی واسط کاربری را می دهد. Espresso دارای API کوچک، قابل پیش بینی بوده که در Android instrumentation framework ساخته شده است و یادگیری آن آسان است. شما به سرعت می توانید تستی مختصر و قابل اعتماد برای واسط کاربری اندروید خود بسازید. این فریم ورک با API سطوح 8 یا همان Froyo و 10 Gingerbread و 15 یا Ice Cream Sandwich و نسخه های جدید کار می کند. این فریم ورک قابل اطمینان و همگام با واسط کاربری بوده و فرآیند تست را به سرعت انجام می دهد، به این معنا که همزمان با اجرای برنامه شروع شده و بعد از چند میلی ثانیه با متوقف شدن آن کارش را به پایان می رساند،Espresso نیز از webview پشتیبانی نمی کند. نمونه کدهای Espresso:
public void testEspresso() {
// Check if view with the text 'Hello.' is shown
onView(withText("Hello.")).check(matches(isDisplayed()));
// R class ID identifier for 'Sign in' - and click it
onView(withId(getInstrumentation().getTargetContext().getResources()
.getIdentifier("com.twitter.android:id/sign_in", null, null))).
perform(click());
// R class ID identifier for entering username
onView(withId(getInstrumentation().getTargetContext().getResources()
.getIdentifier("com.twitter.android:id/login_username", null, null))).
perform((typeText("username")));
// R class ID identifier for entering password
onView(withId(getInstrumentation().getTargetContext().getResources()
.getIdentifier("com.twitter.android:id/login_password", null, null))).
perform((typeText("password")));
// R class ID identifier for clicking log in
onView(withId(getInstrumentation().getTargetContext().getResources()
.getIdentifier("com.twitter.android:id/login_login", null, null))).
perform(click());
// Activate the text field to compose a tweet
onView(withId(getInstrumentation().getTargetContext().getResources()
.getIdentifier("com.twitter.android:id/menu_compose_tweet", null, null))).
perform(click());
// Type the tweet
onView(withId(getInstrumentation().getTargetContext().getResources()
.getIdentifier("com.twitter.android:id/edit", null, null))).
perform((typeText(”#Testdroid")));
// Tweeting!
onView(withId(getInstrumentation().getTargetContext().getResources()
.getIdentifier("com.twitter.android:id/composer_post", null, null))).
perform(click());
}

 Calabash

Calabash یک فریم ورک دیگر جهت تست خودکار برای اندروید و IOS است که برای اپلیکیشن های native و hybrid قابل استفاده می باشد. دستورات ساده Calabash ساخت و اجرای تست ها را برای اپلیکیشن های موبایل برای افراد غیر حرفه ای نیز ممکن می سازد. تست های Calabash در Cucumber توصیف شده و در هنگام اجرا به Robotium یا Frank تبدیل می شوند. این فریم ورک از 80 دستور مختلف پشتیبانی می کند و کنترلگرهای جدید می توانند در Ruby یا Java جایگذاری شوند. نمونه کدهای Calabash:
Feature: Login feature
Scenario: As a valid user I can log into my app
I wait for text "Hello"
Then I press view with id "Sign in"
Then I enter text "username" into "login_username"
Then I enter text "password" into "login_password"
Then I wait for activity "HomeTabActivity"
Then I press view with id "menu_compose_tweet"
Then I enter text "Testdroid" into field with id "edit"
Then I press view with id "composer_post"

 Appium

Appium یک فریم ورک تست خودکار برای اپلیکیشن های native، hybrid و mobile-web می باشد که برای سیستم عامل های اندروید و IOS قابل استفاده است. با استفاده از JSONWireProtocol با اپلیکیشن های اندروید و IOS و با بهره گیری از Selenium’s WebDirver به تعامل می پردازد. این فریم ورک از uiautomator با API سطح کمتر از 16، Seledroid با API سطح  کمتر از 16، IOS به وسیله UI Automation و موبایل وب به عنوان درایور Selenium پشتیبانی می کند. از بزرگترین مزایای Appium امکان نوشتن اسکریپت با هر زبان برنامه نویسی اعم از java، Objective-C، JavaScript، PHP، Ruby، Python، C،#C  و غیره است، به علاوه اجباری برای انتخاب ابزار وجود ندارد، با پلت فرم هایی مانند اندروید و IOS سازگار بوده و نیازی به نصب و پیکربندی دستگاه برای تست وجود ندارد. علاوه بر این در صورت آشنایی با Selenium می توانید به آسانی از Appium برای تست های خود استفاده نمایید چرا که در هر دوی آنها WebDriver و DesiredCapabilities به روشی مشابه استفاده شده اند. پیکربندی اپلیکیشن برای اجرا بر روی Appium شباهت های بسیاری به Selenium دارد. نمونه کدهای Appium:
# wait for hello
sleep(3)
textFields = driver.find_elements_by_tag_name('textField')
assertEqual(textFields[0].get_attribute("value"), "Hello")
# click sign-in button
driver.find_elements_by_name('Sign in')[0].click()
# find the text fields again, and enter username and password
textFields = driver.find_elements_by_tag_name('textField')
textFields[0].send_keys("twitter_username")
textFields[1].send_keys("passw0rd")
# click the Login button (the first button in the view)
driver.find_elements_by_tag_name('button')[0].click()
# sleep
sleep(3)
# click the first button with name "Compose"
driver.find_elements_by_name('Compose')[0].click()
# type in the tweet message
driver.find_elements_by_tag_name('textField')[0].
send_keys(”#Testdroid is awesome!")
# press the Send button
driver.find_elements_by_name('Send')[0].click()
# exit
driver.quit()
جمع بندی Comparing-Android-Testing-Frameworksدر اینجا ما 5 فریم ورک تست برای ساخت و اصلاحات اندروید  را در اختیار شما قرار دادیم که مطمئنا دارای مزایا و معایب مربوط به خود هستند. Appium گزینه ی خوبی برای تست همزمان بر روی سیستم عامل های اندروید و IOS است، ولی چنانچه شما یک برنامه نویس وفادار به اندروید هستید در این صورت ما استفاده از Robotium را به شما پیشنهاد می دهیم. استفاده از Testdroid Recorder در زمان و پول شما صرفه جویی می کند چرا که تولید اسکریپت های تست به صورت رایگان ارائه می گردد. در مجموع با تفکر درباره نیازهایتان، اعم از تست کارایی، تست قابلیت ها، تست واسط کاربری و غیره می توانید یکی از فریم ورک های تست را برای خود برگزینید. http://testdroid.com برگرفته از

اینها را هم بخوانید