1. 程式人生 > >使用 Visual Studio 開發、測試和部署 Azure Functions(二)測試,部署

使用 Visual Studio 開發、測試和部署 Azure Functions(二)測試,部署

1,引言

上一篇介紹了使用使用 Visual Studio 開發 "Azure Functions" 函式,此篇介紹 “Azure Functions” 的測試以及直接從 Vistual Studio 在 Azure 上的部署 ”Azure Functions“應用。

2,建立單元測試專案

       單元測試是敏捷方法的基本部分。 Visual Studio 提供測試專案模板。 使用此模板為應用程式建立單元測試,可將相同的技術應用於 Azure Functions 測試。

(1)在 Visual Studio 的“解決方案資源管理器”視窗中,右鍵單擊“WatchPortalFunction”解決方案,單擊“新增”,然後單擊“新建專案”。

 

 (2)因為模擬在單元測試中模擬使用web api的方式進行測試,所以使用 “nuget” 點選安裝 “Microsoft.AspNetCore.Mvc”  包,進行測試。

 (3)新增單元測試方法程式碼

 1 var httpContext = new DefaultHttpContext();
 2             var queryStringValue = "adb";
 3             var request = new DefaultHttpRequest(new DefaultHttpContext())
 4             {
 5                 Query = new QueryCollection
 6                 (
 7                     new System.Collections.Generic.Dictionary<string, StringValues>()
 8                     {
 9             { "model", queryStringValue }
10                     }
11                 )
12             };
13 
14             var logger = NullLoggerFactory.Instance.CreateLogger("Null Logger");
15 
16             var response = WatchPortalFunction.Run(request, logger);
17 
18             response.Wait();
19 
20             // Check that the response is an "OK" response
21             Assert.IsAssignableFrom<OkObjectResult>(response.Result);
22 
23             // Check that the contents of the response are the expected contents
24             var result = (OkObjectResult)response.Result;
25             dynamic watchinfo = new { Manufacturer = "Abc", CaseType = "Solid", Bezel = "Titanium", Dial = "Roman", CaseFinish = "Silver", Jewels = 15 };
26             string watchInfo = $"Watch Details: {watchinfo.Manufacturer}, {watchinfo.CaseType}, {watchinfo.Bezel}, {watchinfo.Dial}, {watchinfo.CaseFinish}, {watchinfo.Jewels}";
27             Assert.Equal(watchInfo, result.Value);

3,執行測試

在“測試資源管理器”視窗,成功的顯示了測試

        3個單元測試方法全部測試成功。

 4,使用Azure 建立 Azure Functions 應用

       Azure Function 在Azure雲中 Azure Function App 的上下文中執行。 函式應用是一個容器,指定用於執行 Azure Functions 的作業系統以及可用資源,例如記憶體、計算能力和磁碟空間。 Azure Functions 應用還提供用於執行函式的公共 URL。 在後臺,Azure Functions 應用是執行 Web 伺服器的一個或多個虛擬機器的集合。 釋出 Azure Functions 時,需將其部署到這些虛擬機器。

       使用 Visual Studio 將函式部署到雲中的 Azure Functions 應用。 首先,將建立 Azure Functions 應用,然後可使用 Visual Studio 中的“釋出”嚮導部署函式。使用 Azure Functions,可輕鬆使用應用服務持續整合部署函式應用。 Azure Functions 可與 BitBucket、Dropbox、GitHub 和 Azure DevOps 整合。 這樣,通過使用其中一項整合服務實現的函式程式碼更新所在的工作流將觸發到 Azure 的部署。

持續部署選項非常適合用於頻繁整合多個分發內容的專案。 它還允許維護對函式程式碼的原始碼管理。 目前支援以下部署源:

  • GitHub
  • OneDrive
  • Azure DevOps
  • .......

(1)登入 Azure 在 “Azure” 門戶選單中,選擇 “建立資源” ,建立 “函式應用”

 

 

 (2)點選函式應該,進行建立 函式應用

 

 

 (3)點選 “檢視+建立” 建立,等待函式應用建立完畢,傳向其資源,檢視 “watchfunctions-allenMaster”  概述或者在門戶中選擇 “所有資源” ,點選“watchfunctions-allenMaster”函式。

 

 

 

5,將 WatchInfo 函式部署到 Azure Functions 應用

(1)在 “Azure.Protal.Functions” 解決方案上,右鍵點選 “釋出”

   注意:

  1),選擇釋出目標:Azure 應用服務計劃

  2),Azure 應用服務計劃 按需執行程式碼的專用計劃,選擇:選擇現有

  點選 “建立配置檔案”

 (2)點擊發布,將“Azure Functions”應用部署在“Azure”上

 

 

 此時輸出列表顯示  ”釋出成功“,同時在“Azure”門戶中檢視剛才部署的"Azure Functions"應用。

       重新整理”watchfunctions-allenMaster“ 函式應用,可以看到函式項下多了兩個觸發器

 

 

  此時,我們可以看到我們建立專案的時候預設的 "Function1 HttppTrigger" 和我們在Vistual Studio 中建立的 "WatchPortalFunction Trigger"

(3)複製”概覽“ 裡面的 url 或者 Vistual Studio 釋出頁面的 url 在瀏覽器中進行測試  

 當出現這個介面,就顯示建立的azure Functions 執行成功,然後我們進行測試寫的觸發器

(4)瀏覽器輸入:https://watchfunctions-allenmaster.azurewebsites.net/api/WatchPortalFunction?model=abd

 

 

 

現已經在雲中建立了 Azure Functions 應用,並將函式從 Visual Studio 釋出到了此應用。 

ok,在此, 使用Vistual Studio 開發,測試,部署 Azure Functions 應用完結

三、總結

此時,我們對 Visual Studio開發 “Azure Functions”應用有個大概的瞭解,而以後 Azure Functions 作為Azure 開發的一部分,也是一個很理想的解決方案,用來處理批量資料、整合系統、使用 iot 以及生成簡單的Api和微服務,而微軟在 Azure 中提供的 Azure Function 是 按照使用付費定價模型:也就是僅僅為執行程式碼所用的時間而付費,這一點比某雲還是好一些。以上也是自己的學習的過程,謝謝各位指點。

github地址:https://github.com/allentmater/Azure.Portal.Functions.git

作者:Allen 

版權:轉載請在文章明顯位置註明作者及出處。如發現錯誤,歡迎批評指