
블로그 ⋅ Docs ⋅ 학습 허브 ⋅ 뉴스 레터 ⋅ 인증 ⋅ YouTube
Appium은 iOS, Android 및 Windows 플랫폼에서 기본, 모바일 웹 및 하이브리드 애플리케이션을 자동화하는 도구입니다. Objective-C 또는 Swift 및 Java 또는 Kotlin으로 작성된 Android 기본 앱으로 작성된 iOS 기본 앱을 지원합니다. 또한 모바일 브라우저를 사용하여 액세스하는 모바일 웹 앱 (iOS 및 Chrome의 Safari 또는 Android의 내장 브라우저 '앱을 지원합니다)을 지원합니다. LambDatest의 온라인 클라우드에서 Appium 자동화 테스트를 수행하십시오.
팁 : .apk 또는 .ipa 파일이없는 경우 샘플을 사용하여 LambDatest에서 샘플 테스트를 실행할 수 있습니까? 안드로이드 앱 또는 샘플? iOS 앱.
다음은 LambDatest가 Lamdatest 실제 장치 클라우드 플랫폼에서 Appium 자동화 테스트를 실행하기 위해 LambDatest가 지원하는 언어 및 프레임 워크 목록입니다.
| 자바 | PHP | 루비 | 기음# | 파이썬 | 자바 스크립트 |
|---|---|---|---|---|---|
| 주니트 | PHP | 오이 | 기음# | 행동하다 | WebDriverio |
| 기계 인간 |
우리는 Appium과 호환되는 모든 언어와 프레임 워크를 지원하므로 좋아하는 경우 테이블에없는 경우. 걱정하지 마십시오. 여전히 테스트를 실행할 수 있습니다. 도움을 받으려면 저희에게 연락하십시오 .
참고 : 우리는 더 많은 프레임 워크를위한 문서를 준비하고 있습니다. 우리가 선호하는 프레임 워크의 문서를 우선 순위로 정리하기를 원한다면 자유롭게 외침을 주십시오.
iOS 응용 프로그램 (.ipa 파일) 또는 Android 애플리케이션 (.apk 파일)을 REST API를 사용하여 LambDatest 서버에 업로드하십시오. 인증을 위해 CURL 명령의 Username:AccessKey 형식으로 사용자 이름 과 AccessKey를 제공해야합니다. CURL 요청에 AppFile 경로를 추가하십시오. 다음은 REST API를 사용하여 앱을 업로드하려는 Curl 요청 예입니다.
MacOS/Linux의 경우 :
curl - u "{username}:{accesskey}"
-- location -- request POST 'https: //manual-api.lambdatest.com/app/upload/realDevice'
-- form 'name="Android_App"'
-- form 'appFile=@"/Users/{desktop_username}/Desktop/LT_Java_Appium/proverbial_android.apk"'Windows :
curl - u "{username}:{accesskey}" - X POST "https://manual-api.lambdatest.com/app/upload/realDevice" - F "appFile=@" / Users / Desktop_username / Desktop / LT_Java_Appium / proverbial_android . apk ""앱 URL 사용 :
MacOS/Linux의 경우 :
curl - u "${ YOUR_LAMBDATEST_USERNAME()}:${ YOUR_LAMBDATEST_ACCESS_KEY()}"
-- location -- request POST 'https: //manual-api.lambdatest.com/app/upload/realDevice'
-- form 'name="Android_App"'
-- form 'url="https://prod-mobile-artefacts.lambdatest.com/assets/docs/proverbial_android.apk"'Windows :
curl - u "${ YOUR_LAMBDATEST_USERNAME()}:${ YOUR_LAMBDATEST_ACCESS_KEY()}"
- X POST "https://manual-api.lambdatest.com/app/upload/realDevice"
- d "{"url":"https://prod-mobile-artefacts.lambdatest.com/assets/docs/proverbial_android.apk",
"name":"sample.apk"'정보 참고 :
위의 컬의 응답은 형식 -LT : // app123456789123456789의 App URL 포함하는 JSON 객체이며 다음 단계에서 사용됩니다.
다음은 위에 다운로드 한 샘플 앱을위한 Java의 샘플 자동화 스크립트입니다. 아래 코드에서 app_url , username 및 accesskey 업데이트하십시오.
import io . appium . java_client . AppiumDriver ;
import io . appium . java_client . MobileBy ;
import io . appium . java_client . MobileElement ;
import io . appium . java_client . android . AndroidElement ;
import org . openqa . selenium . remote . DesiredCapabilities ;
import org . openqa . selenium . support . ui . ExpectedConditions ;
import org . openqa . selenium . support . ui . WebDriverWait ;
import java . net . URL ;
import java . util . List ;
public class AndroidApp {
public static String userName = "username" ; //Enter your LT Username here
public static String accessKey = "accesskey" ; //Enter your LT AccessKey here
public String gridURL = "@mobile-hub.lambdatest.com/wd/hub" ;
String DeviceValue ;
String versionValue ;
String PlatformValue ;
@ org . testng . annotations . Parameters ( value = { "device" , "version" , "platform" })
public AndroidApp ( String device , String version , String platform ) {
try {
DeviceValue = device ;
versionValue = version ;
PlatformValue = platform ;
DesiredCapabilities capabilities = new DesiredCapabilities ();
capabilities . setCapability ( "build" , "ParallelSample Android" );
capabilities . setCapability ( "name" , platform + " " + device + " " + version );
capabilities . setCapability ( "deviceName" , device );
capabilities . setCapability ( "platformVersion" , version );
capabilities . setCapability ( "platformName" , platform );
capabilities . setCapability ( "isRealMobile" , true );
//AppURL (Create from Wikipedia.apk sample in project)
capabilities . setCapability ( "app" , "app url" ); //Enter your app URL from previous step here
capabilities . setCapability ( "deviceOrientation" , "PORTRAIT" );
capabilities . setCapability ( "console" , true );
capabilities . setCapability ( "network" , true );
capabilities . setCapability ( "visual" , true );
capabilities . setCapability ( "devicelog" , true );
String hub = "https://" + userName + ":" + accessKey + gridURL ;
AppiumDriver driver = new AppiumDriver ( new URL ( hub ), capabilities );
MobileElement color = ( MobileElement ) driver . findElementById ( "com.lambdatest.proverbial:id/color" );
//Changes color
color . click ();
//Back to black color
color . click ();
MobileElement text = ( MobileElement ) driver . findElementById ( "com.lambdatest.proverbial:id/Text" );
//Changes the text to proverbial
text . click ();
//toast is visible
MobileElement toast = ( MobileElement ) driver . findElementById ( "com.lambdatest.proverbial:id/toast" );
toast . click ();
//notification is visible
MobileElement notification = ( MobileElement ) driver . findElementById ( "com.lambdatest.proverbial:id/notification" );
notification . click ();
//Open the geolocation page
MobileElement geo = ( MobileElement ) driver . findElementById ( "com.lambdatest.proverbial:id/geoLocation" );
geo . click ();
Thread . sleep ( 5000 );
//takes back to home page
MobileElement home = ( MobileElement ) driver . findElementByAccessibilityId ( "Home" );
home . click ();
//Takes to speed test page
MobileElement speedtest = ( MobileElement ) driver . findElementById ( "com.lambdatest.proverbial:id/speedTest" );
speedtest . click ();
Thread . sleep ( 5000 );
MobileElement el10 = ( MobileElement ) driver . findElementByXPath ( "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout[2]/android.view.ViewGroup/android.widget.RelativeLayout/android.widget.FrameLayout[1]/android.widget.FrameLayout/android.widget.RelativeLayout/android.webkit.WebView/android.webkit.WebView/android.view.View/android.view.View/android.view.View[1]/android.view.View[3]/android.view.View[1]/android.view.View/android.widget.Button" );
el10 . click ();
Thread . sleep ( 25000 );
MobileElement el11 = ( MobileElement ) driver . findElementByXPath ( "//android.widget.FrameLayout[@content-desc= " Home " ]/android.widget.FrameLayout/android.widget.ImageView" );
el11 . click ();
//Opens the browser
MobileElement browser = ( MobileElement ) driver . findElementByAccessibilityId ( "Browser" );
browser . click ();
MobileElement el13 = ( MobileElement ) driver . findElementById ( "com.lambdatest.proverbial:id/url" );
el13 . sendKeys ( "www.lambdatest.com" );
MobileElement el14 = ( MobileElement ) driver . findElementById ( "com.lambdatest.proverbial:id/find" );
el14 . click ();
driver . quit ();
} catch ( Exception t ) {
System . out . println ();
}
}
} import io . appium . java_client . AppiumDriver ;
import io . appium . java_client . MobileElement ;
import org . openqa . selenium . JavascriptExecutor ;
import org . openqa . selenium . remote . DesiredCapabilities ;
import java . net . URL ;
public class iOSApp {
public static String userName = "username" ; //Enter your LT Username here
public static String accessKey = "accesskey" ; //Enter your LT AccessKey here
public String gridURL = "@mobile-hub.lambdatest.com/wd/hub" ;
String DeviceValue ;
String versionValue ;
String PlatformValue ;
AppiumDriver driver ;
@ org . testng . annotations . Parameters ( value = { "device" , "version" , "platform" })
public iOSApp ( String device , String version , String platform ) {
try {
DeviceValue = device ;
versionValue = version ;
PlatformValue = platform ;
DesiredCapabilities capabilities = new DesiredCapabilities ();
capabilities . setCapability ( "build" , "ParallelSample iOS" );
capabilities . setCapability ( "name" , platform + " " + device + " " + version );
capabilities . setCapability ( "deviceName" , device );
capabilities . setCapability ( "platformVersion" , version );
capabilities . setCapability ( "platformName" , platform );
capabilities . setCapability ( "isRealMobile" , true );
//AppURL (Create from proverbial.ipa sample in project)
capabilities . setCapability ( "app" , "app url" ); //Enter your app URL from previous step here
capabilities . setCapability ( "deviceOrientation" , "PORTRAIT" );
capabilities . setCapability ( "console" , true );
capabilities . setCapability ( "network" , true );
capabilities . setCapability ( "visual" , true );
capabilities . setCapability ( "devicelog" , true );
//capabilities.setCapability("geoLocation", "HK");
String hub = "https://" + userName + ":" + accessKey + gridURL ;
driver = new AppiumDriver ( new URL ( hub ), capabilities );
MobileElement color = ( MobileElement ) driver . findElementByAccessibilityId ( "Colour" );
//Changes color
color . click ();
//Back to black color
color . click ();
MobileElement text = ( MobileElement ) driver . findElementByAccessibilityId ( "Text" );
//Changes the text to proverbial
text . click ();
//toast is visible
MobileElement toast = ( MobileElement ) driver . findElementByAccessibilityId ( "Toast" );
toast . click ();
//notification is visible
MobileElement notification = ( MobileElement ) driver . findElementByAccessibilityId ( "Notification" );
notification . click ();
//Open the geolocation page
MobileElement geo = ( MobileElement ) driver . findElementByAccessibilityId ( "GeoLocation" );
geo . click ();
Thread . sleep ( 5000 );
//Takes back
driver . navigate (). back ();
//Takes to speed test page
MobileElement speedtest = ( MobileElement ) driver . findElementByAccessibilityId ( "Speed Test" );
speedtest . click ();
Thread . sleep ( 5000 );
MobileElement el10 = ( MobileElement ) driver . findElementByAccessibilityId ( "start speed test - connection type multi" );
el10 . click ();
Thread . sleep ( 25000 );
driver . navigate (). back ();
//Opens the browser
MobileElement browser = ( MobileElement ) driver . findElementByAccessibilityId ( "Browser" );
browser . click ();
Thread . sleep ( 3000 );
MobileElement el4 = ( MobileElement ) driver . findElementByAccessibilityId ( "Search" );
el4 . click ();
el4 . sendKeys ( "Lambdatest" );
(( JavascriptExecutor ) driver ). executeScript ( "lambda-status=passed" );
driver . quit ();
} catch ( Exception t ) {
System . out . println ();
(( JavascriptExecutor ) driver ). executeScript ( "lambda-status=failed" );
driver . quit ();
}
}
}.XML 파일을 만듭니다. 동일한 방법으로 아래에서 샘플 코드를 찾으십시오. <? xml version = " 1.0 " encoding = " UTF-8 " ?>
<! DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
< suite thread-count = " 100 " name = " Mobile " parallel = " tests " >
< test name = " AppTest 1 " >
< parameter name = " version " value = " 11 " />
< parameter name = " platform " value = " Android " />
< parameter name = " device " value = " Galaxy S21 Ultra 5G " />
< classes >
< class name = " AndroidApp " />
</ classes >
</ test >
< test name = " AppTest 2 " >
< parameter name = " version " value = " 11 " />
< parameter name = " platform " value = " Android " />
< parameter name = " device " value = " Galaxy S21 " />
< classes >
< class name = " AndroidApp " />
</ classes >
</ test >
</ suite ><? xml version = " 1.0 " encoding = " UTF-8 " ?>
<! DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
< suite thread-count = " 100 " name = " Mobile " parallel = " tests " >
< test name = " iOSApp 1 " >
< parameter name = " version " value = " 14 " />
< parameter name = " platform " value = " iOS " />
< parameter name = " device " value = " iPhone 11 " />
< classes >
< class name = " iOSApp " />
</ classes >
</ test >
< test name = " iOSApp 2 " >
< parameter name = " version " value = " 14 " />
< parameter name = " platform " value = " iOS " />
< parameter name = " device " value = " iPhone 12 Pro " />
< classes >
< class name = " iOSApp " />
</ classes >
</ test >
</ suite > 코드를 디버그하고 실행하십시오. 편집자에서 iOSApp.java 또는 AndroidApp.java 실행하십시오.
테스트를 실행하면 로그와 함께 테스트 실행을 볼 수 있습니다. 테스트 사례가 통과하거나 실패하는 것을 볼 수 있습니다. LambDatest Automation에서 동일하게 볼 수 있습니다.
안드로이드와 iOS의 샘플 기능은 다음과 같습니다.
{
"deviceName" : "Galaxy Tab S4" ,
"platformName" : "android" ,
"platformVersion" : "10" ,
"app" : "App_url" ,
"visual" : True ,
"console" : True ,
"deviceOrientation" : "PORTRAIT" ,
"build" : "new-12" ,
"isRealMobile" : True ,
} {
"deviceName": "iPhone 12 Mini",
"platformName": "ios",
"platformVersion": "14",
"app": "App_url",
"isRealMobile": True,
"visual": True,
"console": True,
"build": "lt-web-4",
"network": True,
}
참고 : 필수 필드는 별표로 표시되어 있습니다 *
| 열쇠 | 값 | 기능 설명 |
|---|---|---|
| *사용자 | 유형 : 문자열 | LT 사용자 이름. |
| *액세스키 | 유형 : 문자열 | LT 액세스 키. |
| 짓다 | 유형 : 문자열 기본값 : 제목없는 build=iOS Small Run | 여러 테스트가 포함 된 작업과 같이 테스트를 그룹화 할 수 있습니다. |
| 이름 | 유형 : 문자열 기본값 : 테스트 테스트. 이름이 전달되지 않은 경우. name=iphone 6 Small Run | 시험 이름. |
| 프로젝트 | '프로젝트'가 능력으로 전달되지 않은 경우 비워집니다.project=Small Run | 여러 작업이 포함 된 프로젝트와 같이 빌드를 그룹화 할 수 있습니다. |
| *DeviceName | 유형 : 문자열iPhone 13 | 장치의 이름. |
| *플랫폼 이름 | 유형 : 문자열ios | OS의 이름. |
| *플랫폼 버전 | 유형 : 문자열14 | OS 버전. |
| *앱 | 유형 : 문자열app=lt://APP100201061631704657918380 | LambDatest 서버에서 앱을 업로드 한 후 앱 URL이 반환되었습니다. |
| queuetimeout | 유형 : 문자열 기본값 : 600 queueTimeout=300 | 이 기능은 범위 내에서 큐 타임 아웃 값을 수정하는 데 사용할 수 있습니다. Queuetimeout 범위 : 300-900. |
| Idletimeout | 유형 : 문자열 기본값 : 120 idleTimeout=120 | 이 기능은 타임 아웃 값을 수정하는 데 사용할 수 있습니다. |
| 시각적 | 유형 : 부울 기본값 : False visual=TRUE또는 visual=FALSE | 명령 별 명령 스크린 샷은 각 테스트 단계에서 기록됩니다. 기본적으로 플래그는 꺼짐으로 설정됩니다. 참고 : 'true'로 설정되면 테스트 실행 시간이 증가합니다. |
| 동영상 | 유형 : 부울 기본값 : True video=TRUE또는 video=FALSE | 전체 화면의 비디오 녹화. |
| DeviceLog | 유형 : 부울 기본값 : True devicelog=TRUE또는 devicelog=FALSE | 장치 로그를 활성화합니다. |
| 회로망 | 유형 : 부울 기본값 : True network=TRUE또는 network=FALSE | 네트워크 로그를 활성화합니다. |
| Deviceorientation | 유형 : 문자열deviceOrientation=portrait또는 deviceOrientation=landscape | 장치의 화면 방향을 변경하십시오. |
| 터널 | 유형 : 부울tunnel=TRUE또는 tunnel=FALSE | LambDatest로 로컬 응용 프로그램을 테스트합니다. |
| 터널 이름 | 유형 : 부울tunnelName=RabbitHole | 터널의 이름. |
| 전용 프록시 | 유형 : 부울dedicatedProxy=TRUE또는 dedicatedProxy=FALSE | 전용 프록시. |
| 자가 운동 | 유형 : 부울autoGrantPermissions=TRUE또는 autoGrantPermissions=FALSE | Appium에 앱이 필요한 권한을 자동으로 결정하고 설치시 앱에 부여하도록하십시오. 기본값으로 거짓. Noreset이 사실이라면이 기능은 작동하지 않습니다. |
| Autodismissalerts | 유형 : 부울autoDismissAlerts=TRUE또는 autoDismissAlerts=FALSE | [iOS 전용] iOS 장치에서 경보/팝업을 기각 할 수있는 Appium 기능. |
| 자동 수용자 | 유형 : 부울autoAcceptAlerts=TRUE또는 autoAcceptAlerts=FALSE | [iOS 전용] iOS 장치에서 알림/팝업을 수락 할 수있는 Appium 기능. |
| NewCommandTimeout | 유형 : 문자열60 | 클라이언트가 종료하고 세션을 끝내기 전에 클라이언트의 새로운 명령을 기다리는 시간 (초) Appium이 얼마나 오래 기다릴 것입니다. |
| 언어 | 유형 : 문자열fr | iOS (Xcuitest 드라이버 만) 및 Android로 설정하는 언어. |
| 장소 | 유형 : 문자열fr_CA, CA | iOS (Xcuitest 드라이버 만) 및 Android로 설정할 로케일. iOS 용 FR_CA 형식. Android의 CA 형식 (국가 이름 약어). |
| Noreset | 유형 : 부울true | 이 세션 전에 앱 상태를 재설정하지 마십시오. 자세한 내용은 여기를 참조하십시오. |
| 자동화 이름 | 유형 : 부울 기본값 : Appium automationName = Appium | 사용할 자동화 엔진. 참고 : 앱 자동화 코드에서 False로 설정하므로 변경할 수 없습니다. Appium (기본값), 또는 Uiautomator2, Espresso, 또는 Uiautomator1, iOS 용 xcuitest 또는 기기 또는 YouiEngine으로 구축 된 응용 프로그램 용 YouiEngine. |
| 이벤트 티밍 | 유형 : 부울 기본값 : False true | 다양한 Appium Internal 이벤트 (예 : 각 명령의 시작 및 끝 등)에 대한 타이밍보고를 활성화 또는 비활성화합니다. 활성화하려면 True를 사용하십시오. 그런 다음 타이밍은 현재 세션 쿼리에 대한 응답으로 이벤트 속성으로보고됩니다. 이 응답의 구조는 이벤트 타이밍 문서를 참조하십시오. |
| 지리 위치 | 유형 : 문자열fr | 전 세계 여러 국가에서 호스팅되는 IP 주소를 선택하여 다른 위치에서 모바일 동작을 시뮬레이션 할 수 있습니다. |
| 다른 apps | 유형 : 문자열 배열 기본값 : [] 또는 빈 배열 "otherApps":["lt://APP1002211081648217405891389","lt://APP1002211081648217429465823"] | "LambDatest 서버에서 앱을 업로드 한 후 반환 된 앱 URL 목록을 허용합니다. 만족할 조건 : 1. "OtherApps"가 통과되면 앱을 통과해야합니다. 2. 앱 URL의 길이 배열 <= 3. 3. MAX 3에서 다른 앱을 설치할 수 있습니다. 4. 앱은 'OtherApp'배열 안에 없어야합니다. 5. 'OtherApp'배열에는 복제되지 않았습니다. " |
질문이 있습니까? 24x7 채팅 지원 에 연락하거나 [email protected]으로 알려주십시오.
LambDatest 터널을 사용하여 LambDatest Appium Test Automation 플랫폼에서 다양한 실제 Android 및 iOS 장치에서 로컬 및 개인 호스팅 앱을 테스트 할 수 있습니다. LambDatest 터널은 웹 소켓, HTTPS, SSH (Secure Shell) 및 기타 프로토콜을 사용하여 로컬 시스템과 LambDatest 클라우드 서버간에 안전하고 고유 한 터널 연결을 구축 할 수 있습니다.
이 문서에서는 모바일 앱 자동화를 수행하는 동안 LambDatest 터널을 구성하여 로컬 또는 개인 호스팅 앱을 테스트하는 방법에 대해 알아보십시오.
로컬로 앱을 테스트하려면 다음을 구성해야합니다.
Lambdatest 터널과의 연결.
LambDatest 터널을 통해 실행할 스크립트를 테스트합니다.
아래는 LambDatest 터널과의 연결을 구성하는 단계입니다.
다운로드 된 이진 파일을 추출하십시오.
명령 프롬프트로 이동하여 바이너리 파일을 추출한 디렉토리/폴더를 가리 킵니다.
터미널에서 아래 명령을 실행하십시오.
. / LT -- user { user 's login email} --key {user' s access key } -- tunnelName { user 's tunnel name} LambDatest 터널과의 연결을 구성한 후에는 기능 tunnel True 로 설정해야합니다.
| 열쇠 | 값 | 설명 | 원하는 기능 |
|---|---|---|---|
| 터널 | 참/거짓 | 터널을 구성하십시오 | "tunnel" : True, |
LambDatest 기능 생성기를 사용하여 tunnel 기능을 추가 할 수도 있습니다.
궁금한 점이 있거나 추가 정보가 필요한 경우 24x7 채팅 지원 으로 삭제하거나 [email protected]으로 직접 우편으로 보내십시오.
모바일 앱을위한 GUI 검사관 등 (별도 설치된) Appium 서버 로 구동됩니다. Appium Inspector는 사용자 인터페이스가있는 Appium 클라이언트 (Webdriverio, Appium의 Java 클라이언트, Appium의 Python 클라이언트 등)입니다. Appium Server 버전을 지정하고 기능을 설정하는 데 인터페이스를 사용할 수 있습니다. Appium 서버가 앱에서 UP 및 실행되면 요소와 상호 작용하고 다른 Appium 명령을 실행할 수 있습니다.
이 주제가 끝나면 다음을 수행 할 수 있습니다.
iOS 응용 프로그램 (.ipa 파일) 또는 Android 애플리케이션 (.apk 파일)을 REST API를 사용하여 LambDatest 서버에 업로드하십시오. 인증을 위해 CURL 명령의 Username:AccessKey 형식으로 사용자 이름 과 AccessKey를 제공해야합니다. CURL 요청에 AppFile 경로를 추가하십시오. 다음은 REST API를 사용하여 앱을 업로드하려는 Curl 요청 예입니다.
앱 파일 사용 :
iOS의 경우 :
curl - u "{usename}:{accesskey}"
-- location -- request POST 'https: //manual-api.lambdatest.com/app/upload/realDevice'
-- form 'name="Android_App"'
-- form 'url="https://prod-mobile-artefacts.lambdatest.com/assets/docs/proverbial_android.apk"'Windows :
curl - u "YOUR_LAMBDATEST_USERNAME:YOUR_LAMBDATEST_ACCESS_KEY" - X POST "https://manual-api.lambdatest.com/app/upload/realDevice" - F "appFile=@" / Users / macuser / Downloads / proverbial_android . apk "'앱 URL 사용 :
MacOS/Linux의 경우 :
curl - u "YOUR_LAMBDATEST_USERNAME:YOUR_LAMBDATEST_ACCESS_KEY"
-- location -- request POST 'https: //manual-api.lambdatest.com/app/upload/realDevice'
-- form 'name="Android_App"'
-- form 'url="https://prod-mobile-artefacts.lambdatest.com/assets/docs/proverbial_android.apk"'Windows :
curl - u "YOUR_LAMBDATEST_USERNAME:YOUR_LAMBDATEST_ACCESS_KEY" - X POST "https://manual-api.lambdatest.com/app/upload/realDevice" - d "url":"https://prod-mobile-artefacts.lambdatest.com/assets/docs/proverbial_android.apk","name":"sample.apk"'팁:
App URL 포함하는 JSON 객체이며 다음 단계에서 사용됩니다.Appium Inspector를 시작하고 클라우드 테스트 제공 업체 목록에서 LambDatest를 선택하십시오.
사용자 이름 및 액세스 키를 입력하십시오. LambDatest 대시 보드에서 사용할 수있는 자격 증명을 찾을 수 있습니다
Appium Inspector의 원하는 기능 탭에서 LambDatest 기능을 구성하십시오. 1 단계에서 얻은 고유 한 앱 URL을 사용하여 앱 기능 값을 설정하십시오. LambDatest에서 지원하는 모든 기능 목록은 여기에서 사용할 수 있습니다.
또는 기능 생성기로 이동하여 GUI를 사용하여 기능 표현을 생성 할 수도 있습니다.

이것이 완료되면 이제 시작 세션을 클릭하여 테스트를 실행할 수 있습니다. 세션을 시작하면 LambDatest 대시 보드에서 세부 정보 및 테스트 실행의 로그와 함께 비디오 녹화를 사용할 수 있습니다.

질문이 있습니까?
24x7 채팅 지원 에 연락하거나 [email protected]으로 알려주십시오.
이 문서에서는 모바일 앱 테스트 워크 플로를 최적화하는 데 도움이되는 API를 살펴 봅니다. 라이브 또는 자동화 된 앱 테스트를 수행하는 경우이 API를 사용하여 앱을 가져오고 삭제할 수 있습니다.
업로드 된 앱 목록과 앱 ID 목록을 가져 오려면 아래 CURL 명령을 실행하십시오.
curl -- location -- request GET 'https://YOUR_LAMBDATEST_USERNAME:[email protected]/app/data?type=ios&level=user'아래는 위의 컬 요청에 대한 응답입니다.
{ "metaData" : { "type" : "ios" , "total" : 1 } ,
"data" : [ {
"app_id" : "APP100245789181570497850" ,
"name" : "proverbial_ios.ipa" ,
"type" : "ios" ,
"updated_at" : "2022-05-10T11:19:30.000Z" ,
"shared" : false ,
"source" : "web-client"
} ] 업로드 된 앱을 삭제하려면 아래 CURL 명령을 실행하십시오.
curl -- location -- request DELETE 'https: //YOUR_LAMBDATEST_USERNAME:[email protected]/app/delete'
-- header 'Content-Type: application/json'
-- data - raw ' {
"appIds" : "APPID1,APPID2"
} '아래는 위의 컬 요청에 대한 응답입니다.
{ "message" : "Deleted successfully." }그게 다야! 궁금한 점이 있거나 추가 정보가 필요한 경우 24x7 채팅 지원 에 연락하거나 [email protected]으로 직접 우송 할 수 있습니다.
LambDatest는 앱 자동화를 수행하기 위해 온라인 앱륨 자동화 그리드를 제공합니다. 온라인 appium 그리드는 로컬 그리드, 브로우 스태 스케이션, SAUCELABS 및 LAMBDATEST에서 사용할 수 있습니다. 따라서 현재 Appium Automation Scripts (또는 Suites)를 로컬 그리드, 소스 실험실 또는 Browserstack에서 LambDatest로 쉽게 마이그레이션 할 수 있습니다.
이 문서에서는 앱 자동화를 위해 LambDatest 클라우드를 활용하고 로컬 그리드, 소스 실험실 또는 Browserstack에서 테스트 스크립트 (또는 테스트 스위트)를 마이그레이션하는 방법을 살펴 봅니다. 테스트에서 LambDatest의 원하는 기능을 사용하고 테스트 세션을 인증하며 클라우드에서 테스트를 실행할 수 있습니다.
현재 로컬 그리드, 브로우즈 스택 또는 소스 실험실 테스트를 LambDatest로 마이그레이션하려면 코드에서 약간의 조정이 필요합니다. 이 안내서에서는 테스트에서 LambDatest의 원하는 기능을 활용하고 테스트 세션을 인증하며 클라우드 브라우저에서 테스트를 실행하는 방법을 살펴 보겠습니다.
로컬 그리드, 브로우즈 스택 또는 소스 실험실에서 LambDatest로 이동하려면 인증, 원하는 기능 등과 같은 테스트 스위트를 변경해야합니다.
먼저 테스트 스위트의 구성 설정에서 인증을 변경해야합니다. LambDatest Appium Grid에서 테스트를 실행하려면 클라우드 그리드에서 테스트를 수행하려면 유효한 user_name 및 access_key 있어야합니다. LambDatest에 계정이없는 경우 LambDatest 가입 페이지를 방문하여 새 계정을 만듭니다.
다음은 매개 변수의 변경 사항입니다.
자동화 대시 보드 의 LambDatest 프로필 섹션 에서 Username 과 Access Key 찾을 수 있습니다.

Browserstack 또는 Saucelabs에서 Lambdatest로 마이그레이션 할 때는 기존 코드를 다음과 같은 변경해야합니다.
다음은 위에서 강조한 각 필드를 나란히 비교합니다.
| 재산 | 유형 | Browserstack | SAUCELABS | lambdatest |
|---|---|---|---|---|
| 사용자 이름 | 끈 | Browserstack에서 Appium Grid에 액세스하는 사용자 이름 | 소스 실험실에서 Appium Grid에 액세스하는 사용자 이름 | LambDatest에서 Appium Grid에 액세스하는 사용자 이름 |
| 액세스키 | 끈 | Browserstack에서 Appium Grid에 액세스하는 Accesskey | 소스 실험실에서 Appium Grid에 액세스하는 Accesskey | LambDatest에서 Appium Grid에 액세스하는 Accesskey |
| 허브 URL | 끈 | @hub-cloud.browserstack.com/wd/hub | ondemand.us-west-1.saucelabs.com/wd/hub | @hub.lambdatest.com/wd/hub |
파이썬 기반 구현의 경우 인증 프로세스에 대한 스크립트의 변경 사항은 다음과 같습니다.
Browserstack
userName = "BrowserStack_UserName"
accessKey = "BrowserStack_AccessKey"SAUCELABS
userName = "SAUCE_USERNAME"
accessKey = "SAUCE_ACCESS_KEY"lambdatest
userName = "LambdaTest_UserName"
accessKey = "LambdaTest_AccessKey"이제 테스트 스위트의 구성 설정에서 허브 URL을 수정해야합니다. 허브 URL은 문자열 유형이며 Appium 테스트가 실행을 위해 라우팅되는 허브 위치를 지정합니다.
파이썬 기반 구현의 경우 Hub URL 스크립트의 변경 사항은 다음과 같습니다.
Browserstack
@hub-cloud.browserstack.com/wd/hub
SAUCELABS
@ondemand.us-west-1.saucelabs.com/wd/hub
lambdatest
@mobile-hub.lambdatest.com/wd/hub
기능 생성기는 다음을 지정할 수있는 구성 옵션 인 원하는 기능 (또는 기능)을 지정할 수 있습니다.
LambDatest 기능 생성기에서 사용 가능한 다른 고급 옵션을 선택할 수도 있습니다.
마이그레이션을 위해 Java 기반 Appium 테스트를 수행했습니다. 다음은 Browserstack 및 Lambdatest의 기능 생성기의 스크린 샷입니다.



Browserstack 및 LambDatest 기능 생성기에 의해 생성 된 기능의 비교 :
| 기능 | Browserstack | SAUCELABS | lambdatest |
|---|---|---|---|
| 장치 | 장치 | DeviceName | DeviceName |
| 운영 체제 | os_version | 플랫폼 버전 | 플랫폼 버전 |
다음은 Java 언어의 원하는 기능 비교에 대한 개요입니다.
Browserstack
//demo.java
DesiredCapabilities capabilities = new DesiredCapabilities ( ) ;
capabilities . setCapability ( "os_version" , "9.0" ) ;
capabilities . setCapability ( "device" , "Google Pixel 3" ) ;
capabilities . setCapability ( "browserstack.appium_version" , "1.21.0" ) ;SAUCELABS
//demo.java
MutableCapabilities caps = new MutableCapabilities ();
caps . setCapability ( "platformName" , "Android" );
caps . setCapability ( "browserName" , "Chrome" );
caps . setCapability ( "appium:deviceName" , "Google Pixel 3 GoogleAPI Emulator" );
caps . setCapability ( "appium:platformVersion" , "12.0" );
MutableCapabilities sauceOptions = new MutableCapabilities ();
sauceOptions . setCapability ( "appiumVersion" , "1.21.0" );
caps . setCapability ( "sauce:options" , sauceOptions );lambdatest
//demo.java
DesiredCapabilities capabilities = new DesiredCapabilities ( ) ;
capabilities . setCapability ( "build" , "your build name" ) ;
capabilities . setCapability ( "name" , "your test name" ) ;
capabilities . setCapability ( "platformName" , "Android" ) ;
capabilities . setCapability ( "deviceName" , "Google Pixel 3" ) ;
capabilities . setCapability ( "isRealMobile" , true ) ;
capabilities . setCapability ( "platformVersion" , "9" ) ;전체 마이그레이션 프로세스를 보여주는 예를 살펴 보겠습니다. 테스트 시나리오는 'lambdatest'라는 용어를 검색하는 Wikipedia 앱을 열는 것입니다. Android 11을 실행하는 Google Pixel 3에서 다음 테스트가 실행됩니다.
from appium import webdriver
from appium . webdriver . common . mobileby import MobileBy
from selenium . webdriver . support . ui import WebDriverWait
from selenium . webdriver . support import expected_conditions as EC
import time
userName = "BrowserStack_UserName"
accessKey = "BrowserStack_AccessKey"
desired_caps = {
"build" : "Python Android" ,
"device" : "Google Pixel 3" ,
"app" : "<app_url>"
}
driver = webdriver . Remote ( "https://" + userName + ":" + accessKey + "@hub-cloud.browserstack.com/wd/hub" , desired_caps )
search_element = WebDriverWait ( driver , 30 ). until (
EC . element_to_be_clickable (( MobileBy . ACCESSIBILITY_ID , "Search Wikipedia" ))
)
search_element . click ()
search_input = WebDriverWait ( driver , 30 ). until (
EC . element_to_be_clickable (( MobileBy . ID , "org.wikipedia.alpha:id/search_src_text" ))
)
search_input . send_keys ( "BrowserStack" )
time . sleep ( 5 )
search_results = driver . find_elements_by_class_name ( "android.widget.TextView" )
assert ( len ( search_results ) > 0 )
driver . quit () #samplewikipedia.py
import ssl
try :
_create_unverified_https_context = ssl . _create_unverified_context
except AttributeError :
# Legacy Python that doesn't verify HTTPS certificates by default
pass
else :
# Handle target environment that doesn't support HTTPS verification
ssl . _create_default_https_context = _create_unverified_https_context
from threading import Thread
import time
from selenium import webdriver
from selenium . webdriver . common . keys import Keys
from selenium . webdriver . common . desired_capabilities import DesiredCapabilities
from selenium . common . exceptions import TimeoutException
from selenium . webdriver . support . ui import WebDriverWait
from selenium . webdriver . support import expected_conditions as EC
from appium . webdriver . common . mobileby import MobileBy
from appium import webdriver
# This array 'caps' defines the capabilities browser, device and OS combinations where the test will run
caps = {
caps [ 'platformName' ] = 'Android'
caps [ 'browserName' ] = 'Chrome'
caps [ 'appium:deviceName' ] = 'Google Pixel 3a GoogleAPI Emulator'
caps [ 'appium:platformVersion' ] = '11.0'
caps [ 'sauce:options' ] = {}
caps [ 'sauce:options' ][ 'appiumVersion' ] = '1.20.2'
}
# run_session function searches for 'saucelabs' on google.com
def run_session ( desired_cap ):
driver = webdriver . Remote (
command_executor = "https://SAUCE_USERNAME:[email protected]/wd/hub" ,
desired_capabilities = desired_cap )
# driver.get("https://www.ifconfig.me")
# time.sleep(10)
# Test case for the saucelabs sample Android app.
# If you have uploaded your app, update the test case here.
search_element = WebDriverWait ( driver , 30 ). until (
EC . element_to_be_clickable (
( MobileBy . ACCESSIBILITY_ID , "Search Wikipedia" ))
)
search_element . click ()
search_input = WebDriverWait ( driver , 30 ). until (
EC . element_to_be_clickable (
( MobileBy . ID , "org.wikipedia.alpha:id/search_src_text" ))
)
search_input . send_keys ( "saucelabs" )
time . sleep ( 5 )
search_results = driver . find_elements_by_class_name (
"android.widget.TextView" )
assert ( len ( search_results ) > 0 )
# Invoke driver.quit() after the test is done to indicate that the test is completed.
driver . quit ()
# The Thread function takes run_session function and each set of capability from the caps array as an argument to run each session in parallel
for cap in caps :
Thread ( target = run_session , args = ( cap ,)). start () #samplewikipedia.py
import ssl
try :
_create_unverified_https_context = ssl . _create_unverified_context
except AttributeError :
# Legacy Python that doesn't verify HTTPS certificates by default
pass
else :
# Handle target environment that doesn't support HTTPS verification
ssl . _create_default_https_context = _create_unverified_https_context
from threading import Thread
import time
from selenium import webdriver
from selenium . webdriver . common . keys import Keys
from selenium . webdriver . common . desired_capabilities import DesiredCapabilities
from selenium . common . exceptions import TimeoutException
from selenium . webdriver . support . ui import WebDriverWait
from selenium . webdriver . support import expected_conditions as EC
from appium . webdriver . common . mobileby import MobileBy
from appium import webdriver
# This array 'caps' defines the capabilities browser, device and OS combinations where the test will run
caps = [
{
"deviceName" : "Google Pixel 3" ,
"platformName" : "Android" ,
"platformVersion" : "11" ,
"app" : "<lt_app_url>" ,
"isRealMobile" : True ,
"deviceOrientation" : "PORTRAIT" ,
"build" : "Demo" ,
},
]
# run_session function searches for 'lambtest' on google.com
def run_session ( desired_cap ):
driver = webdriver . Remote (
# hub.mobile-dev-1.dev.lambdatest.io/wd/hub",
command_executor = "https://LT_USERNAME:[email protected]/wd/hub" ,
desired_capabilities = desired_cap )
# driver.get("https://www.ifconfig.me")
# time.sleep(10)
# Test case for the lambdatest sample Android app.
# If you have uploaded your app, update the test case here.
search_element = WebDriverWait ( driver , 30 ). until (
EC . element_to_be_clickable (
( MobileBy . ACCESSIBILITY_ID , "Search Wikipedia" ))
)
search_element . click ()
search_input = WebDriverWait ( driver , 30 ). until (
EC . element_to_be_clickable (
( MobileBy . ID , "org.wikipedia.alpha:id/search_src_text" ))
)
search_input . send_keys ( "lambdatest" )
time . sleep ( 5 )
search_results = driver . find_elements_by_class_name (
"android.widget.TextView" )
assert ( len ( search_results ) > 0 )
# Invoke driver.quit() after the test is done to indicate that the test is completed.
driver . quit ()
# The Thread function takes run_session function and each set of capability from the caps array as an argument to run each session in parallel
for cap in caps :
Thread ( target = run_session , args = ( cap ,)). start ()위에서 볼 수 있듯이 구현의 대부분은 변경되지 않습니다. 인프라의 변경 만 변경됩니다 (즉, Browserstack 대신 앱 자동화 테스트는 LambDatest에서 실행됩니다).
구현 관점에서 변경된 내용을 분석해 봅시다.
Browserstack
from appium import webdriver
from appium . webdriver . common . mobileby import MobileBy
from selenium . webdriver . support . ui import WebDriverWait
from selenium . webdriver . support import expected_conditions as EC
import time
userName = "BrowserStack_UserName"
accessKey = "BrowserStack_AccessKey"
desired_caps = {
"build" : "Python Android" ,
"device" : "Google Pixel 3" ,
"app" : "<app_url>"
}
driver = webdriver . Remote ( "https://" + userName + ":" + accessKey + "@hub-cloud.browserstack.com/wd/hub" , desired_caps )SAUCELABS
from threading import Thread
import time
from selenium import webdriver
from selenium . webdriver . common . keys import Keys
from selenium . webdriver . common . desired_capabilities import DesiredCapabilities
from selenium . common . exceptions import TimeoutException
from selenium . webdriver . support . ui import WebDriverWait
from selenium . webdriver . support import expected_conditions as EC
from appium . webdriver . common . mobileby import MobileBy
from appium import webdriver
# This array 'caps' defines the capabilities browser, device and OS combinations where the test will run
caps = {
caps [ 'platformName' ] = 'Android'
caps [ 'browserName' ] = 'Chrome'
caps [ 'appium:deviceName' ] = 'Google Pixel 3a GoogleAPI Emulator'
caps [ 'appium:platformVersion' ] = '11.0'
caps [ 'sauce:options' ] = {}
caps [ 'sauce:options' ][ 'appiumVersion' ] = '1.20.2'
}
# run_session function searches for 'saucelabs' on google.com
def run_session ( desired_cap ):
driver = webdriver . Remote (
command_executor = "https://SAUCE_USERNAME:[email protected]/wd/hub" ,
desired_capabilities = desired_cap )lambdatest
from threading import Thread
import time
from selenium import webdriver
from selenium . webdriver . common . keys import Keys
from selenium . webdriver . common . desired_capabilities import DesiredCapabilities
from selenium . common . exceptions import TimeoutException
from selenium . webdriver . support . ui import WebDriverWait
from selenium . webdriver . support import expected_conditions as EC
from appium . webdriver . common . mobileby import MobileBy
from appium import webdriver
caps = [
{
"deviceName" : "Google Pixel 3" ,
"platformName" : "Android" ,
"platformVersion" : "11" ,
"app" : "<lt_app_url>" ,
"build" : "Demo" ,
},
]
def run_session ( desired_cap ):
driver = webdriver . Remote ( command_executor = "https://LT_USERNAME:[email protected]/wd/hub" , desired_capabilities = desired_cap )우리는 소스 실험실에서 마이그레이션하거나 Browserstack에서 Lambdatest로 이주하는 방법에 대해 논의했습니다. 로컬 그리드에서 클라우드 기반 Appium 그리드로 마이그레이션하는 방법을 살펴 보겠습니다.
Appium의 원하는 기능은 JSON 객체 안에 감싸는 키 값 쌍의 모음입니다. 이 키 값 쌍은 필요한 테스트 자동화 세션에 Appium 서버를 요청합니다.
Android 10을 실행하는 Samsung Galaxy Tab S4에서 Python에서 앱 테스트를 실행하고 싶다고 가정 해 봅시다. 아래와 같은 기능 형태로 동일하게 정의 할 수 있습니다.
caps = [
{
"deviceName" : "Galaxy Tab S4" ,
"platformName" : "Android" ,
"platformVersion" : "10" ,
"build" : "Demo" ,
},
]시작하려면 테스트 스위트의 구성 설정에서 인증을 변경하십시오. LambDatest Appium Grid에서 테스트를 실행하려면 유효한 사용자 이름과 액세스 키가 필요합니다. 로컬 그리드에서 이미 테스트를 수행중인 경우 테스트 스크립트를 수정하여 원하는 기능과 함께 Appium 드라이버를 초기화해야합니다.
LambDatest 인증 세부 정보를 사용하여 기능을 @hub.lambdatest.com/wd/hub 로 전달하면 완료됩니다. 다음은 샘플 파이썬 테스트 스크립트입니다.
#samplewikipedia.py
import ssl
try :
_create_unverified_https_context = ssl . _create_unverified_context
except AttributeError :
# Legacy Python that doesn't verify HTTPS certificates by default
pass
else :
# Handle target environment that doesn't support HTTPS verification
ssl . _create_default_https_context = _create_unverified_https_context
from threading import Thread
import time
from selenium import webdriver
from selenium . webdriver . common . keys import Keys
from selenium . webdriver . common . desired_capabilities import DesiredCapabilities
from selenium . common . exceptions import TimeoutException
from selenium . webdriver . support . ui import WebDriverWait
from selenium . webdriver . support import expected_conditions as EC
from appium . webdriver . common . mobileby import MobileBy
from appium import webdriver
# This array 'caps' defines the capabilities of the browser, device, and OS combinations where the test will run
caps = [
{
"deviceName" : "Galaxy Tab S4" ,
"platformName" : "Android" ,
"platformVersion" : "10" ,
"app" : "lt://APP10051525539885437397" ,
"isRealMobile" : True ,
"deviceOrientation" : "PORTRAIT" ,
"visual" : True ,
"console" : True ,
"build" : "Demo" ,
},
]
# run_session function searches for 'lambdatest' on google.com
def run_session ( desired_cap ):
driver = webdriver . Remote (
# hub.mobile-dev-1.dev.lambdatest.io/wd/hub",
command_executor = "https://LT_USERNAME:[email protected]/wd/hub" ,
desired_capabilities = desired_cap )
# driver.get("https://www.ifconfig.me")
# time.sleep(10)
# Test case for the lambdatest sample Android app.
# If you have uploaded your app, update the test case here.
search_element = WebDriverWait ( driver , 30 ). until (
EC . element_to_be_clickable (
( MobileBy . ACCESSIBILITY_ID , "Search Wikipedia" ))
)
search_element . click ()
search_input = WebDriverWait ( driver , 30 ). until (
EC . element_to_be_clickable (
( MobileBy . ID , "org.wikipedia.alpha:id/search_src_text" ))
)
search_input . send_keys ( "lambdatest" )
time . sleep ( 5 )
search_results = driver . find_elements_by_class_name (
"android.widget.TextView" )
assert ( len ( search_results ) > 0 )
# Invoke driver.quit() after the test is done to indicate that the test is completed.
driver . quit ()
# The Thread function takes run_session function and each set of capability from the caps array as an argument to run each session in parallel
for cap in caps :
Thread ( target = run_session , args = ( cap ,)). start ()그게 다야! 궁금한 점이 있거나 추가 정보가 필요한 경우 24x7 채팅 지원 에 연락하거나 [email protected]으로 직접 우송 할 수 있습니다.
LambDatest의 기능, 테스트 자동화, 모바일 앱 테스트, 반응 형 테스트 및 수동 테스트에 대한 LambDatest의 기능, 설정 및 자습서에 대한 자세한 내용은 다음 링크를 방문하십시오.
Lambdatest 커뮤니티를 통해 사람들은 기술 애호가와 상호 작용할 수 있습니다. 기술에 정통한 사람들로부터 연결하고 질문하고 배우십시오. 전 세계 전문가와 웹 개발, 테스트 및 DevOps의 모범 사례에 대해 논의합니까?
최신 기능 및 제품 추가 기능으로 업데이트하려면 Changelog를 방문하십시오.
LambDatest는 빠르고 신뢰할 수 있고 확장 가능하며 안전한 최고의 테스트 실행 및 오케스트레이션 플랫폼입니다. 이를 통해 사용자는 3000 개 이상의 다른 브라우저, 운영 체제 및 실제 장치 조합에서 웹 및 모바일 앱의 수동 및 자동 테스트를 모두 실행할 수 있습니다. LambDatest를 사용하여 비즈니스는 더 빠른 개발자 피드백을 보장하고 시장에 더 빠르게 진행할 수 있습니다. 130 개 이상의 국가의 500 개 이상의 기업과 1 백만 명 이상의 사용자가 테스트 요구에 대해 LambDatest에 의존합니다.
