Opracowywanie funkcji usługi Azure Functions przy użyciu programu Visual Studio
Program Visual Studio umożliwia tworzenie, testowanie i wdrażanie funkcji biblioteki klas języka C# na platformie Azure. Jeśli to środowisko jest pierwszym z Azure Functions, zobacz Wprowadzenie do Azure Functions.
Program Visual Studio zapewnia następujące korzyści podczas tworzenia funkcji:
- Edytowanie, kompilowanie i uruchamianie funkcji na lokalnym komputerze deweloperów.
- Opublikuj projekt Azure Functions bezpośrednio na platformie Azure i w razie potrzeby utwórz zasoby platformy Azure.
- Użyj atrybutów języka C#, aby zadeklarować powiązania funkcji bezpośrednio w kodzie języka C#.
- Twórz i wdrażaj wstępnie skompilowane funkcje języka C#. Funkcje wstępnie zgodne zapewniają lepszą wydajność zimnego startu niż funkcje oparte na skryptach języka C#.
- Kodowanie funkcji w języku C# przy jednoczesnym zachowaniu wszystkich korzyści z programowania w programie Visual Studio.
Ten artykuł zawiera szczegółowe informacje o sposobie używania programu Visual Studio do tworzenia funkcji biblioteki klas języka C# i publikowania ich na platformie Azure. Przed przeczytaniem tego artykułu rozważ ukończenie przewodnika Szybki start usługi Functions dla programu Visual Studio.
Jeśli nie określono inaczej, pokazano procedury i przykłady dla programu Visual Studio 2022. Aby uzyskać więcej informacji na temat wersji programu Visual Studio 2022, zobacz informacje o wersji lub informacje o wersji zapoznawczej.
Wymagania wstępne
narzędzia Azure Functions. Aby dodać narzędzia funkcji platformy Azure, uwzględnij obciążenie programistyczne platformy Azure w instalacji programu Visual Studio. Jeśli używasz programu Visual Studio 2017, może być konieczne wykonanie dodatkowych kroków instalacji.
Inne potrzebne zasoby, takie jak konto usługi Azure Storage, są tworzone w ramach subskrypcji podczas procesu publikowania.
-
Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto platformy Azure .
Tworzenie projektu usługi Azure Functions
Szablon projektu Azure Functions w programie Visual Studio tworzy projekt biblioteki klas języka C#, który można opublikować w aplikacji funkcji na platformie Azure. Za pomocą aplikacji funkcji można grupować funkcje jako jednostkę logiczną, aby ułatwić zarządzanie, wdrażanie, skalowanie i udostępnianie zasobów.
W menu programu Visual Studio wybierz pozycję Plik>nowy>projekt.
W obszarze Tworzenie nowego projektu wprowadź funkcje w polu wyszukiwania, wybierz szablon Azure Functions, a następnie wybierz przycisk Dalej.
W obszarze Konfigurowanie nowego projektu wprowadź nazwę projektu, a następnie wybierz pozycję Utwórz. Nazwa aplikacji funkcji musi być prawidłową nazwą przestrzeni nazw C#, dlatego nie należy używać znaków podkreślenia, łączników ani znaków innych niż alfanumeryczne.
W obszarze Tworzenie nowych ustawień aplikacji Azure Functions użyj wartości w poniższej tabeli:
Ustawienie Wartość Opis Wersja platformy .NET .NET 6 Ta wartość tworzy projekt funkcji, który jest uruchamiany w procesie z wersją 4.x środowiska uruchomieniowego Azure Functions. Usługa Azure Functions 1.x obsługuje program .NET Framework. Aby uzyskać więcej informacji, zobacz omówienie wersji środowiska uruchomieniowego Azure Functions. Szablon funkcji Wyzwalacz HTTP Ta wartość tworzy funkcję wyzwalaną przez żądanie HTTP. Konto magazynu (AzureWebJobsStorage) Emulator magazynu Ponieważ aplikacja funkcji na platformie Azure wymaga konta magazynu, jest on przypisany lub tworzony podczas publikowania projektu na platformie Azure. Wyzwalacz HTTP nie używa parametrów połączenia konta usługi Azure Storage; wszystkie inne typy wyzwalaczy wymagają prawidłowych parametrów połączenia konta usługi Azure Storage. Poziom autoryzacji Anonimowe Utworzona funkcja może zostać wyzwolona przez dowolnego klienta bez podawania klucza. To ustawienie autoryzacji ułatwia testowanie nowej funkcji. Aby uzyskać więcej informacji na temat kluczy i autoryzacji, zobacz Klucze autoryzacji oraz powiązania protokołu HTTP i elementu webhook. Upewnij się, że ustawiono poziom autoryzacji na Anonimowy. Jeśli wybierzesz domyślny poziom funkcji, musisz przedstawić klucz funkcji w żądaniach dostępu do punktu końcowego funkcji.
Wybierz pozycję Utwórz, aby utworzyć projekt funkcji i funkcję wyzwalacza HTTP.
Po utworzeniu projektu Azure Functions szablon projektu tworzy projekt języka C#, instaluje Microsoft.NET.Sdk.Functions
pakiet NuGet i ustawia strukturę docelową. Nowy projekt ma następujące pliki:
host.json: umożliwia skonfigurowanie hosta usługi Functions. Te ustawienia mają zastosowanie zarówno podczas uruchamiania lokalnego, jak i na platformie Azure. Aby uzyskać więcej informacji, zobacz dokumentacja pliku host.json.
local.settings.json: zachowuje ustawienia używane podczas lokalnego uruchamiania funkcji. Te ustawienia nie są używane podczas uruchamiania na platformie Azure. Aby uzyskać więcej informacji, zobacz Plik ustawień lokalnych.
Ważne
Ponieważ plik local.settings.json może zawierać wpisy tajne, należy wykluczyć go z kontroli źródła projektu. Upewnij się, że dla tego pliku ustawiono ustawienie Kopiuj do katalogu wyjściowego , jeśli jest nowsze.
Aby uzyskać więcej informacji, zobacz Projekt biblioteki klas usługi Functions.
Ustawienia lokalne
W przypadku uruchamiania w aplikacji funkcji na platformie Azure ustawienia wymagane przez funkcje są bezpiecznie przechowywane w ustawieniach aplikacji. Podczas tworzenia lokalnego Values
te ustawienia są zamiast tego dodawane do obiektu w pliku local.settings.json. Plik local.settings.json przechowuje również ustawienia używane przez lokalne narzędzia programistyczne.
Ponieważ plik local.settings.json może zawierać wpisy tajne, takie jak parametry połączenia, nigdy nie należy przechowywać go w repozytorium zdalnym. Aby dowiedzieć się więcej o ustawieniach lokalnych, zobacz Plik ustawień lokalnych.
Program Visual Studio nie przekazuje automatycznie ustawień w pliku local.settings.json podczas publikowania projektu. Aby upewnić się, że te ustawienia również istnieją w aplikacji funkcji na platformie Azure, przekaż je po opublikowaniu projektu. Aby uzyskać więcej informacji, zobacz Ustawienia aplikacji funkcji. Wartości w ConnectionStrings
kolekcji nigdy nie są publikowane.
Kod może również odczytywać wartości ustawień aplikacji funkcji jako zmienne środowiskowe. Aby uzyskać więcej informacji, zobacz Zmienne środowiskowe.
Konfigurowanie projektu na potrzeby programowania lokalnego
Środowisko uruchomieniowe usługi Functions używa konta usługi Azure Storage wewnętrznie. Dla wszystkich typów wyzwalaczy innych niż HTTP i webhook ustaw Values.AzureWebJobsStorage
klucz na prawidłowe parametry połączenia konta usługi Azure Storage. Aplikacja funkcji może również użyć emulatora Azurite dla AzureWebJobsStorage
ustawienia połączenia wymaganego przez projekt. Aby użyć emulatora, ustaw wartość na AzureWebJobsStorage
UseDevelopmentStorage=true
. Zmień to ustawienie na rzeczywiste parametry połączenia konta magazynu przed wdrożeniem. Aby uzyskać więcej informacji, zobacz Emulator magazynu lokalnego.
Aby ustawić parametry połączenia konta magazynu:
W witrynie Azure Portal przejdź do swojego konta magazynu.
Na karcie Klucze dostępu poniżej pola Zabezpieczenia i sieć skopiuj parametry połączeniaklucza key1.
W projekcie otwórz plik local.settings.json i ustaw wartość
AzureWebJobsStorage
klucza na skopiowane parametry połączenia.Powtórz poprzedni krok, aby dodać unikatowe klucze do
Values
tablicy dla innych połączeń wymaganych przez funkcje.
Dodawanie funkcji do projektu
W funkcjach biblioteki klas języka C# powiązania używane przez funkcję są definiowane przez zastosowanie atrybutów w kodzie. Podczas tworzenia wyzwalaczy funkcji na podstawie podanych szablonów są stosowane atrybuty wyzwalacza.
W Eksplorator rozwiązań kliknij prawym przyciskiem myszy węzeł projektu i wybierz polecenie Dodaj>nowy element.
Wybierz pozycję Funkcja platformy Azure, wprowadź nazwę klasy, a następnie wybierz pozycję Dodaj.
Wybierz wyzwalacz, ustaw właściwości powiązania, a następnie wybierz pozycję Dodaj. W poniższym przykładzie przedstawiono ustawienia tworzenia funkcji wyzwalacza usługi Queue Storage.
Następnie zostanie wyświetlony monit o wybranie między emulatorem magazynu Azurite lub odwoływaniem się do aprowizowanego konta usługi Azure Storage.
W tym przykładzie wyzwalacza użyto parametrów połączenia z kluczem o nazwie
QueueStorage
. Ten klucz, przechowywany w pliku local.settings.json, odwołuje się do emulatora Azurite lub konta usługi Azure Storage.Sprawdź nowo dodaną klasę. Zostanie wyświetlona metoda statyczna
Run()
przypisana za pomocą atrybutuFunctionName
. Ten atrybut wskazuje, że metoda jest punktem wejścia dla funkcji.Na przykład następująca klasa języka C# reprezentuje podstawową funkcję wyzwalacza usługi Queue Storage:
using System; using Microsoft.Azure.WebJobs; using Microsoft.Azure.WebJobs.Host; using Microsoft.Extensions.Logging; namespace FunctionApp1 { public static class Function1 { [FunctionName("QueueTriggerCSharp")] public static void Run([QueueTrigger("myqueue-items", Connection = "QueueStorage")]string myQueueItem, ILogger log) { log.LogInformation($"C# Queue trigger function processed: {myQueueItem}"); } } }
Atrybut specyficzny dla powiązania jest stosowany do każdego parametru powiązania dostarczonego do metody punktu wejścia. Atrybut przyjmuje informacje o powiązaniu jako parametry. W poprzednim przykładzie pierwszy parametr ma QueueTrigger
zastosowany atrybut wskazujący funkcję wyzwalacza usługi Queue Storage. Nazwa kolejki i nazwa ustawienia parametrów połączenia są przekazywane jako parametry do atrybutu QueueTrigger
. Aby uzyskać więcej informacji, zobacz Powiązania usługi Azure Queue Storage dla Azure Functions.
Użyj powyższej procedury, aby dodać więcej funkcji do projektu aplikacji funkcji. Każda funkcja w projekcie może mieć inny wyzwalacz, ale funkcja musi mieć dokładnie jeden wyzwalacz. Aby uzyskać więcej informacji, zobacz pojęcia dotyczące wyzwalaczy i powiązań Azure Functions.
Dodawanie powiązań
Podobnie jak w przypadku wyzwalaczy, powiązania wejściowe i wyjściowe są dodawane do funkcji jako atrybuty powiązania. Dodaj powiązania do funkcji w następujący sposób:
Upewnij się, że projekt został skonfigurowany pod kątem programowania lokalnego.
Dodaj odpowiedni pakiet rozszerzenia NuGet dla określonego powiązania, wyszukując wymagania dotyczące pakietu NuGet specyficzne dla powiązania w artykule referencyjnym dotyczącym powiązania. Na przykład znajdź wymagania dotyczące pakietu dla wyzwalacza usługi Event Hubs w artykule dokumentacji powiązań usługi Event Hubs.
Użyj następującego polecenia w konsoli menedżera pakietów, aby zainstalować określony pakiet:
Install-Package Microsoft.Azure.WebJobs.Extensions.<BINDING_TYPE> -Version <TARGET_VERSION>
W tym przykładzie zastąp
<BINDING_TYPE>
ciąg nazwą specyficzną dla rozszerzenia powiązania i<TARGET_VERSION>
określoną wersją pakietu, taką jak3.0.0-beta5
. Prawidłowe wersje są wyświetlane na poszczególnych stronach pakietów w NuGet.org. Główne wersje odpowiadające środowisku uruchomieniowemu usługi Functions w wersji 1.x lub 2.x są określone w artykule referencyjnym dotyczącym powiązania.Jeśli istnieją ustawienia aplikacji wymagane przez powiązanie, dodaj je do
Values
kolekcji w pliku ustawień lokalnych.Funkcja używa tych wartości podczas uruchamiania lokalnego. Gdy funkcja jest uruchamiana w aplikacji funkcji na platformie Azure, używa ustawień aplikacji funkcji.
Dodaj odpowiedni atrybut powiązania do podpisu metody. W poniższym przykładzie komunikat kolejki wyzwala funkcję, a powiązanie wyjściowe tworzy nowy komunikat kolejki z tym samym tekstem w innej kolejce.
public static class SimpleExampleWithOutput { [FunctionName("CopyQueueMessage")] public static void Run( [QueueTrigger("myqueue-items-source", Connection = "AzureWebJobsStorage")] string myQueueItem, [Queue("myqueue-items-destination", Connection = "AzureWebJobsStorage")] out string myQueueItemCopy, ILogger log) { log.LogInformation($"CopyQueueMessage function processed: {myQueueItem}"); myQueueItemCopy = myQueueItem; } }
Połączenie z usługą
AzureWebJobsStorage
Queue Storage jest uzyskiwane z ustawienia . Aby uzyskać więcej informacji, zobacz artykuł referencyjny dotyczący określonego powiązania.
Aby uzyskać pełną listę powiązań obsługiwanych przez funkcje, zobacz Obsługiwane powiązania.
Uruchamianie funkcji lokalnie
Podstawowe narzędzia usługi Azure Functions umożliwiają uruchamianie projektu usługi Azure Functions na lokalnym komputerze deweloperskim. Po naciśnięciu klawisza F5 w celu debugowania projektu usługi Functions lokalny host usługi Functions (func.exe) zaczyna nasłuchiwać na porcie lokalnym (zwykle 7071). Wszystkie wywoływane punkty końcowe funkcji są zapisywane w danych wyjściowych i można ich używać do testowania funkcji. Aby uzyskać więcej informacji, zobacz Praca z narzędziami Azure Functions Core Tools. Zostanie wyświetlony monit o zainstalowanie tych narzędzi przy pierwszym uruchomieniu funkcji z poziomu programu Visual Studio.
Aby uruchomić funkcję w programie Visual Studio w trybie debugowania:
Naciśnij F5. Po wyświetleniu monitu zaakceptuj żądanie programu Visual Studio dotyczące pobrania i zainstalowania podstawowych narzędzi usługi Azure Functions (CLI). Może być również konieczne włączenie wyjątku zapory, aby narzędzia mogły obsługiwać żądania HTTP.
Po uruchomieniu projektu przetestuj kod tak, jak w przypadku testowania wdrożonej funkcji.
Po uruchomieniu programu Visual Studio w trybie debugowania punkty przerwania są osiągane zgodnie z oczekiwaniami.
Aby uzyskać bardziej szczegółowy scenariusz testowania przy użyciu programu Visual Studio, zobacz Funkcje testowania.
Publikowanie na platformie Azure
Podczas publikowania z programu Visual Studio jest używana jedna z dwóch metod wdrażania:
- Web Deploy: pakuje i wdraża aplikacje systemu Windows na dowolnym serwerze usług IIS.
- Wdrażanie zip z włączonym pakietem Run-From-Package: zalecane w przypadku wdrożeń Azure Functions.
Wykonaj poniższe kroki, aby opublikować projekt w aplikacji funkcji na platformie Azure.
W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy projekt i wybierz polecenie Opublikuj. W obszarze Cel wybierz pozycję Azure , a następnie pozycję Dalej.
Wybierz pozycję Aplikacja funkcji platformy Azure (Windows) dla określonego elementu docelowego, która tworzy aplikację funkcji działającą w systemie Windows, a następnie wybierz przycisk Dalej.
W wystąpieniu funkcji wybierz pozycję Utwórz nową funkcję platformy Azure...
Utwórz nowe wystąpienie przy użyciu wartości określonych w poniższej tabeli:
Ustawienie Wartość Opis Nazwa Nazwa unikatowa w skali globalnej Unikatowa nazwa identyfikująca nową aplikację funkcji. Zaakceptuj tę nazwę lub wprowadź nową nazwę. Prawidłowe znaki to: a-z
,0-9
i-
.Subskrypcja Twoja subskrypcja Subskrypcja platformy Azure, która ma być używana. Zaakceptuj tę subskrypcję lub wybierz nową z listy rozwijanej. Grupa zasobów Nazwa grupy zasobów Grupa zasobów, w której chcesz utworzyć aplikację funkcji. Wybierz istniejącą grupę zasobów z listy rozwijanej lub wybierz pozycję Nowy , aby utworzyć nową grupę zasobów. Typ planu Zużycie Podczas publikowania projektu w aplikacji funkcji uruchamianej w planie Zużycie płacisz tylko za wykonania aplikacji funkcji. Inne plany hostingu generują wyższe koszty. Lokalizacja Lokalizacja usługi App Service Wybierz lokalizację w regionie w pobliżu Ciebie lub innych usług, do których uzyskujesz dostęp do funkcji. Azure Storage Konto magazynu ogólnego przeznaczenia Środowisko uruchomieniowe usługi Functions wymaga konta magazynu platformy Azure. Wybierz pozycję Nowy , aby skonfigurować konto magazynu ogólnego przeznaczenia. Możesz również wybrać istniejące konto spełniające wymagania dotyczące konta magazynu. Wybierz pozycję Utwórz , aby utworzyć aplikację funkcji i powiązane z nią zasoby na platformie Azure. Stan tworzenia zasobów jest wyświetlany w lewym dolnym rogu okna.
W wystąpieniu usługi Functions upewnij się, że pole wyboru Uruchom z pliku pakietu jest zaznaczone. Aplikacja funkcji jest wdrażana przy użyciu narzędzia Zip Deploy z włączonym trybem Run-From-Package . Zip Deploy to zalecana metoda wdrażania dla projektu funkcji, co zapewnia lepszą wydajność.
Wybierz pozycję Zakończ, a na stronie Publikowanie wybierz pozycję Publikuj , aby wdrożyć pakiet zawierający pliki projektu w nowej aplikacji funkcji na platformie Azure.
Po zakończeniu wdrażania główny adres URL aplikacji funkcji na platformie Azure jest wyświetlany na karcie Publikowanie .
Na karcie Publikowanie w sekcji Hosting wybierz pozycję Otwórz w Azure Portal. Spowoduje to otwarcie nowego zasobu platformy Azure aplikacji funkcji w Azure Portal.
Ustawienia aplikacji funkcji
Program Visual Studio nie przekazuje tych ustawień automatycznie podczas publikowania projektu. Wszystkie ustawienia dodane w pliku local.settings.json należy również dodać do aplikacji funkcji na platformie Azure.
Najprostszym sposobem przekazania wymaganych ustawień do aplikacji funkcji na platformie Azure jest rozwinięcie trzech kropek obok sekcji Hosting i wybranie linku Zarządzaj ustawieniami Azure App Service, który zostanie wyświetlony po pomyślnym opublikowaniu projektu.
Wybranie tego linku powoduje wyświetlenie okna dialogowego Ustawienia aplikacji dla aplikacji funkcji, w którym można dodać nowe ustawienia aplikacji lub zmodyfikować istniejące.
Ustawienie lokalne wyświetla wartość ustawienia w pliku local.settings.json, a funkcja Remote wyświetla bieżącą wartość ustawienia w aplikacji funkcji na platformie Azure. Wybierz pozycję Dodaj ustawienie , aby utworzyć nowe ustawienie aplikacji. Użyj linku Wstaw wartość z lokalnego , aby skopiować wartość ustawienia do pola Zdalne . Oczekujące zmiany są zapisywane w pliku ustawień lokalnych i aplikacji funkcji po wybraniu przycisku OK.
Uwaga
Domyślnie plik local.settings.json nie jest zaewidencjonowany w kontroli źródła. Oznacza to, że w przypadku klonowania lokalnego projektu usługi Functions z kontroli źródła projekt nie ma pliku local.settings.json. W takim przypadku należy ręcznie utworzyć plik local.settings.json w katalogu głównym projektu, aby okno dialogowe Ustawienia aplikacji działało zgodnie z oczekiwaniami.
Ustawienia aplikacji można również zarządzać na jeden z następujących sposobów:
- Używanie witryny Azure Portal.
- Użyj opcji publikowania
--publish-local-settings
w narzędziach Azure Functions Core Tools. - Użyj interfejsu wiersza polecenia platformy Azure.
Debugowanie zdalne
Aby zdalnie debugować aplikację funkcji, musisz opublikować konfigurację debugowania projektu. Należy również włączyć zdalne debugowanie w aplikacji funkcji na platformie Azure.
W tej sekcji założono, że aplikacja funkcji została już opublikowana przy użyciu konfiguracji wydania.
Zagadnienia dotyczące zdalnego debugowania
- Debugowanie zdalne nie jest zalecane w usłudze produkcyjnej.
- Jeśli masz włączone debugowanie Tylko mój kod , wyłącz go.
- Unikaj długich zatrzymań w punktach przerwania podczas zdalnego debugowania. Platforma Azure traktuje proces, który jest zatrzymywany dłużej niż kilka minut jako proces nieodpowiadujący, i wyłącza go.
- Podczas debugowania serwer wysyła dane do programu Visual Studio, co może mieć wpływ na opłaty za przepustowość. Aby uzyskać informacje o szybkościach przepustowości, zobacz Cennik platformy Azure.
- Debugowanie zdalne jest automatycznie wyłączone w aplikacji funkcji po 48 godzinach. Po 48 godzinach należy ponownie włączyć zdalne debugowanie.
Dołączanie debugera
Sposób dołączania debugera zależy od trybu wykonywania. Podczas debugowania aplikacji izolowanego procesu roboczego należy obecnie dołączyć zdalny debuger do oddzielnego procesu platformy .NET i wykonać kilka innych kroków konfiguracji.
Po zakończeniu należy wyłączyć debugowanie zdalne.
Aby dołączyć zdalny debuger do aplikacji funkcji uruchomionej w procesie przy użyciu hosta usługi Functions:
Na karcie Publikowanie wybierz wielokropek (...) w sekcji Hosting , a następnie wybierz pozycję Dołącz debuger.
Program Visual Studio łączy się z aplikacją funkcji i włącza zdalne debugowanie, jeśli nie jest jeszcze włączone. Lokalizuje również debuger i dołącza go do procesu hosta aplikacji. W tym momencie możesz debugować aplikację funkcji w zwykły sposób.
Wyłączanie debugowania zdalnego
Po zakończeniu zdalnego debugowania kodu należy wyłączyć debugowanie zdalne w Azure Portal. Zdalne debugowanie jest automatycznie wyłączone po 48 godzinach, jeśli zapomnisz.
Na karcie Publikowanie w projekcie wybierz wielokropek (...) w sekcji Hosting, a następnie wybierz pozycję Otwórz w Azure Portal. Ta akcja powoduje otwarcie aplikacji funkcji w Azure Portal, do której wdrożono projekt.
W aplikacji funkcji wybierz pozycję Konfiguracja w obszarze ustawień, wybierz pozycję Ustawienia ogólne, ustaw opcję Debugowanie zdalne na Wyłączone, a następnie wybierz pozycję Zapisz , a następnie pozycję Kontynuuj.
Po ponownym uruchomieniu aplikacji funkcji nie można już zdalnie łączyć się z procesami zdalnymi. Możesz użyć tej samej karty w Azure Portal, aby włączyć zdalne debugowanie poza programem Visual Studio.
Funkcje monitorowania
Zalecanym sposobem monitorowania wykonywania funkcji jest zintegrowanie aplikacji funkcji z usługą aplikacja systemu Azure Insights. Po utworzeniu aplikacji funkcji w Azure Portal ta integracja jest domyślnie wykonywana. Jednak po utworzeniu aplikacji funkcji podczas publikowania programu Visual Studio integracja z aplikacją funkcji na platformie Azure nie jest wykonywana. Aby dowiedzieć się, jak połączyć usługę Application Insights z aplikacją funkcji, zobacz Włączanie integracji usługi Application Insights.
Aby dowiedzieć się więcej na temat monitorowania przy użyciu usługi Application Insights, zobacz Monitorowanie Azure Functions.
Testowanie funkcji
W tej sekcji opisano sposób tworzenia projektu aplikacji funkcji w języku C# w programie Visual Studio oraz uruchamiania i testowania za pomocą narzędzia xUnit.
Konfigurowanie
Aby skonfigurować środowisko, utwórz funkcję i przetestuj aplikację. Poniższe kroki ułatwiają tworzenie aplikacji i funkcji wymaganych do obsługi testów:
- Tworzenie nowej aplikacji usługi Functions i nadaj jej nazwę Functions
- Utwórz funkcję HTTP na podstawie szablonu i nadaj jej nazwę MyHttpTrigger.
- Utwórz funkcję czasomierza na podstawie szablonu i nadaj jej nazwę MyTimerTrigger.
- Utwórz aplikację xUnit Test w rozwiązaniu i nadaj jej nazwę Functions.Tests. Usuń domyślne pliki testowe.
- Dodawanie odwołania z aplikacji testowej do witryny Microsoft.AspNetCore.Mvc przy użyciu narzędzia NuGet
- Odwołanie do aplikacji Functions z aplikacji Functions.Tests.
Tworzenie klas testowych
Po utworzeniu projektów można utworzyć klasy używane do uruchamiania testów automatycznych.
Każda funkcja przyjmuje wystąpienie usługi ILogger do obsługi rejestrowania komunikatów. Niektóre testy nie rejestrują komunikatów lub nie mają wątpliwości co do sposobu implementowania rejestrowania. Inne testy muszą ocenić zarejestrowane komunikaty, aby określić, czy test przechodzi.
Utworzysz nową klasę o nazwie ListLogger
, która zawiera wewnętrzną listę komunikatów do oceny podczas testowania. Aby zaimplementować wymagany ILogger
interfejs, klasa potrzebuje zakresu. Poniższa klasa wyśmiewa zakres przypadków testowych do przekazania do ListLogger
klasy.
Utwórz nową klasę w projekcie Functions.Tests o nazwie NullScope.cs i wprowadź następujący kod:
using System;
namespace Functions.Tests
{
public class NullScope : IDisposable
{
public static NullScope Instance { get; } = new NullScope();
private NullScope() { }
public void Dispose() { }
}
}
Następnie utwórz nową klasę w projekcie Functions.Tests o nazwie ListLogger.cs i wprowadź następujący kod:
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Text;
namespace Functions.Tests
{
public class ListLogger : ILogger
{
public IList<string> Logs;
public IDisposable BeginScope<TState>(TState state) => NullScope.Instance;
public bool IsEnabled(LogLevel logLevel) => false;
public ListLogger()
{
this.Logs = new List<string>();
}
public void Log<TState>(LogLevel logLevel,
EventId eventId,
TState state,
Exception exception,
Func<TState, Exception, string> formatter)
{
string message = formatter(state, exception);
this.Logs.Add(message);
}
}
}
Klasa ListLogger
implementuje następujące elementy członkowskie zgodnie z umową interfejsu ILogger
:
BeginScope: Zakresy dodają kontekst do rejestrowania. W takim przypadku test wskazuje tylko wystąpienie statyczne w
NullScope
klasie, aby umożliwić działanie testu.IsEnabled: podano wartość domyślną
false
.Log: ta metoda używa podanej
formatter
funkcji do formatowania komunikatu, a następnie dodaje wynikowy tekst doLogs
kolekcji.
Kolekcja Logs
jest wystąpieniem List<string>
i jest inicjowana w konstruktorze.
Następnie utwórz nowy plik w projekcie Functions.Tests o nazwie LoggerTypes.cs i wprowadź następujący kod:
namespace Functions.Tests
{
public enum LoggerTypes
{
Null,
List
}
}
Wyliczenie określa typ rejestratora używanego przez testy.
Teraz utwórz nową klasę w projekcie Functions.Tests o nazwie TestFactory.cs i wprowadź następujący kod:
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http.Internal;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using Microsoft.Extensions.Primitives;
using System.Collections.Generic;
namespace Functions.Tests
{
public class TestFactory
{
public static IEnumerable<object[]> Data()
{
return new List<object[]>
{
new object[] { "name", "Bill" },
new object[] { "name", "Paul" },
new object[] { "name", "Steve" }
};
}
private static Dictionary<string, StringValues> CreateDictionary(string key, string value)
{
var qs = new Dictionary<string, StringValues>
{
{ key, value }
};
return qs;
}
public static HttpRequest CreateHttpRequest(string queryStringKey, string queryStringValue)
{
var context = new DefaultHttpContext();
var request = context.Request;
request.Query = new QueryCollection(CreateDictionary(queryStringKey, queryStringValue));
return request;
}
public static ILogger CreateLogger(LoggerTypes type = LoggerTypes.Null)
{
ILogger logger;
if (type == LoggerTypes.List)
{
logger = new ListLogger();
}
else
{
logger = NullLoggerFactory.Instance.CreateLogger("Null Logger");
}
return logger;
}
}
}
Klasa TestFactory
implementuje następujące elementy członkowskie:
Dane: ta właściwość zwraca kolekcję IEnumerable przykładowych danych. Pary wartości klucza reprezentują wartości przekazywane do ciągu zapytania.
CreateDictionary: ta metoda akceptuje parę klucz/wartość jako argumenty i zwraca nową
Dictionary
użytą do utworzeniaQueryCollection
w celu reprezentowania wartości ciągu zapytania.CreateHttpRequest: ta metoda tworzy żądanie HTTP zainicjowane przy użyciu podanych parametrów ciągu zapytania.
CreateLogger: na podstawie typu rejestratora ta metoda zwraca klasę rejestratora używaną do testowania. Program
ListLogger
śledzi zarejestrowane komunikaty dostępne do oceny w testach.
Na koniec utwórz nową klasę w projekcie Functions.Tests o nazwie FunctionsTests.cs i wprowadź następujący kod:
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Xunit;
namespace Functions.Tests
{
public class FunctionsTests
{
private readonly ILogger logger = TestFactory.CreateLogger();
[Fact]
public async void Http_trigger_should_return_known_string()
{
var request = TestFactory.CreateHttpRequest("name", "Bill");
var response = (OkObjectResult)await MyHttpTrigger.Run(request, logger);
Assert.Equal("Hello, Bill. This HTTP triggered function executed successfully.", response.Value);
}
[Theory]
[MemberData(nameof(TestFactory.Data), MemberType = typeof(TestFactory))]
public async void Http_trigger_should_return_known_string_from_member_data(string queryStringKey, string queryStringValue)
{
var request = TestFactory.CreateHttpRequest(queryStringKey, queryStringValue);
var response = (OkObjectResult)await MyHttpTrigger.Run(request, logger);
Assert.Equal($"Hello, {queryStringValue}. This HTTP triggered function executed successfully.", response.Value);
}
[Fact]
public void Timer_should_log_message()
{
var logger = (ListLogger)TestFactory.CreateLogger(LoggerTypes.List);
new MyTimerTrigger().Run(null, logger);
var msg = logger.Logs[0];
Assert.Contains("C# Timer trigger function executed at", msg);
}
}
}
Elementy członkowskie zaimplementowane w tej klasie to:
Http_trigger_should_return_known_string: Ten test tworzy żądanie z wartościami ciągu zapytania dla
name=Bill
funkcji HTTP i sprawdza, czy zwracana jest oczekiwana odpowiedź.Http_trigger_should_return_string_from_member_data: ten test używa atrybutów xUnit do dostarczania przykładowych danych do funkcji HTTP.
Timer_should_log_message: Ten test tworzy wystąpienie
ListLogger
obiektu i przekazuje je do funkcji czasomierza. Po uruchomieniu funkcji dziennik jest sprawdzany, aby upewnić się, że oczekiwany komunikat jest obecny.
Jeśli chcesz uzyskać dostęp do ustawień aplikacji w testach, możesz wstrzyknąćIConfiguration
wystąpienie z wyśmiewanymi wartościami zmiennych środowiskowych do funkcji.
Uruchom testy
Aby uruchomić testy, przejdź do Eksploratora testów i wybierz pozycję Uruchom wszystkie testy w widoku.
Debugowanie testów
Aby debugować testy, ustaw punkt przerwania w teście, przejdź do Eksploratora testów i wybierz pozycję Uruchom > ostatnie uruchomienie debugowania.
narzędzia Azure Functions za pomocą programu Visual Studio 2017
Azure Functions Tools jest dostępny w obciążeniu programistycznym platformy Azure, począwszy od programu Visual Studio 2017. W programie Visual Studio 2017 obciążenie programistyczne platformy Azure instaluje Azure Functions Tools jako oddzielne rozszerzenie. W programie Visual Studio 2019 lub nowszym rozszerzenie narzędzi Azure Functions jest aktualizowane w ramach programu Visual Studio.
Podczas aktualizowania instalacji programu Visual Studio 2017 upewnij się, że używasz najnowszej wersji narzędzi Azure Functions Tools. W poniższych sekcjach pokazano, jak sprawdzić i (w razie potrzeby) zaktualizować rozszerzenie Azure Functions Tools w programie Visual Studio 2017.
Sprawdzanie wersji narzędzi w programie Visual Studio 2017
W menu Narzędzia wybierz pozycję Rozszerzenia i Aktualizacje. Rozwiń węzeł Zainstalowane>narzędzia, a następnie wybierz pozycję Azure Functions i Narzędzia zadań internetowych.
Zwróć uwagę na zainstalowaną wersję i porównaj tę wersję z najnowszą wersją wymienioną w informacjach o wersji.
Jeśli wersja jest starsza, zaktualizuj narzędzia w programie Visual Studio, jak pokazano w poniższej sekcji.
Aktualizowanie narzędzi w programie Visual Studio
W oknie dialogowym Rozszerzenia i Aktualizacje rozwiń węzeł AktualizacjeVisual Studio Marketplace, wybierz pozycję Azure Functions >i Narzędzia zadań internetowych, a następnie wybierz pozycję Aktualizuj.
Po pobraniu aktualizacji narzędzi wybierz pozycję Zamknij, a następnie zamknij program Visual Studio, aby wyzwolić aktualizację narzędzi za pomocą Instalatora VSIX.
W instalatorze VSIX wybierz pozycję Modyfikuj , aby zaktualizować narzędzia.
Po zakończeniu aktualizacji wybierz pozycję Zamknij, a następnie uruchom ponownie program Visual Studio.
Następne kroki
Aby uzyskać więcej informacji na temat narzędzi Azure Functions Core Tools, zobacz Praca z narzędziami Azure Functions Core Tools.
Aby uzyskać więcej informacji na temat tworzenia funkcji jako bibliotek klas platformy .NET, zobacz Azure Functions dokumentacja dla deweloperów języka C#. Ten artykuł zawiera również linki do przykładów użycia atrybutów do deklarowania różnych typów powiązań obsługiwanych przez Azure Functions.