본문 바로가기

Develop/Back-End

Spring Boot 환경에서 Appium을 통해 모바일 환경 테스트 하기 + 플러그인 (09.19 수정)

 

추후 모바일 환경을 테스트 하기 위한

appium 서버를 구축하고 java 와 통신하며 app 및 web 을 테스트 하기 위한 환경을 구축 하였다.

 

아마 웹 개발자들한테는 생소할 수 있는데

모바일 환경 앱 및 웹을 테스트 할 때 주로 쓰인다고 한다.

언어는 Java, Python, Ruby, JS 지원하니 모바일 디바이스 개발을 많이 하시는 분들이라 하면

유용한 테스트 도구 인 것 같다. 😄

 

* appium (앱이움) :  Appium 은 웹 드라이버를 사용하여 Android 또는 iOS 에서 스크립트를 실행하고 기본 애플리케이션, 모바일 웹 애플리케이션 및 하이브리드 애플리케이션을 테스트하기 위한 오픈 소스 자동화 도구입니다.

 

 


appium 저장소에 이슈 남겼더니..

해당 개발자가 플러그인을 개발해주었다.

아직 확인은 못해봤지만 참조 레퍼런스에 남겨놓았으니 필요한 사람들은 테스트를 도와주고 문제가 있을 시 이슈 등록하여 피드백 해주면 좋을 것 같다.


진행상황

appium Server 구축 통신 확인

java 코드로 모바일 환경에서 브라우저 이동 또는 앱 실행 확인


이슈 & 고민 및 해결

 

1. appium java-client는 cdp를 지원하지 않고 있다.

=> 관련 이슈 링크


2. cdp와 통신하기 위한 방법을 찾아야 한다. 현재로서는 어려운 상황 😥

통신 방법을 찾지 못한다면 결국 웹앱을 하나 만들어서 확인하는 방법 외에는 없는 것으로 생각된다.. 😭

 

plugins {
	id 'java'
	id 'org.springframework.boot' version '3.1.3'
	id 'io.spring.dependency-management' version '1.1.3'
}

group = 'com.acp'
version = '0.0.1-SNAPSHOT'

java {
	sourceCompatibility = '17'
}

repositories {
	mavenCentral()
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-web'
	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
	implementation group: 'org.seleniumhq.selenium', name: 'selenium-java', version: '4.12.1'
	implementation group: 'io.github.bonigarcia', name: 'webdrivermanager', version: '5.5.3'
	implementation 'org.seleniumhq.selenium:selenium-http-jdk-client:4.9.1'
	implementation group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: '2.15.2'
	implementation group: 'io.appium', name: 'java-client', version: '8.5.1'
	developmentOnly 'org.springframework.boot:spring-boot-devtools'
	compileOnly 'org.projectlombok:lombok'
	runtimeOnly 'com.h2database:h2'
	runtimeOnly 'org.mariadb.jdbc:mariadb-java-client'
	annotationProcessor 'org.projectlombok:lombok'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
	testImplementation 'org.springframework.batch:spring-batch-test'
}

tasks.named('test') {
	useJUnitPlatform()
}



참고 레퍼런스

https://appium.io/docs/en/2.1/

 

Appium Documentation - Appium Documentation

Appium Documentation Welcome to the Appium documentation! Appium is an open-source project and ecosystem of related software, designed to facilitate UI automation of many app platforms, including mobile (iOS, Android, Tizen), browser (Chrome, Firefox, Safa

appium.io

 

https://github.com/appium/java-client

 

GitHub - appium/java-client: Java language binding for writing Appium Tests, conforms to W3C WebDriver Protocol

Java language binding for writing Appium Tests, conforms to W3C WebDriver Protocol - GitHub - appium/java-client: Java language binding for writing Appium Tests, conforms to W3C WebDriver Protocol

github.com

https://github.com/appium/appium-desktop/releases

 

Releases · appium/appium-desktop

Appium Server in Desktop GUIs for Mac, Windows, and Linux - appium/appium-desktop

github.com

https://github.com/mykola-mokhnach/appium-devtools-plugin

 

GitHub - mykola-mokhnach/appium-devtools-plugin: Appium plugin that adds proxy features to Android mobile webviews

Appium plugin that adds proxy features to Android mobile webviews - GitHub - mykola-mokhnach/appium-devtools-plugin: Appium plugin that adds proxy features to Android mobile webviews

github.com


TO DO List

1. appium cdp 소켓 통신 확인하기

2. 1이 안될 경우 insept로 가상 디바이스 접근하여 확인하기


Example Code

디바이스가 크롬 app을 실행한 후 해당 블로그로 이동하는 코드 sample code

package com.acp.AbusingCheckProject.job;

import io.appium.java_client.AppiumDriver;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.options.UiAutomator2Options;
import io.appium.java_client.remote.MobileCapabilityType;
import org.openqa.selenium.devtools.DevTools;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.net.URL;
import java.time.Duration;

@Component
public class NetworkMonitoringMobile {

    @Scheduled(fixedRate = 500000000)
    public void executeNetworkMonitoring() throws Exception {
        AppiumDriver driver = setupMobileWeb();
        driver.get("https://djlife.tistory.com/");


    }

    private AppiumDriver setupMobileWeb() {
        UiAutomator2Options capabilities = new UiAutomator2Options();

        capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");
        capabilities.setCapability(MobileCapabilityType.PLATFORM_VERSION, "14");
        capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "emulator-5554"); 
        capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, "UiAutomator2");
        capabilities.setCapability(MobileCapabilityType.BROWSER_NAME, "Chrome");

        capabilities.setCapability("chromedriverExecutable", System.getProperty("webdriver.chrome.driver"));

        // Open browser.
        AppiumDriver driver = null;

        try{
            driver = new AppiumDriver(new URL("http://127.0.0.1:4723/wd/hub"),capabilities);
        }catch (Exception e){
            e.printStackTrace();
        }

        driver.manage()
                .timeouts()
                .implicitlyWait(Duration.ofSeconds(60));
        return driver;
    }

}

 

반응형