Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Creazione di una sessione di accesso remoto in AWS Device Farm
Per ulteriori informazioni sulle sessioni di accesso remoto, consulta Sessioni.
Prerequisiti
-
Crea un progetto in Device Farm. Segui le istruzioni riportate in Creazione di un progetto in AWS Device Farm, poi torna a questa pagina.
Crea una sessione remota
- Console
-
Accedere alla console Device Farm all'indirizzo https://console.aws.amazon.com/devicefarm.
-
Nel pannello di navigazione di Device Farm, scegli Mobile Device Testing, quindi scegli Progetti.
-
Se hai già un progetto, selezionalo dall'elenco. Altrimenti, crea un progetto seguendo le istruzioni riportate inCreazione di un progetto in AWS Device Farm.
-
Nella scheda Accesso remoto, scegli Crea sessione di accesso remoto.
-
Selezionare un dispositivo per la propria sessione. Puoi scegliere dall'elenco dei dispositivi disponibili o cercare un dispositivo utilizzando la barra di ricerca nella parte superiore dell'elenco.
-
(Facoltativo) Includi un'app e app ausiliarie come parte della sessione. Queste possono essere app caricate di recente o app caricate in precedenza in questo progetto negli ultimi 30 giorni (dopo 30 giorni, i caricamenti delle app scadranno).
-
In Session name (Nome sessione), immettere un nome per la sessione.
-
Selezionare Confirm and start session (Conferma e avvia sessione).
- AWS CLI
-
Nota: queste istruzioni si concentrano solo sulla creazione di una sessione di accesso remoto. Per istruzioni su come caricare un'app da utilizzare durante la sessione, consulta Automatizzare i caricamenti delle app.
Innanzitutto, verifica che la tua versione CLI di AWS sia disponibile up-to-date scaricando e installando la versione più recente.
Importante
Alcuni comandi menzionati in questo documento non sono disponibili nelle versioni precedenti dell'interfaccia a riga di comando di AWS.
Quindi, puoi determinare su quale dispositivo desideri eseguire il test:
$aws devicefarm list-devicesQuesto mostrerà un output come il seguente:
{ "devices": [ { "arn": "arn:aws:devicefarm:us-west-2::device:DE5BD47FF3BD42C3A14BF7A6EFB1BFE7", "name": "Google Pixel 8", "remoteAccessEnabled": true, "availability": "HIGHLY_AVAILABLE" ... }, ... ] }Quindi, puoi creare la tua sessione di accesso remoto con un ARN del dispositivo a tua scelta:
$aws devicefarm create-remote-access-session \ --project-arn arn:aws:devicefarm:us-west-2:111122223333:project:12345678-1111-2222-333-456789abcdef \ --device-arn arn:aws:devicefarm:us-west-2::device:DE5BD47FF3BD42C3A14BF7A6EFB1BFE7 \ --app-arn arn:aws:devicefarm:us-west-2:111122223333:upload:12345678-1111-2222-333-456789abcdef/12345678-1111-2222-333-456789abcdef \ --configuration '{ "auxiliaryApps": [ "arn:aws:devicefarm:us-west-2:111122223333:upload:12345678-1111-2222-333-456789abcdef/12345678-1111-2222-333-456789abcde0", "arn:aws:devicefarm:us-west-2:111122223333:upload:12345678-1111-2222-333-456789abcdef/12345678-1111-2222-333-456789abcde1" ] }'Questo mostrerà un output come il seguente:
{ "remoteAccessSession": { "arn": "arn:aws:devicefarm:us-west-2:111122223333:session:abcdef123456-1234-5678-abcd-abcdef123456/abcdef123456-1234-5678-abcd-abcdef123456/00000", "name": "Google Pixel 8", "status": "PENDING", ... }Ora, facoltativamente, possiamo effettuare un sondaggio e attendere che la sessione sia pronta:
$POLL_INTERVAL=3 TIMEOUT=600 DEADLINE=$(( $(date +%s) + TIMEOUT )) while [[ "$(date +%s)" -lt "$DEADLINE" ]]; do STATUS=$(aws devicefarm get-remote-access-session \ --arn "$DEVICE_FARM_SESSION_ARN" \ --query 'remoteAccessSession.status' \ --output text) case "$STATUS" in RUNNING) echo "Session is ready with status: $STATUS" break ;; STOPPING|COMPLETED) echo "Session ended early with status: $STATUS" exit 1 ;; esac done - Python
-
Nota: queste istruzioni si concentrano solo sulla creazione di una sessione di accesso remoto. Per istruzioni su come caricare un'app da utilizzare durante la sessione, consulta Automatizzare i caricamenti delle app.
Questo esempio trova innanzitutto qualsiasi dispositivo Google Pixel disponibile su Device Farm, quindi crea una sessione di accesso remoto con esso e attende l'esecuzione della sessione.
import random import time import boto3 client = boto3.client("devicefarm", region_name="us-west-2") # 1) Gather all matching devices via paginated ListDevices with filters filters = [ {"attribute": "MODEL", "operator": "CONTAINS", "values": ["Pixel"]}, {"attribute": "AVAILABILITY", "operator": "EQUALS", "values": ["AVAILABLE"]}, ] matching_arns = [] next_token = None while True: args = {"filters": filters} if next_token: args["nextToken"] = next_token page = client.list_devices(**args) for d in page.get("devices", []): matching_arns.append(d["arn"]) next_token = page.get("nextToken") if not next_token: break if not matching_arns: raise RuntimeError("No available Google Pixel device found.") # Randomly select one device from the full matching set device_arn = random.choice(matching_arns) print("Selected device ARN:", device_arn) # 2) Create remote access session and wait until RUNNING resp = client.create_remote_access_session( projectArn="arn:aws:devicefarm:us-west-2:111122223333:project:12345678-1111-2222-333-456789abcdef", deviceArn=device_arn, appArn="arn:aws:devicefarm:us-west-2:111122223333:upload:12345678-1111-2222-333-456789abcdef/12345678-1111-2222-333-456789abcdef", # optional configuration={ "auxiliaryApps": [ # optional "arn:aws:devicefarm:us-west-2:111122223333:upload:12345678-1111-2222-333-456789abcdef/12345678-1111-2222-333-456789abcde0", "arn:aws:devicefarm:us-west-2:111122223333:upload:12345678-1111-2222-333-456789abcdef/12345678-1111-2222-333-456789abcde1", ] }, ) session_arn = resp["remoteAccessSession"]["arn"] print(f"Created Remote Access Session: {session_arn}") poll_interval = 3 timeout = 600 deadline = time.time() + timeout terminal_states = ["STOPPING", "COMPLETED"] while True: out = client.get_remote_access_session(arn=session_arn) status = out["remoteAccessSession"]["status"] print(f"Current status: {status}") if status == "RUNNING": print(f"Session is ready with status: {status}") break if status in terminal_states: raise RuntimeError(f"Session ended early with status: {status}") if time.time() >= deadline: raise RuntimeError("Timed out waiting for session to be ready.") time.sleep(poll_interval) - Java
-
Nota: queste istruzioni si concentrano solo sulla creazione di una sessione di accesso remoto. Per istruzioni su come caricare un'app da utilizzare durante la sessione, consulta Automatizzare i caricamenti delle app.
Nota: questo esempio utilizza l'SDK AWS per Java v2 ed è compatibile con le versioni JDK 11 e successive.
Questo esempio trova innanzitutto qualsiasi dispositivo Google Pixel disponibile su Device Farm, quindi crea una sessione di accesso remoto con esso e attende l'esecuzione della sessione.
import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.concurrent.ThreadLocalRandom; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.devicefarm.DeviceFarmClient; import software.amazon.awssdk.services.devicefarm.model.CreateRemoteAccessSessionConfiguration; import software.amazon.awssdk.services.devicefarm.model.CreateRemoteAccessSessionRequest; import software.amazon.awssdk.services.devicefarm.model.CreateRemoteAccessSessionResponse; import software.amazon.awssdk.services.devicefarm.model.Device; import software.amazon.awssdk.services.devicefarm.model.DeviceFilter; import software.amazon.awssdk.services.devicefarm.model.DeviceFilterAttribute; import software.amazon.awssdk.services.devicefarm.model.GetRemoteAccessSessionRequest; import software.amazon.awssdk.services.devicefarm.model.GetRemoteAccessSessionResponse; import software.amazon.awssdk.services.devicefarm.model.ListDevicesRequest; import software.amazon.awssdk.services.devicefarm.model.ListDevicesResponse; import software.amazon.awssdk.services.devicefarm.model.RuleOperator; public class CreateRemoteAccessSession { public static void main(String[] args) throws Exception { DeviceFarmClient client = DeviceFarmClient.builder() .region(Region.US_WEST_2) .build(); String projectArn = "arn:aws:devicefarm:us-west-2:111122223333:project:12345678-1111-2222-333-456789abcdef"; String appArn = "arn:aws:devicefarm:us-west-2:111122223333:upload:12345678-1111-2222-333-456789abcdef/12345678-1111-2222-333-456789abcdef"; String aux1 = "arn:aws:devicefarm:us-west-2:111122223333:upload:12345678-1111-2222-333-456789abcdef/12345678-1111-2222-333-456789abcde0"; String aux2 = "arn:aws:devicefarm:us-west-2:111122223333:upload:12345678-1111-2222-333-456789abcdef/12345678-1111-2222-333-456789abcde1"; // 1) Gather all matching devices via paginated ListDevices with filters List<DeviceFilter> filters = Arrays.asList( DeviceFilter.builder() .attribute(DeviceFilterAttribute.MODEL) .operator(RuleOperator.CONTAINS) .values("Pixel") .build(), DeviceFilter.builder() .attribute(DeviceFilterAttribute.AVAILABILITY) .operator(RuleOperator.EQUALS) .values("AVAILABLE") .build() ); List<String> matchingDeviceArns = new ArrayList<>(); String next = null; do { ListDevicesResponse page = client.listDevices( ListDevicesRequest.builder().filters(filters).nextToken(next).build()); for (Device d : page.devices()) { matchingDeviceArns.add(d.arn()); } next = page.nextToken(); } while (next != null); if (matchingDeviceArns.isEmpty()) { throw new RuntimeException("No available Google Pixel device found."); } // Randomly select one device from the full matching set String deviceArn = matchingDeviceArns.get( ThreadLocalRandom.current().nextInt(matchingDeviceArns.size())); System.out.println("Selected device ARN: " + deviceArn); // 2) Create Remote Access session and wait until it is RUNNING CreateRemoteAccessSessionConfiguration cfg = CreateRemoteAccessSessionConfiguration.builder() .auxiliaryApps(Arrays.asList(aux1, aux2)) .build(); CreateRemoteAccessSessionResponse res = client.createRemoteAccessSession( CreateRemoteAccessSessionRequest.builder() .projectArn(projectArn) .deviceArn(deviceArn) .appArn(appArn) // optional .configuration(cfg) // optional .build()); String sessionArn = res.remoteAccessSession().arn(); System.out.println("Created Remote Access Session: " + sessionArn); int pollIntervalMs = 3000; long timeoutMs = 600_000L; long deadline = System.currentTimeMillis() + timeoutMs; while (true) { GetRemoteAccessSessionResponse get = client.getRemoteAccessSession( GetRemoteAccessSessionRequest.builder().arn(sessionArn).build()); String status = get.remoteAccessSession().statusAsString(); System.out.println("Current status: " + status); if ("RUNNING".equals(status)) { System.out.println("Session is ready with status: " + status); break; } if ("STOPPING".equals(status) || "COMPLETED".equals(status)) { throw new RuntimeException("Session ended early with status: " + status); } if (System.currentTimeMillis() >= deadline) { throw new RuntimeException("Timed out waiting for session to be ready."); } Thread.sleep(pollIntervalMs); } } } - JavaScript
-
Nota: queste istruzioni si concentrano solo sulla creazione di una sessione di accesso remoto. Per istruzioni su come caricare un'app da utilizzare durante la sessione, consulta Automatizzare i caricamenti delle app.
Nota: questo esempio utilizza AWS SDK per JavaScript v3.
Questo esempio trova innanzitutto qualsiasi dispositivo Google Pixel disponibile su Device Farm, quindi crea una sessione di accesso remoto con esso e attende l'esecuzione della sessione.
import { DeviceFarmClient, ListDevicesCommand, CreateRemoteAccessSessionCommand, GetRemoteAccessSessionCommand, } from "@aws-sdk/client-device-farm"; const client = new DeviceFarmClient({ region: "us-west-2" }); // 1) Gather all matching devices via paginated ListDevices with filters const filters = [ { attribute: "MODEL", operator: "CONTAINS", values: ["Pixel"] }, { attribute: "AVAILABILITY", operator: "EQUALS", values: ["AVAILABLE"] }, ]; let nextToken; const matching = []; while (true) { const page = await client.send(new ListDevicesCommand({ filters, nextToken })); for (const d of page.devices ?? []) { matching.push(d.arn); } nextToken = page.nextToken; if (!nextToken) break; } if (matching.length === 0) { throw new Error("No available Google Pixel device found."); } // Randomly select one device from the full matching set const deviceArn = matching[Math.floor(Math.random() * matching.length)]; console.log("Selected device ARN:", deviceArn); // 2) Create remote access session and wait until RUNNING const out = await client.send(new CreateRemoteAccessSessionCommand({ projectArn: "arn:aws:devicefarm:us-west-2:111122223333:project:12345678-1111-2222-333-456789abcdef", deviceArn, appArn: "arn:aws:devicefarm:us-west-2:111122223333:upload:12345678-1111-2222-333-456789abcdef/12345678-1111-2222-333-456789abcdef", // optional configuration: { auxiliaryApps: [ // optional "arn:aws:devicefarm:us-west-2:111122223333:upload:12345678-1111-2222-333-456789abcdef/12345678-1111-2222-333-456789abcde0", "arn:aws:devicefarm:us-west-2:111122223333:upload:12345678-1111-2222-333-456789abcdef/12345678-1111-2222-333-456789abcde1", ], }, })); const sessionArn = out.remoteAccessSession?.arn; console.log("Created Remote Access Session:", sessionArn); const pollIntervalMs = 3000; const timeoutMs = 600000; const deadline = Date.now() + timeoutMs; while (true) { const get = await client.send(new GetRemoteAccessSessionCommand({ arn: sessionArn })); const status = get.remoteAccessSession?.status; console.log("Current status:", status); if (status === "RUNNING") { console.log("Session is ready with status:", status); break; } if (status === "STOPPING" || status === "COMPLETED") { throw new Error(`Session ended early with status: ${status}`); } if (Date.now() >= deadline) { throw new Error("Timed out waiting for session to be ready."); } await new Promise((r) => setTimeout(r, pollIntervalMs)); } - C#
-
Nota: queste istruzioni si concentrano solo sulla creazione di una sessione di accesso remoto. Per istruzioni su come caricare un'app da utilizzare durante la sessione, consulta Automatizzare i caricamenti delle app.
Questo esempio trova innanzitutto qualsiasi dispositivo Google Pixel disponibile su Device Farm, quindi crea una sessione di accesso remoto con esso e attende l'esecuzione della sessione.
using System; using System.Collections.Generic; using System.Threading.Tasks; using Amazon; using Amazon.DeviceFarm; using Amazon.DeviceFarm.Model; class Program { static async Task Main() { var client = new AmazonDeviceFarmClient(RegionEndpoint.USWest2); // 1) Gather all matching devices via paginated ListDevices with filters var filters = new List<DeviceFilter> { new DeviceFilter { Attribute = DeviceAttribute.MODEL, Operator = RuleOperator.CONTAINS, Values = new List<string>{ "Pixel" } }, new DeviceFilter { Attribute = DeviceAttribute.AVAILABILITY, Operator = RuleOperator.EQUALS, Values = new List<string>{ "AVAILABLE" } }, }; var matchingArns = new List<string>(); string nextToken = null; do { var list = await client.ListDevicesAsync(new ListDevicesRequest { Filters = filters, NextToken = nextToken }); foreach (var d in list.Devices) matchingArns.Add(d.Arn); nextToken = list.NextToken; } while (nextToken != null); if (matchingArns.Count == 0) throw new Exception("No available Google Pixel device found."); // Randomly select one device from the full matching set var rnd = new Random(); var deviceArn = matchingArns[rnd.Next(matchingArns.Count)]; Console.WriteLine($"Selected device ARN: {deviceArn}"); // 2) Create remote access session and wait until RUNNING var request = new CreateRemoteAccessSessionRequest { ProjectArn = "arn:aws:devicefarm:us-west-2:111122223333:project:12345678-1111-2222-333-456789abcdef", DeviceArn = deviceArn, AppArn = "arn:aws:devicefarm:us-west-2:111122223333:upload:12345678-1111-2222-333-456789abcdef/12345678-1111-2222-333-456789abcdef", // optional Configuration = new CreateRemoteAccessSessionConfiguration { AuxiliaryApps = new List<string> { "arn:aws:devicefarm:us-west-2:111122223333:upload:12345678-1111-2222-333-456789abcdef/12345678-1111-2222-333-456789abcde0", "arn:aws:devicefarm:us-west-2:111122223333:upload:12345678-1111-2222-333-456789abcdef/12345678-1111-2222-333-456789abcde1" } } }; request.Configuration.AuxiliaryApps.RemoveAll(string.IsNullOrWhiteSpace); var response = await client.CreateRemoteAccessSessionAsync(request); var sessionArn = response.RemoteAccessSession.Arn; Console.WriteLine($"Created Remote Access Session: {sessionArn}"); var pollIntervalMs = 3000; var timeoutMs = 600000; var deadline = DateTime.UtcNow.AddMilliseconds(timeoutMs); while (true) { var get = await client.GetRemoteAccessSessionAsync(new GetRemoteAccessSessionRequest { Arn = sessionArn }); var status = get.RemoteAccessSession.Status.Value; Console.WriteLine($"Current status: {status}"); if (status == "RUNNING") { Console.WriteLine($"Session is ready with status: {status}"); break; } if (status == "STOPPING" || status == "COMPLETED") { throw new Exception($"Session ended early with status: {status}"); } if (DateTime.UtcNow >= deadline) { throw new TimeoutException("Timed out waiting for session to be ready."); } await Task.Delay(pollIntervalMs); } } } - Ruby
-
Nota: queste istruzioni si concentrano solo sulla creazione di una sessione di accesso remoto. Per istruzioni su come caricare un'app da utilizzare durante la sessione, consulta Automatizzare i caricamenti delle app.
Questo esempio trova innanzitutto qualsiasi dispositivo Google Pixel disponibile su Device Farm, quindi crea una sessione di accesso remoto con esso e attende l'esecuzione della sessione.
require 'aws-sdk-devicefarm' client = Aws::DeviceFarm::Client.new(region: 'us-west-2') # 1) Gather all matching devices via paginated ListDevices with filters filters = [ { attribute: 'MODEL', operator: 'CONTAINS', values: ['Pixel'] }, { attribute: 'AVAILABILITY', operator: 'EQUALS', values: ['AVAILABLE'] }, ] matching_arns = [] next_token = nil loop do resp = client.list_devices(filters: filters, next_token: next_token) resp.devices&.each { |d| matching_arns << d.arn } next_token = resp.next_token break unless next_token end abort "No available Google Pixel device found." if matching_arns.empty? # Randomly select one device from the full matching set device_arn = matching_arns.sample puts "Selected device ARN: #{device_arn}" # 2) Create remote access session and wait until RUNNING resp = client.create_remote_access_session( project_arn: "arn:aws:devicefarm:us-west-2:111122223333:project:12345678-1111-2222-333-456789abcdef", device_arn: device_arn, app_arn: "arn:aws:devicefarm:us-west-2:111122223333:upload:12345678-1111-2222-333-456789abcdef/12345678-1111-2222-333-456789abcdef", # optional configuration: { auxiliary_apps: [ # optional "arn:aws:devicefarm:us-west-2:111122223333:upload:12345678-1111-2222-333-456789abcdef/12345678-1111-2222-333-456789abcde0", "arn:aws:devicefarm:us-west-2:111122223333:upload:12345678-1111-2222-333-456789abcdef/12345678-1111-2222-333-456789abcde1" ].compact } ) session_arn = resp.remote_access_session.arn puts "Created Remote Access Session: #{session_arn}" poll_interval = 3 timeout = 600 deadline = Time.now + timeout terminal = %w[STOPPING COMPLETED] loop do get = client.get_remote_access_session(arn: session_arn) status = get.remote_access_session.status puts "Current status: #{status}" if status == 'RUNNING' puts "Session is ready with status: #{status}" break end abort "Session ended early with status: #{status}" if terminal.include?(status) abort "Timed out waiting for session to be ready." if Time.now >= deadline sleep poll_interval end
Fasi successive
Device Farm avvia la sessione non appena il dispositivo e l'infrastruttura richiesti sono disponibili, in genere entro pochi minuti. La finestra di dialogo Device Requested viene visualizzata fino all'avvio della sessione. Per annullare la richiesta di sessione, selezionare Cancel request (Annulla richiesta).
Se il dispositivo selezionato non è disponibile o occupato, lo stato della sessione viene visualizzato come Dispositivo in sospeso, a indicare che potrebbe essere necessario attendere qualche istante prima che il dispositivo sia disponibile per il test.
Se il tuo account ha raggiunto il limite di contemporaneità per i dispositivi pubblici con o senza contabilizzazione, lo stato della sessione viene visualizzato come In sospeso. Per quanto riguarda gli slot per dispositivi illimitati, puoi aumentare la concorrenza acquistando più slot per dispositivi. Per pay-as-you-go i dispositivi a consumo, contatta AWS tramite un ticket di supporto per richiedere un aumento della quota di servizio.
Quando inizia la configurazione della sessione, mostra prima lo stato In corso, quindi lo stato di Connessione mentre il browser Web locale tenta di aprire una connessione remota al dispositivo.
Dopo che una sessione viene avviata, se chiudi il browser o la scheda del browser senza arrestare la sessione o se la connessione tra il browser e Internet viene persa, la sessione rimarrà attiva per cinque minuti da quel momento. Dopodiché, Device Farm termina la sessione. Il tuo account verrà addebitato per i tempi di inattività.
Dopo l'inizio della sessione, puoi interagire con il dispositivo nel browser web o testare il dispositivo utilizzando Appium.