카테고리 없음2015. 4. 2. 14:30


http://groups.google.com/group/calabash-android

Installation

필수

  • Ruby가 필수로 깔려 있어야 함. ruby -v를 터미널에서 실행해볼것. 윈도우에서는  RubyInstaller.org <- 여기에서 다운로드하여 설치
  • 안드로이드 SDK필수이며 ANDROID_HOME 환경변수에 압축이 풀린 SDK폴더위치를 가리키도록 해야 한다.
  • ANT도 필수로 설치되어야한다. https://ant.apache.org/bindownload.cgi 에서 설치할 수 있다.

설치

  • sudo gem install calabach-android


Ruby API

테스트 단계를 작성할 때 Ruby API로 애플리케이션과 연동함.

여기서는 high-level의 API에 대해서만 설명할것이며 더 자세한 내용을 보려면 https://github.com/calabash/calabash-android/blob/master/ruby-gem/lib/calabash-android 를 참조할것.

calabash android는 client-server 구조이다. Calabash Ruby API는 테스트서버와 HTTP로 통신하는 client side이며 서버는 앱과 함께 단말에서 동작한다. Calabash Android의 아키텍쳐가 궁금하면 다음 포스트를 참조해라.

AN OVERVIEW OF CALABASH ANDROID


일반적인 사항

start_test_server_in_background

테스트서버와 앱이 테스트에 진입(app under test:AUT)한다. 앱이 이미 실행중이면 restart한다.

reinstall_apps

테스트서버와 AUT를 새버전으로 설치한다. 


질의(Query)

query(uiquery, * args)

query는 그 결과를 array로 반환한다. 뷰나 다른 애븦리케이션 객체들을 찾아내고 유효성을 체크하거나 데이터를 추출해낼 수 있다. view객체의 경우 좌표, 클래스 그리고 컨텐츠디스크립션등을 반환한다.

irb(main):002:0> query("button index:1")

=> [{"id"=>"save", "enabled"=>true, "contentDescription"=>nil, "class"=>"android.widget.Button", "text"=>"Save", "rect"=>{"center_y"=>724.0, "center_x"=>645.5, "height"=>64, "y"=>692, "width"=>71, "x"=>610}, "description"=>"android.widget.Button{4267b4a0 VFED..C. ........ 497,243-568,307 #7f070023 app:id/save}"}] 

뷰는 hash로 표현되며 따라서 아래와 같은 결과를 볼수 있다.

irb(main):003:0> query("button index:1").first.keys 

=> ["id", "enabled", "contentDescription", "class", "text", "rect", "description"] 

*args 파라메터는 쿼리결과에 메소드를 수행할 수 있게 한다.

irb(main):005:0> query("button", "text")

=> ["Optional Settings", "Save", "Cancel", "Get a free blog at WordPress.com"]

이는 getter 메소드를 호출하게 되는데 text(), getText() 또는 isText()가 해당되며 뷰내의 버든들에 대해 수행된다. 연속으로 호출도 가능하다.

irb(main):007:0> query("button", "text", "length")

=> [17, 4, 6, 32]

irb(main):008:0> query("button", "text", "toLowerCase")

=> ["optional settings", "save", "cancel", "get a free blog at wordpress.com"]

인자가 필요한 경우 해시를 사용할 수 있다.

irb(main):033:0> query("edittext index:1", setText:"1234")

=> ["<VOID>"] 

Ruby 1.0에서는 key:val형식이 사용 불가하며 아래와 같이 사용해야 한다.

irb(main):033:0> query("edittext index:1", setText => "1234")

=> ["<VOID>"] 

쿼리 조건에 맞는 뮤들에 대해서 setTex 메소드가 "1234"인자와 함께 실행될것이다.

<VOID>는 자바 메소드가 void를 반환함을 의미한다.


Waiting

wait_for(options, &block)

특정 상태가 발생할때까지 대기한다. 옵션을 hash로 지정하면 블럭이 반복적으로 호출된다.

....







Posted by 삼스
카테고리 없음2015. 4. 2. 10:43


CALABASH 특징

  • 모바일앱에 대해 자동화된 테스트를 작성하고 실행할 수 있게 해준다.
  • 안드로이드와 iOS를 모두 지원하는 크로스플랫폼이다.
  • 오픈소스로 무료이며 Xamarin이라는 회사에서 개발중이다.
  • Xamarin Test Cloud 로 수백개의 단말에서 앱을 자동으로 테스트 할 수 있다.
  • native와 hybrid app과 연동하는 테스트코드를 작성할 수 있도록 해주는 라이브러리로 구성된다.
  • 연동액션은 다음과 같다.
  • Gestures : 터치나 제스쳐(탭, 스와이프, 회전등)
  • Assertions : 
  • Screenshots : 단말의 현재 뷰의 스크린덤프
  • Selenium WebDriver와 비교되는데 터치스크린을 갖는 네이티브앱과 연동한다는 것에서 많은 차이가 난다.

Android
  • https://github.com/calabash/calabash-android
iOS
  • https://github.com/calabash/calabash-ios


Posted by 삼스
iOS2014. 11. 20. 14:12


iOS7과 A7 processor로 64비트가 가능해짐.

32비트앱을 동일 디바이스에 동작시킬때 성능향상이 있다고 함. 실제로 느껴질정도는 모르겠음.


A7은 두개의 구분되는 명령어셋틀 가진다.

이전프로세서의 32비트 명령어셋과 64비트프로세서의 명령어셋을 추가고 제공한다. 두배 많은 integer와 floating-point 레지스터를 제공한다. 

64비트 앱은 성능향상을 위해 더 많은 데이터를 사용한다. 

64비트 숫자연산이나 NEON operation을 수행하는 앱에서 더 많은 성능향상이 있다.


64비트 시스템에서 포인터는 64비트이다. 기존의 32비트 정수도 이제 64비트이다. UIKit이나 Foundation같은 많은 시스템 프레임워크들은 이미 변경되었다. 변경은 64비트 앱이 32비트 앱보다 더 많은 메모리를 사용한다는 것이다. 주의 하지 않으면 더 많은 메모리를 사용하면서 앱 성능에 안좋은 영향을 미칠수 있다.


iOS는 32비트와 64비트용 시스템 프레임워크를 모두 가지고 있다.

모든앱이 로드될때 64비트 런타임이 로드된다. 32비트용은 로드하지 않는다. 따라서 시스템은 메모를 절약하면서 더 빠르게 앱을 실행한다. 빌트인앱들이 모두 64비트런타임을 지원하기 때문에 모든 앱들도 64비트 런타임을 지원하도록 빌드되어야 한다.


XCode 5.0.1부터 64비트 바이너리 생성이 가능

타겟은 iOS5.1.1이상이어야 한다.

64비트 바이너리는 iOS7.0.3이상의 64비트 지원 디바이스에서 구동된다.


기존앱의 경우 

1. iOS7로 업데이트

-  deprecate된 코드 패스들을 모두 제거 하고 modern practice를 사용해야 한다.

2. 64비트 포팅


새로운앱의 경우 

1. 타겟을 iOS7로

2. 32비트와 64비트로 앱을 빌드


Cocoa Touch앱을 64비트로 변환과정

- Pointer와 C 타입중에 32비트를 64비트로 변경


64비트 런타임으로 빌드를 하면 64비트 지원관련하여 경고가 뜰것임.


- 함수호출이 적절한 프로토타입으로 호출되고 있는지

- 64비트 값을 32비트에 대입하면서 발생하는 데이터 유실 회피

- 연산들이 64비트에서 적적하게 동작할지 

- Ensure that calculations are performed correctly in the 64-bit version of your app. <- 머 알아서 연산부분 챙기라는 말같고.

- Create data structures whose layouts are identical in the 32-bit and 64-bit versions of your app (such as when you write a data file to iCloud). <- 32비트와 64비트용 데이터구조체를 사용하라는데 먼소린지 잘 모르겠다.. 더 공부해야 할듯..


Posted by 삼스