KaderTarlan

BlogCan

Appium Ile Mobil Test

Web uygulamarımızı test etmek için pek çok araç var ancak günden güne popüler olan mobil uygulamalarımızın testini yapmak istediğimiz zaman neler kullanmalıyız? Bunun için geliştirilmiş Appium aracından bahsedeceğim;

Appium açık kaynak kodlu mobil test aracıdır. iOS, Android, FirefoxOS desteği bulunmakta bu aracın. IOS ve Android için yazılmış uygulamalarınızın geliştirme aşamasında ve sonrasında testini yapmak mümkün oluyor. Kullanıcı arayüzü(UI) testlerini yazıp bunu Appium üzerinde çalıştırıp aksaklıklar varsa bundan haberdar oluyoruz.
Bu testleri otomatikleştirip, Continous Integration(CI) sağlamak da mümkün. Her geliştirme sonrası sizin önceden yazılmış testi Run! etmeniz yeterli olacaktır.

Mobil test alanında çok sayıda farklı platform ve cihaz oluşunun farkındayız. Yazılmış uygulamanızın hangi platformda doğru çalıştığını hangisinde patladığını bulmanız oldukça zor, her cihazdan bir örnek alıp testi manuel gerçekleştirmek ise çılgınca bir fikir olabilir.
Ancak Appium kullanarak manuel yapmak istediğin testi Appium'a desteklediği herhangi bir programlama dili ile yazarsanız, bu testi otomatikleştirerek her seferinde istediğiniz her platformda çalıştırma imkanınız olacak.

Appium desteklediği diller ise;
Java, Objective-C, JavaScript, Node.js, PHP, Python, Ruby, C#, Clojure, Perl

Yazılım testlerini manuel testlerden arındırmanın yanında onları otomatikleştirme ve bunu mobil için her mobil cihaz modelini uygulayabilme fikri bana oldukça kullanışlı müthiş bir özellik geliyor, yaygın olmayan bu yöntem keşke daha çok kullanılabilse.

Kurulum aşamasından da biraz bahsetmek istiyorum.
Appium için Node.js kurmamız gerekiyor. Bunun için ;

1
2
3
4
5
$ sudo apt-get update
$ sudo apt-get install -y python-software-properties python g++ make
$ sudo add-apt-repository ppa:chris-lea/node.js
$ sudo apt-get update
$ sudo apt-get install nodejs

Bu aşamadan sonra aşağıda verdiğim komutta hata almıştım

1
2
3
4
5
6
7
$ npm install -g grunt-cli
npm ERR! Error: EACCES, mkdir '/home/kader/.npm/sigmund/1.0.1'
npm ERR!  { [Error: EACCES, mkdir '/home/kader/.npm/sigmund/1.0.1']
npm ERR!   errno: 3,
npm ERR!   code: 'EACCES',
npm ERR!   path: '/home/kader/.npm/sigmund/1.0.1',
npm ERR!   parent: 'minimatch' }

Böyle bir hata alırsanız, aşağıdaki adımları uygulayalım.

1
2
3
4
5
6
7
8
9
 $ export NPM_PREFIX=$HOME/node
 $ alias npmg="npm -g --prefix $NPM_PREFIX"
 $ sudo chown -R `whoami` ~/.npm
 $  npm install -g grunt-cli
/home/kader/.npm-packages/bin/grunt -> /home/kader/.npm-packages/lib/node_modules/grunt-cli/bin/grunt
grunt-cli@0.1.13 /home/kader/.npm-packages/lib/node_modules/grunt-cli
├── resolve@0.3.1
├── nopt@1.0.10 (abbrev@1.0.7)
└── findup-sync@0.1.3 (lodash@2.4.2, glob@3.2.11)

Şimdi her şey yolunda. Ve Appium kurmaya hazırız!

$ npm install -g appium
$ appium &

Appium‘u Python ile kullandım ben onun için de Appium Python Client kurulumu;

1
2
3
$ git clone git@github.com:appium/python-client.git
$ cd python-client
$ python setup.py install

veya

1
$ pip install Appium-Python-Client

Herşey tamamlandıktan sonra test yazma aşamasında oluşturacağımız test dosyalarına
from appium import webdriver
adımını dahil etmeyi unutmayalım.

Test dosyalarında adımları yazabilmek için Appium-Python test diline hakim olmak gerekiyor.
Bir kaç test adımı örnek vermek gerekirse;

Dosyamızda Patformumuzun Android olmasını ve sürümünün 4.2 olmasını istediğimiz zaman;

1
2
3
4
5
6
def setUp(self):
    desired_caps = {}
    desired_caps['platformName'] = 'Android'
    desired_caps['platformVersion'] = '4.2'
    desired_caps['deviceName'] = 'Android Emulator'
    desired_caps['app'] = PATH( '../../../')

#şu anki içeriğimizi çeksin
current = driver.current_context

#HTML ağacındaki istenilen yeri bulsun
textfield = self.driver.find_elements_by_class_name("android.EditText")

#Bulunan text alanının ilk boşluğuna mail adresi yazsın
textfields[0].send_keys("blabla@appium.io")

#Mail doğru mu kontrol etsin. Olması gerekenle var olan değerler eşit mi? self.assertEqual('blabla@appium.io', textfields[0].text)

#Ekrana gelen mesajı onaylasın
alert = self.driver.switch_to_alert()
alert.accept()

#Gönder tuşuna tıklasın
self.driver.find_element_by_accessibility_id("Save").click()

#Dokunmatik telefondaki hareket etsin
action = TouchAction(self.driver);
action.long_press(start).move_to(end).release().perform()

#Belitrilen xpath adresinde pano değeri görünmüyor mu kontrol etsin
pano = self.driver.find_element_by_xpath('//[]')
self.assertIsNotNone(pano)