2016-12-30 1 views
1

문제가있어서 해결 방법을 모르겠습니다. appium과 다른 앱과 같은 Android 앱의 자동화 테스트 도구를 보았습니다. 그들은 장치 외부에서 안드로이드 장치, 에뮬레이터에 연결하고 테스트 할 응용 프로그램을 엽니 다. 나는 같은 일을 할 수있는 네이티브 안드로이드 앱을 어떻게 만들 수 있는지 알고 싶다. 다른 응용 프로그램을 열고 해당 응용 프로그램의 UI에서 다른 작업을 실행하기 시작하십시오. 간단한 예를 들어, 내가 테스트하고자하는 소셜 앱이 있다고 가정 해 봅시다. 내 소셜 앱을 열고 앱 안에서 검색하고, 다른 게시물을 클릭하고, 게시물을 좋아하고, s.o를 좋아하는 것과 같은 몇 가지 작업을 실행하는 전화에서 실행되는 다른 앱을 원합니다. 이것을 할 수있는 방법이 있습니까? 이 작업을 수행하기위한 프레임 워크 나 메소드가 있습니까?android 응용 프로그램 상호 작용

감사합니다.

답변

2

Android 용 자동화 프레임 워크는 두 가지 종류가 있습니다.

기반 계측-: 기능 테스트

그리고 블랙 박스 프레임 워크 :

Perfecto
  • ATMOSPHERE

    이 프레임 워크는 다음과 같은 방법으로 일하는 계측 : 각 안드로이드 응용 프로그램 샌드 박스에서 실행하고 설치 한 이후 다른 애플리케이션이 동작을 변경할 수 없으므로, 계측 기반의 프레임 워크는 설치 패키지를 변경할 응용 프로그램과 상호 작용할 수 있도록하는 메소드 정의에 후크를 주입하는 응용 프로그램입니다. 이를 통해 Android 시스템에서 샌드 박스를 우회 할 수 있습니다.

    나머지 세 사람은 모두 응용 프로그램과의 상호 작용을위한 기본 서비스로 UIAutomator Android 서비스를 보유하고 있습니다. UIAutomator은 hte Android SDK의 일부이며 낮은 코드 레벨에서 시뮬레이션하는 것보다 실제 사용자 상호 작용 (예 : 클릭, 스크롤 등)의 에뮬레이션을 허용합니다.

    다섯 가지 목록에있는 프레임 워크 중 하나를 사용하면 원하는 것을 얻을 수 있다고 생각합니다. 계측은 결함을 숨길 수 있기 때문에 블랙 박스 테스트 프레임 워크를 개인적으로 권장합니다. 내가 가장 좋아하는 프레임 워크는 ATMOSPHERE입니다. 사용하기가 자유 롭고, 오픈 소스이며 아주 최근에는 사용하기가 훨씬 쉽습니다.

  • +0

    답장을위한 Thx. 그러나이 모든 프레임 워크는 장치 외부에서 연결되어 테스트를 실행합니다. 기기에서 실행되는 무언가가 필요하며 외부가 아닌 에뮬레이터 내부에서 실행중인 다른 앱을 열 수 있습니다. – user978123

    +0

    @ user978123 이러한 모든 프레임 워크에는 개발자 컴퓨터에있는 다른 구성 요소에 연결되는 장치에서 실행되는 구성 요소가 있습니다. out-of-device 구성 요소의 목적은 결과를 시각화하고 해석하는 것입니다.대안으로는 오픈 소스 프레임 워크를 변경하고 온 장치 구성 요소가 장치 자체에 결과를 쓰거나 (또는 ​​HTTP를 통해 통신하도록), 나중에 결과를 추출 할 수 있습니다. –

    1

    별도의 응용 프로그램을 열 때 명시적인 의도를 사용합니다.

    public void openApplication(Context context, String packageName) { 
        PackageManager manager = context.getPackageManager(); 
        try { 
         Intent i = manager.getLaunchIntentForPackage(packageName); 
         if (i != null) { 
          i.addCategory(Intent.CATEGORY_LAUNCHER); 
          context.startActivity(i); 
         } else { 
          Log.e(TAG, "Unable to start application"); 
          return; 
         } 
        } catch (PackageManager.NameNotFoundException e) { 
         Log.e(TAG, "Package name not found"); 
         return; 
        } 
    } 
    

    그러면 열려고하는 응용 프로그램의 컨텍스트와 패키지 이름을 제공하여이 메서드를 호출합니다. 예를 들어 Instagram을 열려면 :

    openApplication(this, "com.instagram.android");