--> Remote TestKit Thrift API – Mobile app testing Remote TestKit

Remote TestKit

Device Cloud for
Mobile App Testing

Remote TestKit Thrift API 기능

Remote TestKit은 젠킨스 (Jenkins)와 같은 CI (Continuous Integration) 소프트웨어로 사용자의 연결 요청에 따라 실제 원격 장치에서 자동화 된 테스트를 실행할 수있는 Thrift API를 제공합니다. Java, PHP, Ruby 및 Perl과 호환됩니다.

예전에는 Remote Testkit 사용자가 클라이언트 소프트웨어를 통해 수동으로 실제 장치를 대여할 수 있었습니다. 따라서 사용자가 CI 소프트웨어를 연결하기를 원할 경우 사용자는 미리 원격 장치를 수동으로 대여해야 했습니다.

이제는 Remote TestKit Thrift API를 제공함으로써 Remote TestKit의 다양한 기능을 이전에 수동 조작없이 모든 프로그램에서 자동으로 사용할 수 있습니다.

Example case 1:
새로운 소스 코드가 커밋될 때마다 실제 장치를 빌려주는 시스템을 구축한 다음 가상 adb / Xcode 연결을 통해 자동 테스트를 실행하고 테스트를 실행하는 동안 동영상을 기록한 결과를 가져옵니다.

Example case 2:
새로운 장치가 출시되면 회사 웹 사이트의 화면 캡처를 자동으로 수행하는 시스템을 구축한 다음 사이트 이미지를 운영팀에 보냅니다.

Remote TestKit Thrift API의 구조

Remote TestKit Thrift API는 Apache Thrift 프레임워크를 사용하여 제공됩니다.

Thrift는 원래 여러 언어로 개발된 서버 프로그램간에 통신하기 위해 Facebook에서 개발되었습니다. 현재 Evernote API, Hadoop 및 기타 소프트웨어를 사용하면 사용자가 Thrift에서 통신 할 수 있는 프로그램을 개발할 수 있습니다.

https://en.wikipedia.org/wiki/Apache_Thrift

Apache Thrift를 사용하면 개발자가 Thrift 파일을 API 정의로만 작성하여 여러 프로그램 언어에 대한 라이브러리를 생성할 수 있습니다. 또한 Thrift 정의는 구조, 열거형 및 예외를 지원하므로 정적 유형을 기반으로 사용하기 쉬운 라이브러리를 생성할 수 있습니다.

Thrift가 Remote TestKit API를 사용하기위한 프로그램을 개발하려면 다음 절차가 필요합니다.

thrift_steps_eng

Remote TestKit Thrift API 사용 방법

Remote TestKit Thrift API는 dll 또는 jar 파일과 같은 각 프로그래밍 언어의 라이브러리가 아닌 Thrift 파일로 제공됩니다. 따라서 Thrift가 지원하는 모든 언어에서 사용할 수 있습니다.
*만약 Thrift 파일을 사용하고 싶으시면, 저희에게 연락해주십시오.

API를 사용하려면 다음 절차에 따라 개발에 사용할 언어의 라이브러리를 생성한 후 API서버를 실행하여 프로그램을 실행해야 합니다.

  1. 개발자가 개발에 사용하고자하는 언어의 라이브러리를 생성하기 위해 RemoteTestKitAPI.thrift (RemoteTestKit Thrift API의 정의 파일)를 컴파일하십시오.
  2. Thrift 실행시 필요한 종속 라이브러리 다운로드
  3. Remote TestKit Thrift API를 사용하여 프로그램 만들기
  4. 로컬 PC에서 Remote TestKit Thrift API 서버 실행
  5. 개발자가 만든 프로그램을 실행

제공되는 Thrift API의 예

  • 디바이스를 대여하고 대여 시간을 자동으로 연장하는 API
  • 웹페이지 캡처용 API
  • 가상 adb / Xcode 연결을 활성화 하기 위한 API
  • 화면 캡처 및 비디오 녹화를 위한 API

API 사용을 위한 간단한 예제 프로그램

Introduction

이 튜토리얼에서는 Remote TestKit Thrift API를 사용하여 디바이스 대여 및 웹페이지 캡처를 위한 프로그램을 만드는 방법을 보여줍니다.

이 튜토리얼은 다음과 같은 작동 환경을 요구합니다.

  • OS: Windows 7
  • Java runtime environment: Java 7
  • Build environment: Maven

Maven project 만들기

Thrift가 생성한 라이브러리를 사용하려면 Thrift가 필요로 하는 라이브러리가 필요합니다. 각 라이브러리의 사이트에서 수동으로 다운로드 할 수 있지만 시간이 많이 걸리는 이 튜토리얼에서는 Maven 프로젝트를 만들고 pom.xml에 종속 라이브러리를 설정하여 자동으로 다운로드 합니다.

다음과 같이 Maven 프로젝트를 생성하십시오.

  • groupdId: nttr.rtk.example
  • artifactId: rtk-example
  • version: any version

그런 다음 생성된 Maven 프로젝트의 pom.xml에 libthrift를 추가하여 종속 라이브러리를 설정합니다. Java 7은 컴파일과 실행에 사용되기 때문에 pom.xml에 maven-compiler-plugin을 설정하여 Java 7로 프로그램을 빌드해야 합니다. 마지막으로 pom.xml은 다음과 같습니다.

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>nttr.rtk.example</groupId>
    <artifactId>rtk-example</artifactId>
    <version>1.0</version>
    <dependencies>
        <dependency>
            <groupId>org.apache.thrift</groupId>
            <artifactId>libthrift</artifactId>
            <version>0.9.1</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

RemoteTestKitAPI.thrift를 사용하여 Java 용 라이브러리 생성

Apache Thrift용 웹페이지에서 Thrift 파일에서 라이브러리의 소스 코드를 생성 할 수있는 Thrift 컴파일러 (thrift-0.9.1.exe)를 다운로드하십시오. 그런 다음 이전에 만든 Maven 프로젝트의 루트에 저장합니다.

http://thrift.apache.org/download

RemoteTestKit Thrift API (RemoteTestKitAPI.thrift)의 Thrift 파일을 Maven 프로젝트의 루트에 저장하고 다음 명령을 실행하여 Java 용 라이브러리의 소스 코드를 생성합니다.

Command: thrift-0.9.1.exe -out srcmainjava –gen java RemoteTestKitAPI.thrift

API를 사용하는 exapmle 프로그램 만들기

실제 디바이스를 대여하고 Google 모바일 사이트의 화면 캡처를 위한 프로그램을 만듭니다.

다음 소스 코드를 /src/main/java/example/Main.java로 저장하십시오. 저장하기 전에 USER_NAME 및 PASSWORD를 자신의 계정 정보로 변경하십시오.

package example;

import java.io.File;
import java.util.Arrays;
import java.util.List;

import javax.swing.JFileChooser;

import nttr.rtk.thrift.Device;
import nttr.rtk.thrift.DeviceService;
import nttr.rtk.thrift.MainService;
import nttr.rtk.thrift.ServicePorts;

import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.transport.TSocket;

public class Main {
    public static void main(String[] args) throws Exception {
        String USER_NAME = "<User name>";
        String PASSWORD = "<Password>";

        System.out.println("Connect to main service");
        TSocket mainServiceTransport = new TSocket("localhost", ServicePorts.MAIN_SERVICE_PORT.getValue());
        mainServiceTransport.open();
        MainService.Client mainServiceClient = new MainService.Client(new TBinaryProtocol(mainServiceTransport));

        System.out.println("Login");
        mainServiceClient.login(USER_NAME, PASSWORD);

        while (true) {
            System.out.println("Get device list");
            List<Device> devices = mainServiceClient.getDevices();
            if (devices.isEmpty()) {
                Thread.sleep(1000);
                continue;
            }

            Device device = devices.get(0);

            System.out.println("Connect to device service");
            TSocket deviceServiceTransport = new TSocket("localhost", ServicePorts.DEVICE_SERVICE_PORT.getValue());
            deviceServiceTransport.open();

            System.out.println("Rent a device");
            DeviceService.Client deviceServiceClient = new DeviceService.Client(new TBinaryProtocol(deviceServiceTransport));
            deviceServiceClient.open(device.getDeviceId());

            System.out.println("Capturing web pages");
            String myDocumentDirectoryPath = new JFileChooser().getFileSystemView().getDefaultDirectory().toString();
            deviceServiceClient.captureWebPages(Arrays.asList("http://www.google.co.jp"), new File(myDocumentDirectoryPath,
            "tmp").getAbsolutePath());
            break;
        }
    }
}

Remote TestKit Thrift API 서버 실행

Remote TestKit Thrift API를 사용하는 경우, 프로그램과 Remote TestKit 서버간에 중계 서버 (Thrift 서버)를 실행해야합니다. 이 프로그램은 API를 사용하기 위해 Remote TestKit 서버 (Remote TestKit)를 통해 서버와 통신합니다.

API에는 릴레이 서버 메소드를 사용하여 구현함으로써 다음과 같은 이점이 있습니다.

  • 비디오 기록과 같은 파일 작성을 위해 API를 사용할 때 서버에서 결과 파일을 다운로드하는 대신 로컬 파일 시스템에 파일을 직접 작성한 후 대기 시간 및 네트워크 로드를 줄입니다.
  • 대부분의 Thrift 지원 언어는 SSL을 통한 통신 암호화를 지원하지 않지만 릴레이 서버가 서버와의 통신을 암호화하므로 Remote TestKit 서버와 안전하게 통신 할 수 있습니다.
    http://wiki.apache.org/thrift/LibraryFeatures?action=show&redirect=LanguageSupport
  • 개발자는 가상 adb와 같은 특수 기능을 사용할 수 있습니다.

Windows의 경우 : 명령 프롬프트를 실행 한 다음 “ThriftApiServer.exe”(x64 버전의 Windows 7 : “c : \ Program Files (x86) \ Remote TestKit \ ThriftApiServer.exe”)를 입력하십시오.
참고 : Remote TestKit Enterprise를 사용하는 경우 “Remote TestKit”폴더를 “Remote TestKit Enterprise”로 바꿔주십시오.

OS X의 경우 : 터미널을 시작한 다음 입력하십시오.

 $ cd "/Applications/Remote TestKit.app/Contents/MacOS" ; java -cp "../Java/*" -Dconf.directory.company.name=nttr nttr.rtk.MainForThriftServer

Note: If you are using Remote TestKit Enterprise, please replace above “Remote TestKit.app” with “Remote TestKit Enterprise.app”

Sample program 실행

앞서 만든 메인 클래스를 실행하십시오. 프로그램을 실행하면 실제 디바이스가 대여되고 티켓이 사용됩니다.

Sample program에 대한 자세한 설명

Thrift 서버는 두 개의 포트에서 수신되며, 하나는 주서비스용이고, 다른 하나는 장치서비스용입니다.

주서비스는 다음과 같은 일반적인 기능을 제공합니다.

  • 로그인 / 로그 아웃
  • 장치 목록 / 각 장치에 대한 자세한 정보 얻기
  • 자동 대여를 위한 설정 변경

장치 서비스는 장치와 관련하여 다음과 같은 기능을 제공합니다.

  • 디바이스 대여
  • 디바이스 상태 가져 오기
  • 응용 프로그램 설치
  • 화면 캡처하기
  • 녹화
  • 웹 페이지에 대한 스크린 샷 찍기
  • Wi-Fi 켜기 / 끄기
  • 화면 회전
  • 가상 adb / Xcode 연결 설정
  • 위치 설정

주서비스 및 장치서비스는 다른 포트에서 수신 대기하지만 각 포트에 대한 Thrift 연결은 하나의 컨텍스트를 공유합니다.
따라서 메인 서비스를 통해 로그인 한 후 장치 서비스를 사용해야합니다.
Thrift 서버는 프로세스가 하나의 계정으로만 로그인 하도록 허용합니다.

위의 내용을 바탕으로 이전 샘플 프로그램을 살펴 보겠습니다.

먼저, 로컬에서 실행되는 Thrift 서버의 주서비스용 포트를 연결합니다.

[code lang=”js”]
TSocket mainServiceTransport = new TSocket(“localhost”, ServicePorts.MAIN_SERVICE_PORT.getValue());
mainServiceTransport.open();
[/code]

그런 다음 Thrift 바이너리 프로토콜로 연결하고 Thrift 컴파일러에서 생성한 클래스를 사용하여 클라이언트 인스턴스를 만듭니다.
(Thrift는 서버와 클라이언트 사이의 다중 프로토콜을 지원하지만, 일반 바이너리 프로토콜만이 Thrift 서버에 연결할 수 있습니다.)

[code lang=”js”]
MainService.Client mainServiceClient = new MainService.Client(new TBinaryProtocol(mainServiceTransport));
[/code]

사용자 이름과 암호를 지정하여 로그인하십시오.

[code lang=”js”]
System.out.println(“Login”);
mainServiceClient.login(USER_NAME, PASSWORD);
[/code]

로그인이 완료되면 디바이스 목록을 사용할 수 있습니다.
목록이 비동기적으로 업데이트 되기 때문에 타이밍에 따라 디바이스가 전혀없는 상태가 있을 수 있습니다.
따라서 디바이스 목록이 비어 있으면이 프로그램은 다시 가져오기 위해 1 초 동안 기다립니다.

[code lang=”js”]
while (true) {
System.out.println(“Get device list”);
List<Device> devices = mainServiceClient.getDevices();
if (devices.isEmpty()) {
Thread.sleep(1000);
continue;
}
[/code]

디바이스 목록이 비어 있지 않으면, 이 프로그램은 목록의 첫 번째 디바이스를 가져옵니다.

[code lang=”js”]
Device device = devices.get(0);
[/code]

첫 번째 디바이스를 대여하려면 장치 서비스를 연결하십시오.

[code lang=”js”]
System.out.println(“Connect to device service”);
TSocket deviceServiceTransport = new TSocket(“localhost”, ServicePorts.DEVICE_SERVICE_PORT.getValue());
deviceServiceTransport.open();
[/code]

장치 서비스에 대한 Thrift 연결을 통해 장치 ID를 지정하여 open 메서드를 호출하면 디바이스가 대여됩니다.
동시에 이 Thrift 연결은 지정된 장치와 결합된 연결이 됩니다.

[code lang=”js”]
System.out.println(“Rent a device”);
DeviceService.Client deviceServiceClient = new DeviceService.Client(new TBinaryProtocol(deviceServiceTransport));
deviceServiceClient.open(device.getDeviceId());
[/code]

URL을 지정하고 웹 페이지에 대한 화면 캡처를 한 다음 프로그램을 종료하십시오.

[code lang=”js”]
System.out.println(“Capturing web pages”);
String myDocumentDirectoryPath = new JFileChooser().getFileSystemView().getDefaultDirectory().toString();
deviceServiceClient.captureWebPages(Arrays.asList(“http://www.google.co.jp”), new File(myDocumentDirectoryPath,
“tmp”).getAbsolutePath());
break;
[/code]

Close 메소드는 샘플 프로그램에서 명시적으로 호출되지 않지만 Thrift 서버는 연결이 끊어지면 자동으로 자원을 해제합니다.
PC 버전의 클라이언트 소프트웨어에서 볼 때 장치의 상태는 닫을 때까지 “실행 중”입니다.
close 메소드가 호출되면 상태는 “Standby”로 변경되고 다른 프로그램은 open 메소드를 다시 호출 할 수 있습니다.

열린 후에 닫지 않으면 디바이스 대여 시간이 자동으로 연장됩니다.
자동 확장은 최대 3 시간 동안 수행되며 개발자는 기본 서비스의 setMaxRentalMinutes 메소드를 사용하여 자동 확장을 위한 시간을 지정할 수 있습니다.

이 샘플은 웹 페이지 스크린샷 캡쳐만 표시하지만 Remote TestKit Thrift API는 비디오 레코딩, 가상 adb 등과 같은 다양한 기능을 제공합니다. 따라서 응용 프로그램에 따라 API를 사용하십시오.

Contact

문의