Spouštění testů uživatelského rozhraní pomocí rozhraní REST API služby App Center
Důležité
31. března 2025 je naplánované vyřazení sady Visual Studio App Center. I když můžete Visual Studio App Center dál používat, dokud nebude plně vyřazený, existuje několik doporučených alternativ, na které můžete zvážit migraci.
Přečtěte si další informace o časových osách podpory a alternativách.
Tento příklad ukazuje, jak nahrát balíček aplikace, testovací binární soubory a testy uživatelského rozhraní front pomocí našeho rozhraní API.
- Pomocí metody POST pro vytvoření testovacího spuštění obdržíte ID testovacího spuštění, které použijete později pro hlavičku odpovědi.
Ukázkový požadavek https://api.appcenter.ms/v0.1/apps/MSKASANI/DroidAppSampleXamarin/test_runs
- Vytvořte hodnoty hash souborů pro každý soubor, který chcete nahrát do testu App Center.
Hodnoty hash souboru můžete získat spuštěním příkazu shasum
. Tento nástroj je ve výchozím nastavení k dispozici na počítačích Se systémem Mac/Linux. Pro Windows zvažte instalaci Git Bash a místo toho ho použijte.
Příklad
ankasani@AK--PC MINGW64 ~/source/repos/AppXamarin/sampleapp-xamarin-master/UITest/bin/Debug/testdlls (master)
$ shasum nunit.framework.dll
a2d0dbc920fb3790d4d625e5c47be042ca32c051 *nunit.framework.dll
$ shasum Xamarin.UITest.dll
c1f7342d05a9d95580a507156207e6f9283a2c8d *Xamarin.UITest.dll
$ shasum UITest.dll
542153902bc889d0d85a83b005854b5ebd9864f1 *UITest.dll
$ shasum com.mobilecenter.sampleappxamarin.apk
3f3677f8db9ba7c07ac77d4f01f912e518a6ca16 *com.mobilecenter.sampleappxamarin.apk
- Vytvořte úložiště pro soubory pomocí hodnoty POST a hash vypočítané z předchozího kroku.
Ukázkový požadavekhttps://api.appcenter.ms/v0.1/apps/MSKASANI/DroidAppSampleXamarin/test_runs/fb0cc373-aa4a-455f-b083-4fc1afa87f2e/hashes/batch
file_type – soubor app-file pro apk\ipa a test-file pro testovací sestavení/testovací související soubory.
kontrolní součet – hodnoty hash z kroku 2
relative_path – můžete definovat název souboru s příponou, nemusíte zadávat úplnou cestu.
Text JSON vypadá takto:
[
{
"file_type":"app-file",
"checksum":"3f3677f8db9ba7c07ac77d4f01f912e518a6ca16",
"relative_path":"com.mobilecenter.sampleappxamarin.apk"
},
{
"file_type":"test-file",
"checksum":"a2d0dbc920fb3790d4d625e5c47be042ca32c051",
"relative_path":"nunit.framework.dll"
},
{
"file_type":"test-file",
"checksum":"c1f7342d05a9d95580a507156207e6f9283a2c8d",
"relative_path":"Xamarin.UITest.dll"
},
{
"file_type":"test-file",
"checksum":"542153902bc889d0d85a83b005854b5ebd9864f1",
"relative_path":"UITest.dll"
}
]
Odpověď vypadá takto:
[
{
"fileType": "app-file",
"checksum": "3f3677f8db9ba7c07ac77d4f01f912e518a6ca16",
"relativePath": "com.mobilecenter.sampleappxamarin.apk",
"uploadStatus":
{
"statusCode": 412,
"location": "https://testcloud.xamarin.com/v0.1/direct_uploads?token=ZXlKMGVYQWlPaUpLVjFRaUxDSmhiR2NpT2lKU1V6STFOaUo5LmV5SjBaWE4w%0AWDNKMWJsOXBaQ0k2SWpjNU5EVmpNbUZtTFRFeFpXTXROR1ptWVMwNU1XSTBM%0AVFExTUdJd09EVTNNbU5sT1NJc0ltVjRjQ0k2TVRVek16Z3dOVFEzTUgwLlJO%0AaTQ3VTNPYTB5YWswMVRVdTV6Q0dfWFhwV25QUWJDdkJaNmVCRWRmOENuQ19U%0AbmdpRGI4MU0yYk1lTlZNY1VCVmRWLXlkRjh4dElLaU1yNFdtQUFhOFdoay02%0AOVVjb29rYkNTYUU2eUlzamowZlZPZVJhR2lFdGpvLWJHTFJLcXNGY0ZTeUdR%0ARTQzQUZ1TFlyTWlCRnowMElpd3ZudjYzZk9wQnRGaXhNa2lNNjhUTWxxVnNa%0AOFl3TFlTeU5KSWFvYVJCM0ZZTUkwajNYOWdVb3VJclVjNnpqcGNkYkxCcWJ0%0AVUpyN0ZFaTdJeWY4UG9rMXZxTzRlUExiaEszTmItTmd0Q2JuckZzS2x6Z3Za%0AaktUWHZZb2oya0FGWXZHaVZ4LVhfNVhUcGdiVnE1Z2dxVEtIdjRaUGFuaGR4%0AdnFvZ2YxRVYwWUJYaG40YUJLM3BnUVBodw%3D%3D%0A"
}
},
{
"fileType": "test-file",
"checksum": "a2d0dbc920fb3790d4d625e5c47be042ca32c051",
"relativePath": "nunit.framework.dll",
"uploadStatus":
{
"statusCode": 412,
"location": "https://testcloud.xamarin.com/v0.1/direct_uploads?token=ZXlKMGVYQWlPaUpLVjFRaUxDSmhiR2NpT2lKU1V6STFOaUo5LmV5SjBaWE4w%0AWDNKMWJsOXBaQ0k2SWpjNU5EVmpNbUZtTFRFeFpXTXROR1ptWVMwNU1XSTBM%0AVFExTUdJd09EVTNNbU5sT1NJc0ltVjRjQ0k2TVRVek16Z3dOVFEzTUgwLlJO%0AaTQ3VTNPYTB5YWswMVRVdTV6Q0dfWFhwV25QUWJDdkJaNmVCRWRmOENuQ19U%0AbmdpRGI4MU0yYk1lTlZNY1VCVmRWLXlkRjh4dElLaU1yNFdtQUFhOFdoay02%0AOVVjb29rYkNTYUU2eUlzamowZlZPZVJhR2lFdGpvLWJHTFJLcXNGY0ZTeUdR%0ARTQzQUZ1TFlyTWlCRnowMElpd3ZudjYzZk9wQnRGaXhNa2lNNjhUTWxxVnNa%0AOFl3TFlTeU5KSWFvYVJCM0ZZTUkwajNYOWdVb3VJclVjNnpqcGNkYkxCcWJ0%0AVUpyN0ZFaTdJeWY4UG9rMXZxTzRlUExiaEszTmItTmd0Q2JuckZzS2x6Z3Za%0AaktUWHZZb2oya0FGWXZHaVZ4LVhfNVhUcGdiVnE1Z2dxVEtIdjRaUGFuaGR4%0AdnFvZ2YxRVYwWUJYaG40YUJLM3BnUVBodw%3D%3D%0A"
}
},
{
"fileType": "test-file",
"checksum": "c1f7342d05a9d95580a507156207e6f9283a2c8d",
"relativePath": "Xamarin.UITest.dll",
"uploadStatus":
{
"statusCode": 412,
"location": "https://testcloud.xamarin.com/v0.1/direct_uploads?token=ZXlKMGVYQWlPaUpLVjFRaUxDSmhiR2NpT2lKU1V6STFOaUo5LmV5SjBaWE4w%0AWDNKMWJsOXBaQ0k2SWpjNU5EVmpNbUZtTFRFeFpXTXROR1ptWVMwNU1XSTBM%0AVFExTUdJd09EVTNNbU5sT1NJc0ltVjRjQ0k2TVRVek16Z3dOVFEzTUgwLlJO%0AaTQ3VTNPYTB5YWswMVRVdTV6Q0dfWFhwV25QUWJDdkJaNmVCRWRmOENuQ19U%0AbmdpRGI4MU0yYk1lTlZNY1VCVmRWLXlkRjh4dElLaU1yNFdtQUFhOFdoay02%0AOVVjb29rYkNTYUU2eUlzamowZlZPZVJhR2lFdGpvLWJHTFJLcXNGY0ZTeUdR%0ARTQzQUZ1TFlyTWlCRnowMElpd3ZudjYzZk9wQnRGaXhNa2lNNjhUTWxxVnNa%0AOFl3TFlTeU5KSWFvYVJCM0ZZTUkwajNYOWdVb3VJclVjNnpqcGNkYkxCcWJ0%0AVUpyN0ZFaTdJeWY4UG9rMXZxTzRlUExiaEszTmItTmd0Q2JuckZzS2x6Z3Za%0AaktUWHZZb2oya0FGWXZHaVZ4LVhfNVhUcGdiVnE1Z2dxVEtIdjRaUGFuaGR4%0AdnFvZ2YxRVYwWUJYaG40YUJLM3BnUVBodw%3D%3D%0A"
}
},
{
"fileType": "test-file",
"checksum": "542153902bc889d0d85a83b005854b5ebd9864f1",
"relativePath": "UITest.dll",
"uploadStatus":
{
"statusCode": 412,
"location": "https://testcloud.xamarin.com/v0.1/direct_uploads?token=ZXlKMGVYQWlPaUpLVjFRaUxDSmhiR2NpT2lKU1V6STFOaUo5LmV5SjBaWE4w%0AWDNKMWJsOXBaQ0k2SWpjNU5EVmpNbUZtTFRFeFpXTXROR1ptWVMwNU1XSTBM%0AVFExTUdJd09EVTNNbU5sT1NJc0ltVjRjQ0k2TVRVek16Z3dOVFEzTUgwLlJO%0AaTQ3VTNPYTB5YWswMVRVdTV6Q0dfWFhwV25QUWJDdkJaNmVCRWRmOENuQ19U%0AbmdpRGI4MU0yYk1lTlZNY1VCVmRWLXlkRjh4dElLaU1yNFdtQUFhOFdoay02%0AOVVjb29rYkNTYUU2eUlzamowZlZPZVJhR2lFdGpvLWJHTFJLcXNGY0ZTeUdR%0ARTQzQUZ1TFlyTWlCRnowMElpd3ZudjYzZk9wQnRGaXhNa2lNNjhUTWxxVnNa%0AOFl3TFlTeU5KSWFvYVJCM0ZZTUkwajNYOWdVb3VJclVjNnpqcGNkYkxCcWJ0%0AVUpyN0ZFaTdJeWY4UG9rMXZxTzRlUExiaEszTmItTmd0Q2JuckZzS2x6Z3Za%0AaktUWHZZb2oya0FGWXZHaVZ4LVhfNVhUcGdiVnE1Z2dxVEtIdjRaUGFuaGR4%0AdnFvZ2YxRVYwWUJYaG40YUJLM3BnUVBodw%3D%3D%0A"
}
}
]
Teď potřebujeme nahrát skutečné soubory. V předchozím textu odpovědi identifikujte
location
adresu URL souborů, které nahráváte.- V záhlavích je potřeba předat typ obsahu: vícedílná data nebo data formuláře.
- V textu musíte použít typ Body_Form s hodnotami:
relative_path
afile_type
: z předchozího textu odpovědifile
: Cesta k skutečnému souboru
Jste na správné cestě, pokud se zobrazí 201 Created
odpověď podobná níže.
(Jsme v polovině cesty)
Opakujte předchozí krok pro zbývající soubory, které chcete nahrát.
Teď jsme připraveni provést test. K tomu potřebujeme device_slug.
Poznámka: Nejprve byste ve své organizaci měli vytvořit sady zařízení nebo můžete k vytváření sad zařízení použít rozhraní REST API.
Pak můžete pomocí metody GET získat seznam sad zařízení.
Ukázkový požadavek: https://api.appcenter.ms/v0.1/apps/MSKASANI/DroidAppSampleXamarin/owner/device_sets
Odpovídající text odpovědi:
{
"id": "00917fb6-f30f-4d36-bd53-f900a94efe9f",
"name": "UI Test",
"slug": "ui-test",
"osVersionCount": 1,
"manufacturerCount": 1,
"owner":
{
"type": "organization",
"id": "5dd75115-3832-4f10-9cfe-5ac8cc8a51a5",
"displayName": "MSKASANI",
"name": "MSKASANI"
},
"deviceConfigurations":
{
{
"id": "717cfc38-4817-41fc-8a8e-06beef4f73b2",
"image":
{
"thumb": "https://testcloud-prod-system-files.s3-eu-west-1.amazonaws.com/system_files/0dee6ee7-6839-4e4e-ad0b-333e3952f75c?response-cache-control=max-age%3D157788000&AWSAccessKeyId=AKIAI4UZT4FCOF2OTJYQ&Signature=r9EEm/x0YAA4NhRJ%2BhVSQwGtBbI%3D&Expires=1691079085"
},
"os": "8.1.0",
"osName": "Android 8.1.0",
"model":
{
"name": "Google Pixel 2 XL",
"manufacturer": "Google",
"releaseDate": "October 2017",
"formFactor": "phone"
}
}
}
}
- Teď jsme připraveni k aktivaci testu použít rozhraní API pro spuštění testu. Níže uvedený text požadavku se vytvoří pro architekturu Xamarin.UITest. Pokud používáte jiné architektury, další podrobnosti najdete na konci dokumentu.
Ukázkový text požadavku JSON:
{
"test_framework":"ui_test",
"device_selection":"MSKASANI/ui-test",
"locale":"en_US",
"test_series":"apimain",
"test_parameters":
{
"tests":
{
"method":
{
"UITest.dll":
[
"UITest.Tests(Android).AppLaunches",
"UITest.Tests(iOS).AppLaunches"
]
},
"fixture":
{
"UITest.dll":
[
"UITest.Tests(Android)",
"UITest.Tests(iOS)"
]
}
}
}
}
Odpovídající text odpovědi:
{
"accepted_devices":["Google Pixel 2 XL (8.1.0)"],
"rejected_devices":[]
}
Pokud teď přejdete na stránku Test vaší aplikace, uvidíte...
Gratulujeme! :)
PS: Pro ostatní testovací architektury, pokud chcete vědět, jak json vypadá (například Appium test)
Spusťte příkaz Test ručně s přepínačem --debug
.
appcenter test run appium --app "MSKASANI/Appium" --devices "MSKASANI/my" --app-path C:\VSAC\AllTest\AppCenter-Test-Samples-main\Appium\Android\swiftnote.apk --test-series "main" --locale "en_US" --build-dir C:\VSAC\AllTest\AppCenter-Test-Samples-main\Appium\Android\Mavenex\target\upload --debug
Po dokončení testu si můžete prohlédnout výstup příkazu a podívat se, jak vypadá text požadavku:
BONUS! Tímto způsobem můžete pomocí výstupu rozhraní příkazového řádku zjistit, jak naše příkazy zařadí testy do fronty pomocí našeho rozhraní API.