Тестирование и отладка HTTP-надстроек Google Workspace

Разработчику дополнений для Google Workspace может потребоваться отладка кода для тестирования изменений или устранения сложных проблем. Отладка дополнений для Google Workspace может осуществляться различными способами в зависимости от архитектуры вашего приложения, его функций, способа развертывания и ваших предпочтений.

На этой странице объясняется, как отлаживать HTTP-дополнение Google Workspace с помощью ngrok — унифицированной платформы для входящего трафика, которую можно использовать для тестирования локальных сред разработки. В этом руководстве вы будете тестировать изменения кода в локальной среде и устранять неполадки в удаленной среде.

Отладка из локальной среды разработки.

В этом разделе вы взаимодействуете с надстройкой Google Workspace, которая выполняется в вашей локальной среде.

Отладка в локальной среде разработки.
Рисунок 1. Отладка в локальной среде разработки.

Предварительные требования

Node.js

Python

Java

Сделайте сервис localhost общедоступным.

Для доступа дополнения Google Workspace к локальной среде необходимо подключить её к интернету. Приложение ngrok используется для перенаправления HTTP-запросов, отправляемых на общедоступный URL-адрес, в вашу локальную среду.

  1. Войдите в свою учетную запись ngrok в локальной среде браузера.
  2. Установите приложение и настройте свой authtoken в локальной среде.
  3. Создайте статический домен в своей учетной записи ngrok ; в инструкциях этого руководства он обозначается как NGROK_STATIC_DOMAIN .

Создайте и установите развертывание дополнения.

  1. Настройте надстройку Google Workspace так, чтобы все HTTP-запросы отправлялись на ваш статический домен. Ваш файл развертывания должен выглядеть следующим образом:

    {
      "oauthScopes": [
        "https://www.googleapis.com/auth/workspace.linkpreview",
        "https://www.googleapis.com/auth/workspace.linkcreate"
      ],
      "addOns": {
        "common": {
          "name": "Manage support cases",
          "logoUrl": "https://developers.google.com/workspace/add-ons/images/support-icon.png",
          "layoutProperties": {
            "primaryColor": "#dd4b39"
          }
        },
        "docs": {
          "linkPreviewTriggers": [
            {
              "runFunction": "NGROK_STATIC_DOMAIN",
              "patterns": [
                {
                  "hostPattern": "example.com",
                  "pathPrefix": "support/cases"
                },
                {
                  "hostPattern": "*.example.com",
                  "pathPrefix": "cases"
                },
                {
                  "hostPattern": "cases.example.com"
                }
              ],
              "labelText": "Support case",
              "localizedLabelText": {
                "es": "Caso de soporte"
              },
              "logoUrl": "https://developers.google.com/workspace/add-ons/images/support-icon.png"
            }
          ],
          "createActionTriggers": [
            {
              "id": "createCase",
              "labelText": "Create support case",
              "localizedLabelText": {
                "es": "Crear caso de soporte"
              },
              "runFunction": "$URL2",
              "logoUrl": "https://developers.google.com/workspace/add-ons/images/support-icon.png"
            }
          ]
        },
        "httpOptions": {
          "granularOauthPermissionSupport": "OPT_IN"
        }
      }
    }
    

    Замените NGROK_STATIC_DOMAIN на статический домен в вашей учетной записи ngrok .

  2. Укажите проект Google Cloud для использования:

    gcloud config set project PROJECT_ID
  3. Получите новые учетные данные пользователя для использования в качестве учетных данных по умолчанию для приложения :

    gcloud auth application-default login

    Замените PROJECT_ID на идентификатор проекта Google Cloud, к которому относится приложение.

  4. Создайте развертывание:

    gcloud workspace-add-ons deployments create manageSupportCases \
        --deployment-file=DEPLOYMENT_FILE_PATH

    Замените DEPLOYMENT_FILE_PATH на путь к вашему файлу развертывания.

  5. Установите развертывание:

    gcloud workspace-add-ons deployments install manageSupportCases
    Дополнение Google Workspace отправляет все свои HTTP-запросы на статический домен.
    Рисунок 2. Дополнение Google Workspace отправляет все свои HTTP-запросы на статический домен. Общедоступный сервис `ngrok` выступает в качестве моста между дополнением Google Workspace и кодом приложения, который выполняется локально.

Протестируйте надстройку Google Workspace.

Вы можете локально развертывать, тестировать, отлаживать и автоматически перезагружать дополнение Google Workspace.

Node.js

  1. В установленной локально среде среды разработки Visual Studio Code выполните следующие действия:

    1. В новом окне откройте папку add-ons-samples/node/3p-resources .
    2. Настройте приложение для локального запуска и автоматической перезагрузки в режиме отладки, добавив одну зависимость и два скрипта в файл package.json :

      {
          ...
          "dependencies": {
            ...
            "@google-cloud/functions-framework": "^3.3.0"
          },
          "scripts": {
              ...
              "start": "npx functions-framework --target=createLinkPreview --port=9000",
              "debug-watch": "nodemon --watch ./ --exec npm start"
          }
          ...
      }
      
    3. Установите приложение из корневого каталога:

      npm install
    4. Создайте и настройте запуск с именем Debug Watch , который будет запускать скрипт debug-watch , создав файл .vscode/launch.json в корневом каталоге:

      {
          "version": "0.2.0",
          "configurations": [{
              "type": "node",
              "request": "launch",
              "name": "Debug Watch",
              "cwd": "${workspaceRoot}",
              "runtimeExecutable": "npm",
              "runtimeArgs": ["run-script", "debug-watch"]
          }]
      }
      
    5. Добавьте точку останова, которая приостанавливает обработку HTTP-запросов в файле index.js , и запустите приложение и отладку, используя ранее добавленную конфигурацию Debug Watch . Теперь приложение работает и принимает HTTP-запросы на порту 9000 .

      Приложение запущено и принимает HTTP-запросы на порту 9000.
      Рисунок 3. Приложение запущено и принимает HTTP-запросы на порту 9000 .
  2. Запустите приложение ngrok в локальной среде:

    ngrok http --domain=NGROK_STATIC_DOMAIN 9000

    Замените NGROK_STATIC_DOMAIN на статический домен в вашей учетной записи ngrok . Теперь все запросы будут перенаправляться в вашу локальную среду и на порт, используемый приложением.

    Терминал с запущенным и перенаправляющим сервером ngrok.
    Рисунок 4. Терминал с запущенным и перенаправляющим сервером ngrok .
  3. Приложение ngrok также запускает веб-интерфейс на вашем локальном компьютере. Вы можете отслеживать всю активность, открыв его в браузере.

    Веб-интерфейс приложения ngrok не отображает HTTP-запросы.
    Рисунок 5. Веб-интерфейс приложения ngrok , на котором отсутствуют HTTP-запросы.
  4. Протестируйте надстройку Google Workspace, просмотрев URL-адрес обращения в новом документе Google Docs с помощью тестовой учетной записи:

    • Создайте документ Google Docs.

      Создать документ Google Docs

    • Введите следующую ссылку и нажмите enter :

      https://example.com/support/case/?name=Name1&description=Description1&priority=P1
      
    • Перейдите по ссылке.

  5. В локальной среде Visual Studio Code вы увидите, что выполнение приостановлено на установленной точке останова.

    Выполнение приостанавливается на установленной точке останова.
    Рисунок 6. Выполнение приостановлено на установленной точке останова.
  6. Если возобновить выполнение из отладчика Visual Studio Code до истечения времени ожидания для дополнений Google Workspace, дополнение Google Workspace отобразит предварительный просмотр ссылки в документе Google из кэша.

  7. Вы можете проверить журналы HTTP-запросов и ответов через веб-интерфейс, размещенный в локальной среде приложения ngrok .

    HTTP-запрос от веб-интерфейса, размещенного приложением ngrok.
    Рисунок 7. HTTP-запрос от веб-интерфейса, размещенного на сервере приложения ngrok .
  8. Чтобы изменить поведение приложения, замените Case на Case: в строке 51 файла index.js . После сохранения файла nodemon автоматически перезагрузит приложение с обновленным исходным кодом, и Visual Studio Code останется в режиме отладки.

    Приложение запущено и принимает HTTP-запросы на порту 9000 после загрузки изменений в код.
    Рисунок 8. Приложение запущено и принимает HTTP-запросы на порту 9000 после загрузки изменений в коде.
  9. На этот раз, вместо того чтобы кликать по ссылке и ждать несколько секунд в новом документе Google Docs, вы можете выбрать последний HTTP-запрос, зарегистрированный в веб-интерфейсе приложения ngrok в вашей локальной среде, и нажать Replay . Как и в прошлый раз, ваше дополнение Google Workspace не ответит, потому что оно находится в процессе отладки .

  10. Если возобновить выполнение из отладчика Visual Studio Code , то в веб-интерфейсе приложения ngrok в вашей локальной среде вы увидите, что приложение генерирует ответ с обновленной версией карточки предварительного просмотра.

Python

  1. В установленной локально среде среды разработки Visual Studio Code выполните следующие действия:

    1. В новом окне откройте папку add-ons-samples/python/3p-resources/create_link_preview .
    2. Создайте виртуальное окружение для env и активируйте его:

      virtualenv env
      source env/bin/activate
    3. Установите все зависимости проекта с помощью pip в виртуальной среде:

      pip install -r requirements.txt
    4. Создайте файл .vscode/launch.json в корневом каталоге и настройте запуск с именем Debug Watch , который будет запускать приложение из модуля functions-framework на порту 9000 в режиме отладки в виртуальной среде env :

      {
          "version": "0.2.0",
          "configurations": [{
              "type": "python",
              "request": "launch",
              "name": "Debug Watch",
              "python": "${workspaceFolder}/env/bin/python3",
              "module": "functions_framework",
              "args": [
                  "--target", "create_link_preview",
                  "--port", "9000",
                  "--debug"
              ]
          }]
      }
      
    5. Добавьте точку останова, которая приостанавливает обработку HTTP-запросов в файле main.py , и запустите приложение и отладку, добавив ранее настроенную конфигурацию Debug Watch . Теперь приложение работает и принимает HTTP-запросы на порту 9000 .

      Приложение запущено и принимает HTTP-запросы на порту 9000.
      Рисунок 3. Приложение запущено и принимает HTTP-запросы на порту 9000 .
  2. Запустите приложение ngrok в локальной среде:

    ngrok http --domain=NGROK_STATIC_DOMAIN 9000

    Замените NGROK_STATIC_DOMAIN на статический домен в вашей учетной записи ngrok . Теперь все запросы будут перенаправляться в вашу локальную среду и на порт, используемый приложением.

    Терминал с запущенным и перенаправляющим сервером ngrok.
    Рисунок 4. Терминал с запущенным и перенаправляющим сервером ngrok .
  3. Приложение ngrok также запускает веб-интерфейс на вашем локальном компьютере. Отслеживайте все действия, открыв его в браузере.

    Веб-интерфейс приложения ngrok не отображает HTTP-запросы.
    Рисунок 5. Веб-интерфейс приложения ngrok , на котором отсутствуют HTTP-запросы.
  4. Протестируйте надстройку Google Workspace, просмотрев URL-адрес обращения в новом документе Google Docs с помощью тестовой учетной записи:

    • Создайте документ Google Docs.

      Создать документ Google Docs

    • Введите следующую ссылку и нажмите enter :

      https://example.com/support/case/?name=Name1&description=Description1&priority=P1
      
    • Перейдите по ссылке.

  5. В локальной среде Visual Studio Code вы увидите, что выполнение приостановлено на установленной точке останова.

    Выполнение приостанавливается на установленной точке останова.
    Рисунок 6. Выполнение приостановлено на установленной точке останова.
  6. Если возобновить выполнение из отладчика Visual Studio Code до истечения времени ожидания для дополнений Google Workspace, дополнение Google Workspace отобразит предварительный просмотр ссылки в документе Google из кэша.

  7. Вы можете проверить журналы HTTP-запросов и ответов через веб-интерфейс, размещенный в локальной среде приложения ngrok .

    HTTP-запрос от веб-интерфейса, размещенного приложением ngrok.
    Рисунок 7. HTTP-запрос от веб-интерфейса, размещенного на сервере приложения ngrok .
  8. Чтобы изменить поведение приложения, замените Case на Case: в строке 56 файла main.py После сохранения файла Visual Studio Code автоматически перезагрузит приложение с обновленным исходным кодом и останется в режиме отладки.

    Приложение запущено и принимает HTTP-запросы на порту 9000 после загрузки изменений в код.
    Рисунок 8. Приложение запущено и принимает HTTP-запросы на порту 9000 после загрузки изменений в коде.
  9. На этот раз, вместо того чтобы кликать по ссылке и ждать несколько секунд в новом документе Google Docs, вы можете выбрать последний HTTP-запрос, зарегистрированный в веб-интерфейсе приложения ngrok в вашей локальной среде, и нажать Replay . Как и в прошлый раз, ваше дополнение Google Workspace не ответит, потому что оно находится в процессе отладки .

  10. Если возобновить выполнение из отладчика Visual Studio Code , то в веб-интерфейсе приложения ngrok в вашей локальной среде вы увидите, что приложение генерирует ответ с обновленной версией карточки предварительного просмотра.

Java

  1. В установленной локально среде среды разработки Visual Studio Code выполните следующие действия:

    1. В новом окне откройте папку add-ons-samples/java/3p-resources .
    2. Настройте проект Maven для запуска приложения CreateLinkPreview на порту 9000 локально, добавив плагин сборки Cloud Functions Framework function-maven-plugin в файл pom.xml :

      ...
      <plugin>
          <groupId>com.google.cloud.functions</groupId>
          <artifactId>function-maven-plugin</artifactId>
          <version>0.11.0</version>
          <configuration>
              <functionTarget>CreateLinkPreview</functionTarget>
              <port>9000</port>
          </configuration>
      </plugin>
      ...
      
    3. Теперь вы можете запустить его локально в режиме отладки:

      mvnDebug function:run
      Preparing to execute Maven in debug mode
      Listening for transport dt_socket at address: 8000
    4. Создайте файл .vscode/launch.json в корневом каталоге и настройте запуск с именем Remote Debug Watch , который будет подключаться к приложению, ранее запущенному на порту 8000 :

      {
          "version": "0.2.0",
          "configurations": [{
              "type": "java",
              "request": "attach",
              "name": "Remote Debug Watch",
              "projectName": "http-function",
              "hostName": "localhost",
              "port": 8000
          }]
      }
      
    5. Добавьте точку останова, которая приостанавливает обработку HTTP-запросов в файле CreateLinkPreview.java , и начните подключение и отладку с помощью конфигурации Remote Debug Watch добавленной ранее. Теперь приложение работает и принимает HTTP-запросы на порту 9000 .

      Приложение запущено и принимает HTTP-запросы на порту 9000.
      Рисунок 3. Приложение запущено и принимает HTTP-запросы на порту 9000 .

  2. Запустите приложение ngrok в локальной среде:

    ngrok http --domain=NGROK_STATIC_DOMAIN 9000

    Замените NGROK_STATIC_DOMAIN на статический домен в вашей учетной записи ngrok . Теперь все запросы будут перенаправляться в вашу локальную среду и на порт, используемый приложением.

    Терминал с запущенным и перенаправляющим сервером ngrok.
    Рисунок 4. Терминал с запущенным и перенаправляющим сервером ngrok .
  3. Приложение ngrok также запускает веб-интерфейс на вашем локальном компьютере. Отслеживайте все действия, открыв его в браузере.

    Веб-интерфейс приложения ngrok не отображает HTTP-запросы.
    Рисунок 5. Веб-интерфейс приложения ngrok , на котором отсутствуют HTTP-запросы.
  4. Протестируйте надстройку Google Workspace, просмотрев URL-адрес обращения в новом документе Google Docs с помощью тестовой учетной записи:

    • Создайте документ Google Docs.

      Создать документ Google Docs

    • Введите следующую ссылку и нажмите enter :

      https://example.com/support/case/?name=Name1&description=Description1&priority=P1
      
    • Перейдите по ссылке.

  5. В локальной среде Visual Studio Code вы увидите, что выполнение приостановлено на установленной точке останова.

    Выполнение приостанавливается на установленной точке останова.
    Рисунок 6. Выполнение приостановлено на установленной точке останова.
  6. Если возобновить выполнение из отладчика Visual Studio Code до истечения времени ожидания для дополнений Google Workspace, дополнение Google Workspace отобразит предварительный просмотр ссылки в документе Google из кэша.

  7. Вы можете проверить журналы HTTP-запросов и ответов через веб-интерфейс, размещенный в локальной среде приложения ngrok .

    HTTP-запрос от веб-интерфейса, размещенного приложением ngrok.
    Рисунок 7. HTTP-запрос от веб-интерфейса, размещенного на сервере приложения ngrok .
  8. Чтобы изменить поведение приложения, замените Case на Case: в строке 78 файла CreateLinkPreview.java , перезапустите процесс mvnDebug и повторно запустите Remote Debug Watch , чтобы снова подключиться и возобновить отладку .

  9. На этот раз, вместо того чтобы кликать по ссылке и ждать несколько секунд в новом документе Google Docs, вы можете выбрать последний HTTP-запрос, зарегистрированный в веб-интерфейсе приложения ngrok в вашей локальной среде, и нажать Replay . Как и в прошлый раз, ваше дополнение Google Workspace не ответит, потому что оно находится в процессе отладки .

  10. Если возобновить выполнение из отладчика Visual Studio Code , то в веб-интерфейсе приложения ngrok в вашей локальной среде вы увидите, что приложение генерирует ответ с обновленной версией карточки предварительного просмотра.

Отладка из удалённой среды

В этом разделе вы взаимодействуете с надстройкой Google Workspace, которая выполняется в удаленной среде.

Отладка среды осуществляется удалённо.
Рисунок 9. Отладка из удаленной среды.

Предварительные требования

  • Ваше дополнение Google Workspace развернуто и установлено.
  • Ваше приложение работает в удаленной среде с включенным отладчиком на заданном порту, который в инструкциях данного руководства обозначен как REMOTE_DEBUG_PORT .
  • Ваша локальная среда может подключаться к удаленной среде ssh .
  • В вашей локальной среде установлена ​​интегрированная среда разработки (IDE), которая позволяет выполнять отладку. В данном руководстве для наглядности мы используем IDE Visual Studio Code и её стандартные функции отладки .

Объедините локальные и удаленные среды.

В локальной среде, из которой вы хотите установить соединение с отладочным клиентом, настройте SSH-туннель:

ssh -L LOCAL_DEBUG_PORT:localhost:REMOTE_DEBUG_PORT REMOTE_USERNAME@REMOTE_ADDRESS

Замените следующее:

  • LOCAL_DEBUG_PORT : Порт отладки в вашей локальной среде.
  • REMOTE_USERNAME : Имя пользователя в вашей удалённой среде.
  • REMOTE_ADDRESS : Адрес вашей удаленной среды.
  • REMOTE_DEBUG_PORT : Порт отладки в вашей удаленной среде.

Теперь отладочный порт в вашей локальной среде связан с отладочным портом в вашей удаленной среде.

Начать отладку

В установленной локально среде среды разработки Visual Studio Code выполните следующие действия:

  1. В новом окне откройте исходный код вашего приложения.
  2. Создайте файл .vscode/launch.json в корневом каталоге и настройте запуск с именем Debug Remote , который будет подключаться к порту отладки в вашей локальной среде:

    Node.js

    {
        "version": "0.2.0",
        "configurations": [{
            "type": "node",
            "request": "attach",
            "name": "Debug Remote",
            "address": "127.0.0.1",
            "port": LOCAL_DEBUG_PORT
        }]
    }
    

    Python

    {
        "version": "0.2.0",
        "configurations": [{
            "type": "python",
            "request": "attach",
            "name": "Debug Remote",
            "connect": {
                "host": "127.0.0.1",
                "port": LOCAL_DEBUG_PORT
            }
        }]
    }
    

    Java

    {
        "version": "0.2.0",
        "configurations": [{
            "type": "java",
            "request": "attach",
            "name": "Debug Remote",
            "hostName": "127.0.0.1",
            "port": LOCAL_DEBUG_PORT
        }]
    }
    

    Замените LOCAL_DEBUG_PORT на отладочный порт в вашей локальной среде.

  3. Добавьте точку останова в исходный код вашего приложения, которая приостанавливает обработку HTTP-запросов, и начните запуск и отладку, добавив предварительно настроенную Debug Remote .

    Взаимодействуйте с установленным дополнением Google Workspace. Ваше дополнение Google Workspace не отвечает, потому что оно активно отлаживается в среде разработки Visual Studio Code .