Testare ed eseguire il debug di un'applicazione personalizzata test-debug-custom-worker

Eseguire unit test per un'applicazione personalizzata test-custom-worker

Installa Docker Desktop nel computer. Per testare un processo di lavoro personalizzato, eseguire il comando seguente nella radice dell'applicazione:

$ aio app test

Questo comando esegue un framework di unit test personalizzato per le azioni dell’applicazione Asset Compute nel progetto come descritto di seguito. È collegato tramite una configurazione nel file package.json. È inoltre possibile disporre di unit test JavaScript, ad esempio Jest. aio app test esegue entrambi.

Il plug-in aio-cli-plugin-asset-compute è incorporato come una dipendenza di sviluppo nell'app dell'applicazione personalizzata, pertanto non è necessario installarlo nei sistemi di build/test.

Framework di test delle unità applicative unit-test-framework

Il framework di unit test di Asset Compute consente di testare le applicazioni senza scrivere codice. Si basa sul principio di origine per il rendering del file delle applicazioni. È necessario configurare una determinata struttura di file e cartelle per definire i casi di test con file di origine di test, parametri facoltativi, rappresentazioni previste e script di convalida personalizzati. Per impostazione predefinita, le rappresentazioni vengono confrontate per l'uguaglianza dei byte. Inoltre, i servizi HTTP esterni possono essere facilmente presi in giro utilizzando semplici file JSON.

Aggiungi test add-tests

I test sono previsti all'interno della cartella test al livello principale del progetto. I test case per ogni applicazione devono trovarsi nel percorso test/asset-compute/<worker-name>, con una cartella per ogni test case:

action/
manifest.yml
package.json
...
test/
  asset-compute/
    <worker-name>/
        <testcase1>/
            file.jpg
            params.json
            rendition.png
        <testcase2>/
            file.jpg
            params.json
            rendition.gif
            validate
        <testcase3>/
            file.jpg
            params.json
            rendition.png
            mock-adobe.com.json
            mock-console.adobe.io.json

Guarda esempio di applicazioni personalizzate per alcuni esempi. Di seguito è riportato un riferimento dettagliato.

Output di prova test-output

La directory build nella directory principale dell'app Adobe Developer App Builder contiene i risultati dettagliati dei test e i registri dell'applicazione personalizzata. Questi dettagli vengono visualizzati anche nell'output del comando aio app test.

Mascherare i servizi esterni mock-external-services

È possibile simulare chiamate di servizio esterne all'interno delle azioni creando mock-<HOST_NAME>.json file per gli scenari di test. HOST_NAME è l'host specifico che si intende imitare. Un esempio di caso d’uso è un’applicazione che effettua una chiamata separata a S3. La nuova struttura di test sarà simile alla seguente:

test/
  asset-compute/
    <worker-name>/
      <testcase3>/
        file.jpg
        params.json
        rendition.png
        mock-<HOST_NAME1>.json
        mock-<HOST_NAME2>.json

Il file fittizio è una risposta HTTP in formato JSON. Per ulteriori informazioni, consulta questa documentazione. Se ci sono più nomi host da simulare, definire più file mock-<mocked-host>.json. Di seguito è riportato un esempio di file fittizio per google.com denominato mock-google.com.json:

[{
    "httpRequest": {
        "path": "/images/hello.txt"
        "method": "GET"
    },
    "httpResponse": {
        "statusCode": 200,
        "body": {
          "message": "hello world!"
        }
    }
}]

L'esempio worker-animal-pictures contiene un file fittizio per il servizio Wikimedia con cui interagisce.

Condivisione di file tra test case share-files-across-test-cases

Adobe consiglia di utilizzare i symlink relativi se si condividono file.*, params.json o validate script in più test. Sono supportati con Git. Assicurati di assegnare ai file condivisi un nome univoco, in quanto potrebbero essere presenti file diversi. Nell’esempio seguente i test si combinano e corrispondono a pochi file condivisi e ai loro:

tests/
    file-one.jpg
    params-resize.json
    params-crop.json
    validate-image-compare

    jpg-png-resize/
        file.jpg    - symlink: ../file-one.jpg
        params.json - symlink: ../params-resize.json
        rendition.png
        validate    - symlink: ../validate-image-compare

    jpg2-png-crop/
        file.jpg
        params.json - symlink: ../params-crop.json
        rendition.gif
        validate    - symlink: ../validate-image-compare

    jpg-gif-crop/
        file.jpg    - symlink: ../file-one.jpg
        params.json - symlink: ../params-crop.json
        rendition.gif
        validate

Test degli errori previsti test-unexpected-errors

I casi di test degli errori non devono contenere un file rendition.* previsto e devono definire il file errorReason previsto all'interno del file params.json.

NOTE
Se un test case non contiene un file rendition.* previsto e non definisce il errorReason previsto all'interno del file params.json, si presume che si tratti di un errore con qualsiasi errorReason.

Struttura del test case di errore:

<error_test_case>/
    file.jpg
    params.json

File di parametri con motivo errore:

{
    "errorReason": "SourceUnsupported",
    // ... other params
}

Visualizza un elenco completo e una descrizione dei motivi di errore di Asset Compute.

Eseguire il debug di un'applicazione personalizzata debug-custom-worker

Nei passaggi seguenti viene illustrato come eseguire il debug dell'applicazione personalizzata utilizzando Visual Studio Code. Consente di visualizzare registri live, punti di interruzione di hit e codice step-through, nonché il ricaricamento in tempo reale delle modifiche al codice locale a ogni attivazione.

aio preconfigurato automatizza molti di questi passaggi. Vai alla sezione Debug dell'applicazione nella documentazione di Adobe Developer App Builder. Per il momento, i passaggi seguenti includono una soluzione alternativa.

  1. Installa la versione più recente di wskdebug da GitHub e la ngrok facoltativa.

    code language-shell
    npm install -g @openwhisk/wskdebug
    npm install -g ngrok --unsafe-perm=true
    
  2. Aggiungi delle impostazioni utente al file JSON. Continua a utilizzare il debugger del codice di Visual Studio precedente. Il nuovo ha alcuni problemi con wskdebug: "debug.javascript.usePreview": false.

  3. Chiudere tutte le istanze di app aperte tramite aio app run.

  4. Distribuire il codice più recente utilizzando aio app deploy.

  5. Eseguire solo Asset Compute Devtool utilizzando aio asset-compute devtool. Tienilo aperto.

  6. Nell'editor di codice di Visual Studio aggiungere la seguente configurazione di debug a launch.json:

    code language-json
    {
      "type": "node",
      "request": "launch",
      "name": "wskdebug worker",
      "runtimeExecutable": "wskdebug",
      "args": [
        "PROJECT-0.0.1/__secured_worker",           // Replace this with your ACTION NAME
        "${workspaceFolder}/actions/worker/index.js",
        "-l",
        "--ngrok"
      ],
      "localRoot": "${workspaceFolder}",
      "remoteRoot": "/code",
      "outputCapture": "std",
      "timeout": 30000
    }
    

    Recupera ACTION NAME dall'output di aio app deploy.

  7. Selezionare wskdebug worker dalla configurazione di esecuzione/debug e premere l'icona di riproduzione. Attendere che venga avviato finché non viene visualizzato Pronto per le attivazioni nella finestra Console di debug.

  8. Fare clic su esegui in Devtool. È possibile visualizzare le azioni in esecuzione nell'editor di codice di Visual Studio e i registri iniziano a essere visualizzati.

  9. Imposta un punto di interruzione nel codice. Quindi esegui di nuovo e dovrebbe colpire.

Eventuali modifiche al codice vengono caricate in tempo reale e diventano effettive non appena si verifica l’attivazione successiva.

NOTE
Per ogni richiesta nelle applicazioni personalizzate sono presenti due attivazioni. La prima richiesta è un’azione web che si richiama in modo asincrono nel codice SDK. La seconda attivazione è quella che colpisce il codice.
recommendation-more-help
b027be24-3772-44c0-a56d-a4ba23dcb50b