Przeczytaj w języku angielskim

Udostępnij za pośrednictwem


Uruchamianie testów interfejsu użytkownika przy użyciu interfejsu API REST usługi App Center

Ważne

Program Visual Studio App Center ma zostać wycofany 31 marca 2025 r. Mimo że można nadal używać programu Visual Studio App Center do momentu jego pełnego wycofania, istnieje kilka zalecanych alternatyw, do których można rozważyć migrację.

Dowiedz się więcej o osiach czasu pomocy technicznej i alternatywach.

W tym przykładzie pokazano, jak przekazać pakiet aplikacji, przetestować pliki binarne i testy interfejsu użytkownika kolejki przy użyciu naszego interfejsu API.

Kroki

  1. Użyj metody create test run POST, aby otrzymać identyfikator przebiegu testu, który będzie używany później dla nagłówka odpowiedzi.

Przykładowe żądanie https://api.appcenter.ms/v0.1/apps/MSKASANI/DroidAppSampleXamarin/test_runsZrzut ekranu przedstawiający użycie interfejsu API

  1. Utwórz skróty plików dla każdego pliku, który chcesz przekazać do usługi App Center Test.

Skróty plików można uzyskać, uruchamiając polecenie shasum. To narzędzie jest domyślnie dostępne na komputerach Mac/Linux. W przypadku systemu Windows rozważ zainstalowanie powłoki Git Bash i użycie jej zamiast tego.

Przykład

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
  1. Utwórz magazyn dla plików przy użyciu wartości POST i skrótów obliczonych na podstawie poprzedniego kroku.

Przykładowe żądaniehttps://api.appcenter.ms/v0.1/apps/MSKASANI/DroidAppSampleXamarin/test_runs/fb0cc373-aa4a-455f-b083-4fc1afa87f2e/hashes/batch

  • file_type — plik-aplikacji dla plików apk\ipa i test-file na potrzeby zestawów testowych/plików powiązanych z testem.

  • suma kontrolna — wartości skrótu z kroku 2

  • relative_path — możesz zdefiniować nazwę pliku z rozszerzeniem, nie trzeba określać pełnej ścieżki.

Treść JSON wygląda następująco:

[
    {
     "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"
    }
]

Zrzut ekranu przedstawiający kod json przekazywania interfejsu API testów

Odpowiedź wygląda następująco:

[
    {
     "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"
        }
    }
]
  1. Teraz musimy przekazać rzeczywiste pliki. Z poprzedniej treści odpowiedzi zidentyfikuj location adres URL przekazywanych plików.

    • W nagłówkach należy przekazać typ zawartości: multipart/form-data
    • W treści należy użyć typu Body_Form z wartościami:
      • relative_path i file_type: z poprzedniej treści odpowiedzi
      • file: Ścieżka do rzeczywistego pliku

Jesteś we właściwej ścieżce, jeśli otrzymasz 201 Created odpowiedź podobną do poniższej.

Zrzut ekranu przedstawiający tworzenie przebiegu testu przez interfejs API

(Jesteśmy tam w połowie)

  1. Powtórz poprzedni krok dla pozostałych plików, które chcesz przekazać.

  2. Teraz możemy wykonać test. W tym celu potrzebujemy device_slug.

Uwaga: najpierw należy utworzyć zestawy urządzeń w organizacji lub użyć interfejsu API REST do tworzenia zestawów urządzeń.

Następnie możesz użyć metody GET, aby uzyskać listę zestawów urządzeń.

Przykładowe żądanie: https://api.appcenter.ms/v0.1/apps/MSKASANI/DroidAppSampleXamarin/owner/device_sets

Zrzut ekranu przedstawiający wywołanie interfejsu API służące do wyświetlania listy zestawów urządzeń

Odpowiadająca treść odpowiedzi:

{
     "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"
            }
        }
    }
}
  1. Teraz możemy użyć interfejsu API uruchamiania testu, aby wyzwolić test! Treść żądania poniżej jest tworzona dla platformy Xamarin.UITest Framework. Jeśli używasz innych platform, zapoznaj się z końcem dokumentu, aby uzyskać więcej informacji!

Przykładowa treść żądania 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)"
                    ]
                }
            }
        }
}

Odpowiadająca treść odpowiedzi:

{
    "accepted_devices":["Google Pixel 2 XL (8.1.0)"],
    "rejected_devices":[]
}

Zrzut ekranu przedstawiający wywołanie interfejsu API do wyświetlania listy urządzeń

Jeśli teraz przejdziesz do strony Test aplikacji, zobaczysz...

Zrzut ekranu przedstawiający przebieg testu w toku

Gratulacje! :)

PS: W przypadku innych platform testowych, jeśli chcesz wiedzieć, jak wygląda kod JSON (na przykład test Appium)

Uruchom polecenie Test ręcznie za pomocą --debug przełącznika.

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 zakończeniu testu możesz sprawdzić dane wyjściowe polecenia, aby zobaczyć, jak wygląda treść żądania:

Zrzut ekranu przedstawiający dane wyjściowe terminalu interfejsu API

PREMIA! W ten sposób możesz użyć danych wyjściowych interfejsu wiersza polecenia, aby zobaczyć, jak nasze polecenia kolejkuje testy przy użyciu naszego interfejsu API!