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 Testing
Test 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 Testing
Some 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 Vision
A 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
TiCalabash
A Titanium CLI hook for Calabash
Calabash is Cucumber for Mobile
npm install -g ticalabash
https://github.com/appersonlabs/ticalabash
A Feature
This 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.rb
https://github.com/calabash/calabash-android/tree/master/ruby-gem/lib/calabash-android/steps
An Example
Custom Step Definitions
Add your own steps:
Demo
Architecture of Calabash
FYI (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 Queries
You 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 Touches
We 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.
Jenkins
The 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 McElroy
https://CodexLabs.com
github.com/CodexLabs@CodexLabs
Matt Apperson
@mattapperson
Special thanks to Matt for the Android implementation

TiCalabash: Fully automated Acceptance Testing @ TiConf EU 2014

  • 1.
    Ti Calabash: TiCalabash forTitanium: Fully Automated Testing. !
  • 2.
  • 3.
    Game Development withTitanium 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
  • 4.
  • 5.
  • 6.
    Acceptance Testing Test theentire 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>
  • 7.
    Before Acceptance Testing SomePain Points Many devices, OS versions, Languages, Form Factors, Screen Density/Size… Time consuming process of manually clicking through screens. Catch and stop regressions
  • 8.
    The Original Vision ANatural 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
  • 9.
    Calabash Overview “Calabash supportsCucumber. 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…”
  • 10.
    About that noRuby thing… TiCucumber was too much work for too little reward. Matt Apperson had a better idea
  • 11.
    TiCalabash A Titanium CLIhook for Calabash Calabash is Cucumber for Mobile npm install -g ticalabash https://github.com/appersonlabs/ticalabash
  • 12.
    A Feature This isexecutable code: https://github.com/CodexLabs/alloy_fugitive/blob/master/features/fugitive.feature
  • 13.
  • 14.
  • 15.
  • 16.
    Architecture of Calabash FYI(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
  • 17.
    Calabash Queries You canuse 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'")
  • 18.
    Recording Touches We haven’texposed 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.
  • 19.
    Recording Touches $ calabash-iosconsole ! 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.
  • 20.
    Jenkins The 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
  • 21.
  • 22.
    Thank You Andrew McElroy https://CodexLabs.com github.com/CodexLabs@CodexLabs MattApperson @mattapperson Special thanks to Matt for the Android implementation