추후 모바일 환경을 테스트 하기 위한
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/
https://github.com/appium/java-client
https://github.com/appium/appium-desktop/releases
https://github.com/mykola-mokhnach/appium-devtools-plugin
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;
}
}
'Develop > Back-End' 카테고리의 다른 글
스프링 배치(Spring Batch) 시작하기 !😭 (131) | 2024.02.03 |
---|---|
스프링 부트 카카오 로그인 API 기능 추가하기 😳 (114) | 2023.10.22 |
Selenium 을 이용하여 특정 URL 요청과 응답 값 모니터링 하는 기능 만들기 (77) | 2023.09.07 |
타임리프(Thymeleaf) 본격적으로 사용하기 ( +@ 타임리프 벤치마크 성능 비교) (59) | 2023.08.31 |
JAVA 에서 FFMPEG를 통한 영상 정보 읽기 및 영상 인코딩(압축) 처리 도전기 (61) | 2023.08.16 |