
博客文件走为学习中心申法申法申办
Appium是自动化iOS,Android和Windows平台上的本机,移动Web和混合应用程序的工具。它支持用Objective-C或Java或Kotlin编写的Swift和Android本机应用程序编写的iOS本机应用程序。它还支持使用移动浏览器访问的移动Web应用程序(Appium支持iOS和Chrome上的Safari或Android上的内置“浏览器”应用程序)。在Lambdatest的在线云上执行Appium自动化测试。
提示:如果您没有任何.APK或.IPA文件,则可以使用我们的示例在Lambdatest上运行样本测试? Android应用程序还是样本? iOS应用。
这是Lambdatest支持的语言和框架列表,以在Lambdatest真实设备云平台上运行Appium Automation测试。
| 爪哇 | php | 红宝石 | C# | Python | JavaScript |
|---|---|---|---|---|---|
| 朱尼特 | php | 黄瓜 | C# | 表现 | WebDriverio |
| 机器人 |
我们支持与Appium兼容的所有语言和框架,因此,如果您的最爱不在表中。不用担心,您仍然可以进行测试。请与我们联系以寻求任何帮助。
注意:我们正在为更多框架准备文档。如果您希望我们优先考虑您首选框架的文档,请随时向我们大喊大叫。
使用REST API上传您的iOS应用程序(.IPA文件)或Android应用程序(.APK文件)。您需要以格式用户名提供用户名和AccessKey Username:AccessKey供身份验证的curl命令中的AccessKey。确保在卷曲请求中添加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 ""使用应用程序:
对于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"'信息注意:
上述卷曲的响应将是一个JSON对象,其中包含格式-LT的App URL -LT:// APP123456789123456789,将在下一步中使用。
这是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自动化上查看相同的内容。
下面提到了Android和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用户名。 |
| *AccessKey | 类型:字符串 | 您的LT访问密钥。 |
| 建造 | 类型:字符串 默认值:无标题 build=iOS Small Run | 您可以像包含多个测试的作业一样对测试进行分组。 |
| 姓名 | 类型:字符串 默认值:测试的测试。如果名称未传递。 name=iphone 6 Small Run | 测试名称。 |
| 项目 | 如果“项目”不通过功能,将保持空白。project=Small Run | 您可以像包含多个作业的项目一样对构建进行分组。 |
| *devicename | 类型:字符串iPhone 13 | 设备的名称。 |
| *PlatformName | 类型:字符串ios | 操作系统的名称。 |
| *PlatformVersion | 类型:字符串14 | OS版本。 |
| *应用程序 | 类型:字符串app=lt://APP100201061631704657918380 | 在将应用程序上传到lambdatest服务器上后,接受应用程序URL。 |
| queueTimeout | 类型:字符串 默认值:600 queueTimeout=300 | 该功能可用于修改范围内的队列超时值。 QueUtimeOut范围: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=portrait或者 deviceOrientation=landscape | 更改设备的屏幕方向。 |
| 隧道 | 类型:布尔值tunnel=TRUE或者 tunnel=FALSE | 用lambdatest测试本地应用。 |
| 隧道名称 | 类型:布尔值tunnelName=RabbitHole | 隧道的名称。 |
| 专用二氧化碳 | 类型:布尔值dedicatedProxy=TRUE或者 dedicatedProxy=FALSE | 专用代理。 |
| 自动竞争 | 类型:布尔值autoGrantPermissions=TRUE或者 autoGrantPermissions=FALSE | 让Appium自动确定您的应用程序所需的权限,并在安装时授予应用程序。默认为false。如果Noreset是正确的,则此功能不起作用。 |
| AutoDismissAlerts | 类型:布尔值autoDismissAlerts=TRUE或者 autoDismissAlerts=FALSE | [仅iOS] Appium功能可以驳斥iOS设备上的警报/弹出窗口。 |
| AutoAcceptAlerts | 类型:布尔值autoAcceptAlerts=TRUE或者 autoAcceptAlerts=FALSE | [仅iOS] Appium功能可以接受iOS设备上的警报/弹出窗口。 |
| newCommandTimeOut | 类型:字符串60 | 在假设客户端退出并结束会话之前,(几秒钟内)Appium将等待客户的新命令。 |
| 语言 | 类型:字符串fr | 为iOS设置的语言(仅Xcuitest驱动程序)和Android。 |
| 语言环境 | 类型:字符串fr_CA, CA | 为iOS设置的区域(仅Xcuitest驱动程序)和Android。 iOS的FR_CA格式。 CA格式(国家名称缩写)。 |
| 诺雷斯 | 类型:布尔值true | 在此会话之前请勿重置应用程序状态。有关更多详细信息,请参见此处。 |
| AutomationName | 类型:布尔值 默认值:appium automationName = Appium | 要使用哪种自动化引擎。注意:在应用程序自动化代码中设置为false,因此无法更改。 appium(默认)或uiautomator2,浓缩咖啡或uiautomator1 for android,Xcuitest或iOS仪器,或用YouIengine构建的应用程序。 |
| 事件激烈 | 类型:布尔值 默认值:false true | 启用或禁用各种appium内部事件的时间安排报告(例如,每个命令的开始和结尾等)。为了启用,请使用true。然后,将这些定时报告为响应查询当前会话时的事件属性。有关此响应的结构,请参见事件正时文档。 |
| 地理位置 | 类型:字符串fr | 允许您通过选择在全球多个国家 /地区托管的IP地址来模拟不同位置的移动行为。 |
| 其他应用 | 类型:字符串数组 默认值:[]或空数组 "otherApps":["lt://APP1002211081648217405891389","lt://APP1002211081648217429465823"] | “接受在Lambdatest服务器上上传应用程序后返回的应用URL列表。 要满足的条件: 1。如果通过“其他应用程序”,也应通过应用程序。 2。应用程序的长度 数组<= 3。 3。在最大3个其他应用程序中可以安装。 4。不应在“其他应用程序”数组中存在应用程序。 5。在“其他应用程序”阵列中没有重复。” |
有任何问题吗?请在我们的24x7聊天支持下与您联系,也可以通过[email protected]寄给我们。
使用Lambdatest隧道,您可以在Lambdatest Appium Test Automation平台上进行本地和私有托管应用程序测试。 Lambdatest Tunnel使用Web套接字,HTTPS,SSH(安全壳)等协议,以便您在本地系统和Lambdatest Cloud Server之间构建安全且独特的隧道连接。
在本文档中,学习如何在执行移动应用自动化时配置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服务器提供支持的GUI检查员。 Appium Inspector是Appium客户端(例如WebDriverio,Appium的Java客户端,Appium的Python客户端等)。我们可以使用该接口来指定Appium Server版本,设置功能。 Appium Server启动并使用该应用程序运行后,我们可以与元素进行交互并运行其他Appium命令。
到本主题结束时,您将能够:
使用REST API上传您的iOS应用程序(.IPA文件)或Android应用程序(.APK文件)。您需要以格式用户名提供用户名和AccessKey Username:AccessKey供身份验证的curl命令中的AccessKey。确保在卷曲请求中添加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 "'使用应用程序:
对于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 -LT:// APP123456789123456789,将在下一步中使用。从云测试提供商列表中启动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自动化网格,以执行应用程序自动化。在线Appium Grid可在本地网格,浏览,碟形舞会和Lambdatest上找到。因此,您可以轻松地将当前的Appium自动化脚本(或套件)从本地网格,酱汁实验室或Browserstack迁移到Lambdatest。
在本文档中,我们查看如何利用lambdatest云进行应用自动化,并从当地网格,酱汁实验室或浏览器中迁移测试脚本(或测试套件)。您可以在测试中使用Lambdatest的所需功能,对测试会话进行身份验证,并在云上执行测试。
将您当前的本地网格,Browesestack或Sauce Labs测试迁移到Lambdatest,需要在您的代码中进行一些调整。在本指南中,我们将查看如何在测试中利用Lambdatest所需的功能,对您的测试会话进行身份验证并在我们的云浏览器上执行测试。
要从当地的网格,Browesestack或Sauce Labs转移到Lambdatest,您需要对测试套件进行一些更改,例如身份验证,所需功能等。
首先,您需要在测试套件的配置设置中更改身份验证。要在Lambdatest Appium网格上运行测试,您需要具有有效的user_name和access_key来在我们的云网格上执行测试。如果您在Lambdatest上没有帐户,请访问Lambdatest注册页面并创建一个新帐户。
以下是参数的变化:
您可以在自动化仪表板的“ lambdatest”部分中找到Username和Access Key 。

当从浏览巨星或索环迁移到lambdatest时,您需要在现有代码中进行以下更改:
这是我们上面突出显示的每个字段的并排比较:
| 财产 | 类型 | Browserstack | 索环 | lambdatest |
|---|---|---|---|---|
| 用户名 | 细绳 | 访问browserstack上appium网格的用户名 | 用户名访问酱汁实验室的appium网格 | 用户名访问lambdatest上的appium网格 |
| AccessKey | 细绳 | AccessKey在Browserstack上访问Appium Grid | 访问在酱汁实验室上访问Appium网格的访问关节 | 在lambdatest上访问appium网格的访问关键 |
| 集线器URL | 细绳 | @hub-cloud.browserstack.com/wd/hub | ondemand.us-west-1.saucelabs.com/wd/hub | @hub.lambdatest.com/wd/hub |
对于基于Python的实现,以下是身份验证过程的脚本中的更改。
Browserstack
userName = "BrowserStack_UserName"
accessKey = "BrowserStack_AccessKey"索环
userName = "SAUCE_USERNAME"
accessKey = "SAUCE_ACCESS_KEY"lambdatest
userName = "LambdaTest_UserName"
accessKey = "LambdaTest_AccessKey"现在,您必须在测试套件的配置设置中修改轮毂URL。轮毂URL是字符串类型的,并指定了将为Appium测试路由执行的集线器位置。
对于基于Python的实现,以下是Hub URL脚本的更改。
Browserstack
@hub-cloud.browserstack.com/wd/hub
索环
@ondemand.us-west-1.saucelabs.com/wd/hub
lambdatest
@mobile-hub.lambdatest.com/wd/hub
功能生成器允许您指定所需的功能(或功能),这些功能是配置选项,允许您指定以下内容:
您还可以选择Lambdatest功能生成器中可用的其他高级选项。
对于迁移,我们进行了基于Java的Appium测试。以下是Browserstack和Lambdatest的功能生成器的屏幕截图。



Browserstack和Lambdatest功能生成器生成的功能的比较:
| 功能 | Browserstack | 索环 | lambdatest |
|---|---|---|---|
| 设备 | 设备 | Devicename | Devicename |
| 操作系统 | OS_Version | 平台Version | 平台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" ) ;索环
//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应用程序。以下测试在Google Pixel 3运行Android 11上进行。
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 )索环
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 )我们已经讨论了如何从酱汁实验室或浏览器迁移到Lambdatest。让我们探索如何从本地网格迁移到基于云的Appium网格。
Appium所需的功能是包裹在JSON对象中的键值对的集合。这些键值配对请求Appium服务器进行所需的测试自动化会话。
假设您想在Samsung Galaxy Tab S4运行Android 10的Python中运行APP测试。您可以以下面给出的功能形式定义相同的定义。
caps = [
{
"deviceName" : "Galaxy Tab S4" ,
"platformName" : "Android" ,
"platformVersion" : "10" ,
"build" : "Demo" ,
},
]首先,在测试套件的配置设置中更改身份验证。要在Lambdatest Appium网格上运行测试,您需要一个有效的用户名和访问密钥。如果您已经在本地网格上进行了测试,则需要修改测试脚本以初始化Appium驱动程序以及所需的功能。
将功能传递给@hub.lambdatest.com/wd/hub并带有您的lambdatest身份验证详细信息,您就完成了。这是示例Python测试脚本。
#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社区允许人们与技术爱好者互动。连接,提出问题并向精通技术的人学习。与来自全球的专业人员讨论Web开发,测试和DevOps中的最佳实践?
要保持最新功能和产品附件的更新,请访问ChangElog
Lambdatest是一个领先的测试执行和编排平台,它是快速,可靠,可扩展且安全的。它允许用户在3000多个浏览器,操作系统和真实设备组合中对Web和移动应用程序进行手册和自动测试。使用lambdatest,企业可以确保更快的开发人员反馈,从而更快地进入市场。 130多个国家 /地区的500多家企业和100万用户依靠Lambdatest来满足其测试需求。
