ticalabash: fully automated acceptance testing @ ticonf eu 2014

Post on 06-May-2015

1.817 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

Acceptance testing has become a crucial step of software development, but it has been a noticeably missing piece of the Titanium mobile application development puzzle. TiCalabash is a new tool, developed specifically for Titanium to bring mobile development a significant step forward in reducing time and resource risk and increasing user acceptance and overall quality of development. Fully automated, using human-readable language, and offering full end-to-end acceptance testing, TiCalabash should be a major part of your mobile development toolbox.

TRANSCRIPT

Ti Calabash: TiCalabash for Titanium: Fully Automated Testing.

!

Platino Talk?

Game Development with Titanium

https://github.com/gouldjw/tiConf-Mobile-Dev-Wars-Demo

https://vimeo.com/96590732

https://www.slideshare.net/gouldjw13/ticonf2014-gdtph-10may14ext

http://www.avatar-soft.com/#tiConf2014

Acceptance Testing

Acceptance Testing

AKA User Acceptance Testing

What is it?

Acceptance TestingTest the entire App from the UI down rather

than Units (aka Unit Testing)

Unit Testing + Acceptance Testing === Outside-in BDD<sidenote>

http://www.sarahmei.com/blog/2010/05/29/outside-in-bdd/

credit: http://lostechies.com

</sidenote>

Before Acceptance TestingSome Pain Points

Many devices, OS versions, Languages, Form Factors, Screen Density/Size…

Time consuming process of manually clicking through screens.

Catch and stop regressions

The Original VisionA Natural Language Like DSL

Extensible via ‘step definitions’

Supports Continuous Integration

No Titanium Modules

No touching tiapp.xml

Use only a Titanium CLI hook

No Ruby Dependencies

Calabash Overview

“Calabash supports Cucumber. Cucumber lets us express the behavior of our app

using natural language that can be understood by business experts and non-

technical QA staff.”— Calaba.sh

“…Calabash is cross-platform, supporting Android and iOS native apps…”

About that no Ruby thing…

TiCucumber was too much work for too little reward.

Matt Apperson had a better idea

TiCalabashA Titanium CLI hook for CalabashCalabash is Cucumber for Mobile

npm install -g ticalabashhttps://github.com/appersonlabs/ticalabash

A FeatureThis is executable code:

https://github.com/CodexLabs/alloy_fugitive/blob/master/features/fugitive.feature

Step Definitions

https://github.com/calabash/calabash-ios/blob/master/calabash-cucumber/features/step_definitions/calabash_steps.rbhttps://github.com/calabash/calabash-android/tree/master/ruby-gem/lib/calabash-android/steps

An Example

Custom Step DefinitionsAdd your own steps:

Demo

Architecture of CalabashFYI (for the curious)

features

Cucumber (On Dev computer)

iOS/ Android App

Calabash library (contains a web server

iOS: Frank Android: Robotium)

*On iOS it uses -cal scheme

Cucumber test reporter

REST API

Calabash QueriesYou can use calabash to query your UI

http://blog.lesspainful.com/2012/12/18/Android-Query/http://roadtoautomation.blogspot.nl/2013/12/road-to-identifying-elements-using.html

https://github.com/calabash/calabash-ios/wiki/05-Query-syntax

query("all button") query("all view marked:'something'")

Recording TouchesWe haven’t exposed it yet

“for reasons”

https://github.com/calabash/calabash-ios/wiki/04-Touch-recording-and-playback

Only works for iOS < 7 There appears to be hope for iOS 7

http://stackoverflow.com/questions/18205130/calabash-how-to-record-touches-on-iphone

!Calabash Android doesn’t implement it.

There is a Robotium Recorder however.

If you need touch recording today, just use Appcelerator Platform.

Recording Touches$ calabash-ios console !Now use the command record_begin !> record_begin => "" This begins recording touch events. Now in the simulator perform the touch events you want to record. This should be a short sequence of events corresponding to a gesture on a view. Then use record_end "mytouches", for example !> record_end "drag_one_up" => "drag_one_up_ios5_iphone.base64" This saves the touch events under the name "mytouches". In the example, you see the string "drag_one_up_ios5_iphone.base64". This is actually a file being saved in your directory. !You can test that the recording does what it should by running !> playback "drag_one_up" => ["<UIView: 0x7dc70b0; frame = (-48.7356 26.2644; 417.471 417.471); ... This will playback the events you just recorded at the same coordinates you recorded them. If you're unhappy with the results just try again. !If you're happy, exit the console and move the generated file to the "features" folder.

JenkinsThe Configuration

cd ~/Desktop/ticonf2014testappdemo/alloytest # or actually pull from git. titanium clean titanium build --platform=iphone --test & sleep 30 killall "iPhone Simulator" export PATH=“/Users/andrewmcelroy/.rbenv/shims:/Users/andrewmcelroy/bin:/usr/local/bin: /Users/andrewmcelroy/.rbenv/bin:/Users/andrewmcelroy/android/tools:/Users/andrewmcelroy/android/: /Users/andrewmcelroy/android//tools:/Users/andrewmcelroy/android/platform-tools/:/usr/bin:/bin: /usr/sbin:/sbin:/usr/local/bin:/usr/local/git/bin:" !echo | titanium calabash —platform=iphone !cd ~/Library/Application Support/iPhone Simulator/7.1/Applications/ AppGUID = $(find . -name "alloytest" | cut -d "/" -f 2) !cp "~/Library/Application Support/iPhone Simulator/7.1/Applications/$AppGUID/Documents/jenkins.xml" $WORKSPACE/jenkins.xml

Questions?

!

Thank You

Andrew McElroyhttps://CodexLabs.com

github.com/CodexLabs@CodexLabs

Matt Apperson@mattapperson

Special thanks to Matt for the Android implementation

top related