Teams Bot的ServiceLevel測試

每一個Teams bot實際上就是一個web api服務,這個服務通過Bot Framework和Teams進行通訊,所以對于Teams app的測試就是對于一個api service的測試。

軟件行業發展到如今,測試技術已經趨于成熟。單元測試,冒煙測試,整合測試。。。等等。那什么是Service level的測試。這里所謂的服務級的測試類似于Integration Test,就是指把整個api服務看成是一個黑盒,對這個服務的各個api接口作為最小單位,進行測試。與Integration Test不同之處在于,Service level測試更加側重于服務本身,可以盡量mock掉服務的外部依賴項。

Service Level的測試在如今微服務的時代特別實用,如果使用大量的單元測試,把每個class的每個方法都層層保護,一旦將來改動了代碼,對測試代碼的更新也是一個較大的工作量,也就是說代碼被測試限制的特別死。相反,微服務的時代因為每個服務都不會非常大,我們需要給代碼一些改動的空間,我們關心的是每個api接口對于傳入的輸入,是否可以產生正確的輸出。

而且,我在使用ServiceLevel測試對我的抽獎機器人進行測試的時候,能夠很好的發現很多dead code,就是一些永遠也不會被執行到的死代碼。這些代碼應該會刪掉,保持代碼的簡潔。

那如何做呢?ASP.NET Core早就為我們準備好了ServiceLevel測試的利器:TestServer。微軟官方文檔里也有很多介紹如何使用TestServer來做整合測試,我們來看一個最簡單的例子:

public class TestServerFixture : IDisposable
{private readonly TestServer _testServer;public HttpClient Client { get; }public TestServerFixture(){var builder = new WebHostBuilder().UseEnvironment("Development").UseStartup<Startup>();_testServer = new TestServer(builder);Client = _testServer.CreateClient();}public void Dispose(){Client.Dispose();_testServer.Dispose();}
}[Fact]
public async Task WhenGetMethodIsInvokedWithoutAValidToken_GetShouldAnswerUnAuthorized()
{using (TestServerFixture fixture = new TestServerFixture()){// Actvar response = await fixture.Client.GetAsync("/api/values/5");// Assertresponse.StatusCode.Should().Be(HttpStatusCode.Unauthorized);}
}

當然,由于LuckyDraw bot里使用到了很多Azure table storage服務,我們在測試中,不應該使用真實的azure storage,不然多個測試用例并發執行的時候,數據肯定就亂掉了,而且會相互沖突,導致測試結果無法預料。所以在測試的時候我們需要把api服務的外部依賴項都mock掉,比如我在LuckyDraw bot里就mock了Bot connector,因為在測試中我們不能,也不應該真實的往teams里發送東西。

說了這么多,還是上代碼,讓大家對這個有一個更加直觀的認識:

[Fact]
public async Task WhenEverythingIsGood_SendTextHelp_ReplyHelpMessage()
{using (var server = CreateServerFixture(ServerFixtureConfigurations.Default))using (var client = server.CreateClient()){var response = await client.SendTeamsText("<at>bot name</at>help");response.StatusCode.Should().Be(HttpStatusCode.OK);var createdMessages = server.Assert().GetCreatedMessages();createdMessages.Should().HaveCount(1);createdMessages[0].Activity.Text.Should().StartWith("Hi there, To start a lucky draw");}
}public static async Task<HttpResponseMessage> SendTeamsText(this HttpClient httpClient,string text,string locale = null,double? offsetHours = null)
{var activity = new Activity{ServiceUrl = "https://service-url.com",ChannelId = "msteams",Type = ActivityTypes.Message,Text = text,Locale = locale ?? "en-us",LocalTimestamp = offsetHours.HasValue ? new DateTimeOffset(2018, 1, 1, 1, 1, 1, 1, TimeSpan.FromHours(offsetHours.Value)) : (DateTimeOffset?)null,From = new ChannelAccount("id", "name"),Recipient = new ChannelAccount("bot id", "bot name"),Conversation = new ConversationAccount(isGroup: true, id: "conv id", name: "conv name"),ChannelData = new TeamsChannelData{Tenant = new TenantInfo { Id = Guid.NewGuid().ToString() },Team = new TeamInfo { Id = Guid.NewGuid().ToString() },Channel = new ChannelInfo { Id = Guid.NewGuid().ToString() },}};return await httpClient.SendActivity(activity);
}

可以看到我們模擬了Teams的Activity,把我們自己生成的一個activity傳遞給了我們api接口,然后check了api發送給Teams的消息是不是我們想要的內容。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/278038.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/278038.shtml
英文地址,請注明出處:http://en.pswp.cn/news/278038.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

BZOJ1016:[JSOI2008]最小生成樹計數——題解

https://www.lydsy.com/JudgeOnline/problem.php?id1016 現在給出了一個簡單無向加權圖。你不滿足于求出這個圖的最小生成樹&#xff0c;而希望知道這個圖中有多少個不同的最小生成樹。&#xff08;如果兩顆最小生成樹中至少有一條邊不同&#xff0c;則這兩個最小生成樹就是不…

如何做Teams Bot的測試覆蓋

在我昨天的文章中介紹了如果對Teams bot做service level的測試&#xff0c;那到底要寫多少的測試代碼才算夠&#xff1f;如何才算測試到位了&#xff1f;這個時候我們就需要用”測試覆蓋率”來衡量&#xff0c;雖然覆蓋率高并不一定代表著就可以高枕無憂的以為我們軟件質量高了…

Spring Boot開發MongoDB應用實踐

本文繼續上一篇定時任務中提到的郵件服務&#xff0c;簡單講解Spring Boot中如何使用MongoDB進行應用開發。 上文中提到的這個簡易郵件系統大致設計思路如下&#xff1a; 1、發送郵件支持同步和異步發送兩種 2、郵件使用MongDB進行持久化保存 3、異步發送&#xff0c;直接將郵件…

Teams Bot如何做全球化

Office365在全球有大量的用戶&#xff0c;可以說是擁有最多用戶的商業SaaS平臺。Teams最近在發展迅猛&#xff0c;有1300萬日活用戶&#xff0c;已經超越了Slack。? Microsoft Teams overtakes Slack with 13 million daily users 我在設計Teams LuckyDraw bot的時候就希望我…

QuickBI助你成為分析師-郵件定時推送

創建報表過程中經常需要將報表情況定時推送給其他用戶&#xff0c;及時了解數據情況。高級版本郵件推送功能支持儀表板周期性推送到訂閱人&#xff0c;默認以當前登錄者視角查看&#xff0c;同時支持結合 行級權限進行權限控制 和 結合全局參數功能確定郵件推送內容參數&#x…

2019年5月 Teams Community Call (China)

這個月有四個話題&#xff1a; Tony Xia&#xff1a;這個月的Teams的產品更新&#xff0c;Teams開發能力的更新&#xff0c;開源項目更新&#xff0c;庫更新王遠&#xff1a;升級/遷移到Microsoft Teams劉鈺&#xff1a;Teams賬號注冊探索指南Paul Zhang/Cheung&#xff1a;Bu…

修改oracle 管理員密碼 cmd

1.sqlplus/nolog 2.conn / as sysdba 3.alter user 用戶名 identified by 新密碼;轉載于:https://www.cnblogs.com/taoqidexiaomao/p/9006927.html

在2019年6月Teams Community Call上分享的Teams app基礎架構視頻

我在2019年6月Teams Community Call(China)上分享的如何在azure上搭建典型的teams bot的基礎架構 會議視頻&#xff1a; 15:00 - 33:00 Download Video

解決 spring-cloud-starter-zipkin 啟動錯誤

應用場景&#xff1a;Spring Boot 服務添加 Zipkin 依賴&#xff0c;進行服務調用的數據采集&#xff0c;然后進行 Zipkin-Server 服務調用追蹤顯示。 示例pom.xml配置&#xff1a; <parent><groupId>org.springframework.boot</groupId><artifactId>s…

什么是Microsoft Teams的App Studio

Teams的app studio很多用戶可能不知道&#xff0c;但是對于一個teams平臺的開發人員來說&#xff0c;這個是開發利器&#xff0c;利用這個工具你可以輕松的配置manifest文件&#xff0c;可以輕松的一站式創建teams app所需要的所有東西。而且你可以很方便的可視化配置adaptive …

Spring Cloud-鴻鵠Cloud分布式微服務云系統—架構圖

這邊結合了當前大部分企業的通用需求&#xff0c;包括技術的選型比較嚴格、苛刻&#xff0c;不僅要用業界最流行的技術&#xff0c;還要和國際接軌&#xff0c;在未來的5~10年內不能out。作為公司的架構師&#xff0c;也要有一種放眼世界的眼光&#xff0c;不僅要給公司做好的技…

Teams bot的調用限制

上個月Teams團隊發布了對Teams app/bot調用api的頻率的限制。這也從側面說明Teams app越來越多&#xff0c;Teams團隊需要優先保證Teams本身的計算資源&#xff0c;來提供流暢的用戶體驗。 具體的每個限制指標在這里&#xff1a; https://docs.microsoft.com/en-us/microsoftt…

Array的sort方法

作為一個剛開始學習的前端&#xff0c;小結一下&#xff1a;sort方法&#xff1a; 如果調用該方法時沒有使用參數&#xff0c;將按字母順序對數組中的元素進行排序&#xff0c;說得更精確點&#xff0c;是按照字符編碼的順序進行排序。要實現這一點&#xff0c;首先應把數組的元…

如何使用ARM創建Teams Bot所需要的Azure資源

相信很多devops已經全面開始使用ARM來創建azure資源了&#xff0c;ARM有很多方便的地方&#xff0c;比如簡單易學&#xff0c;Infrastructure as Code&#xff0c;但是深入使用ARM開始會發現一些有待改進的方面。這篇文章主要是分享一下我在做Teams app的時候使用ARM來創建資源…

Bot Service自帶的數據分析統計功能

每個產品上線后都希望自己能實時看到多少用戶在使用我的產品&#xff0c;我的服務&#xff0c;有多少使用量&#xff0c;有沒有遇到問題。市面上做用戶數據、行為分析的公司也不少&#xff0c;但是大多數都需要我們修改一些代碼來集成第三方的sdk庫。 我的teams app上線后也急…

LuckyDraw bot有幸被提名為微軟2019的People's Choice app

上個月微軟進行了一個全世界提名活動&#xff0c;目標是選出微軟2019年度People’s Choice app。 很幸運&#xff0c;我的LuckyDraw bot得到了來自世界各地使用者的投票&#xff0c;其中也包含Teams中國社區和很多朋友的支持。 https://developer.microsoft.com/en-us/microso…

圖靈社區 和 大家網

http://www.ituring.com.cn/ http://club.topsage.com/ 大家論壇 http://www.topsage.com/ http://www.dxbbba.com/ 大學生必備吧 轉載于:https://www.cnblogs.com/onelikeone/p/9023267.html

Teams內嵌的卡片image的限制

我的LuckyDraw上線后收到了不少有價值的反饋&#xff0c;其中有一部分是針對圖片的&#xff0c;有一些用戶說他們填寫了image的url&#xff0c;但是圖片顯示不出來。 實際上這個問題在我提交這個應用到微軟審核團隊的時候&#xff0c;審核團隊也提出了類似問題。但這個是Teams本…

Python 面向對象編程(進階部分)

靜態方法&#xff1a; 通過 staticmethod 裝飾器即可把其裝飾的方法變為一個靜態方法。普通的方法&#xff0c;可以在實例化后直接調用&#xff0c;并且在方法里可以通過self.調用實例變量或類變量&#xff0c;但靜態方法是不可以訪問實例變量或類變量的&#xff0c;一個不能訪…

分享實錄|爭議不斷地EOS,我們如何才能理性看待?

1 EOS基本介紹 EOS是Block.One公司正在研發的一個區塊鏈底層公鏈系統&#xff0c;目的是解決現有的區塊鏈應用性能低、安全性差、開發難度高以及過度依賴手續費的問題&#xff0c;實現分布式應用的性能擴展。EOS提供帳戶&#xff0c;身份驗證&#xff0c;數據庫&#xff0c;異步…