Sunucu modu

MTP sunucu modu bir düzenleyicinin, IDE'nin veya başka bir test aracının bir test uygulaması başlatmasına ve JSON-RPC aracılığıyla bulma ve yürütme gerçekleştirmesini sağlar. MTP çevresinde araç oluştururken sunucu modunu kullanın. Normal komut satırı ve CI çalıştırmaları için test uygulamasını doğrudan çalıştırın veya kullanın dotnet test.

Genel JSON-RPC sunucusunu --server veya --server jsonrpc ile başlatın.

Important

.NET SDK, --server dotnettestcli üzerinden ayrı bir dahili ikili protokol kullanır. Bu değeri kendiniz iletmeyin. dotnet test aktarım ve protokol bağımsız değişkenlerini yapılandırıyor.

Yalnızca kaynak istemcisini kullanma

MTP 2.4 kurallı JSON-RPC istemcisi sağlar. Microsoft.Testing.Platform.ServerMode.Client.Sources paketini ekleyin. Paket, çalışma zamanı derlemesi eklemek yerine projenize C# kaynağı ekler.

Yalnızca kaynak tasarımı aşağıdakileri sağlar:

  • Çalışma zamanı DLL’si veya ek dağıtım bağımlılığı yok.
  • Yerel AOT uyumlu, yansımasız serileştirme.
  • MTP sunucusuyla aynı depodan protokol türleri ve serileştirme kodu.

Eklenen MtpServerClient, IMtpServerClientve protokol türleri bir bağlantı başlatabilir, testleri bulabilir, testleri çalıştırabilir, sunucudan çıkış isteyebilir ve test düğümü güncelleştirmelerini raporlayabilir. Eklenen tüm türler, tüketen derlemede kalır internal .

İstemci gereksinimlerini karşılama

C# 12 veya üzerini kullanın. Paket, projenizin dil sürümü ayarını dikkate alır. Hedef çerçeveniz varsayılan olarak önceki bir C# sürümüne ayarlıysa, 12.0 değerini LangVersion veya sonraki bir sürüme ayarlayın. Paket ayrıca .NET Framework 4.6.2 ve netstandard2.0için iç uyumluluk türleri sağlar.

Yinelenen iç türlerden kaçınmak için paketi eklemeden önce MTP istemcisinin el ile yazılmış tüm kopyalarını kaldırın.

Başlatma modeli seçme

Test uygulamasını dış işlem olarak başlatmak için kullanın MtpServerClient.LaunchAsync. İstemci bu alt sürecin sahibidir ve gerektiğinde kapatma sırasında onu sonlandırır.

Process.Start kullanamayan gömülü konak veya UI iş parçacığı ortamı için MtpServerClient.LaunchInProcessAsync kullanın. Yöntem, test uygulamasını mevcut işlemde eşzamansız bir geri çağırma aracılığıyla çalıştırır. Geri çağırım ile istemci aynı işlemi paylaştığından, başlatma iş parçacığını engellemeyin.

Her iki başlatma modeli de bir geri döngü TCP aktarımı kullanır. Tarayıcı WebAssembly gerekli dinleyiciyi oluşturamadığından işlem içi başlatma PlatformNotSupportedException hatası verir. İşlem içi başlatma alternatif bir WebAssembly aktarımı sağlamaz.

İstemciyi kapat

Çağıran iş parçacığını engellemeden istemciyi ve başlatılan uygulamayı sonlandırmak için IMtpServerClient.ShutdownAsync() çağırın. Zaman uyumsuz yöntem, gömülü ana bilgisayarlarda UI iş parçacığının yanıt verebilirliğiyle ilgili sorunları ve kilitlenme sorunlarını önler.

İşlem içi bir konak için, MtpServerClientOptions.ServerShutdownTimeout istemci taşımayı kapattıktan sonra sonlandırmanın ne kadar bekleneceğini denetler. Varsayılan değer 30 saniyedir. Geri çağrının çıkış kodunu almak için kapatma işleminden sonra ServerExitCode öğesini okuyun. Değer, uygulama çalışırken veya uygulama bir çıkış kodu döndürmek yerine başarısız olduğunda kalır null .

İstemci durum bilgisini belirtme

MTP 2.4.1'den başlayarak, istemcinin test düğümü güncelleştirmelerini nasıl işlediğini açıklamak için null atanabilir MtpServerClientOptions.IsStateful seçeneğini ayarlayın:

Value Beyanname
true İstemci, oturum için adreslenebilir bir test düğümleri kümesini tutar ve bir IDE test gezgininin yapabileceği gibi, başka bir güncelleştirme değiştirene kadar her düğümün bilinen son durumunu korur.
false İstemci, bu test düğümü durumunu korumadan güncelleştirmeleri tüketir.
null (varsayılan) İstemci yeteneği bildirmez. Başlatma el sıkışması alanı içermez.

İstemci, deneysel capabilities.testing.isStateful protokol özelliği aracılığıyla açık bir Boole değeri gönderir. Durum bilgisi, bağlantı ömründen ve sunucunun MultiRequestSupport özelliğinden bağımsızdır. Bir istemci, sırf aynı bağlantı üzerinden birkaç istek gönderiyor diye durum bilgili olmaz.

MTP 2.4.0, varsayılan falsedeğeri olan null değer atanamayan bir Boole seçeneği kullanır. Bildirilmemiş bir özelliği korumak için MTP 2.4.1 veya sonraki bir sürümü kullanın.

Bir çerçeve veya uzantının içinde, bildirimi incelemek için deneysel IClientInfo hizmeti kullanın. Özellik bildirilmemiş olduğunda clientInfo.Capabilities.IsStateful olan muhafazakâr bir Boole sonucu için false okuyun. MTP 2.4.1 veya sonraki sürümlerinde, ClientCapabilitiesExtensions.GetIsStateful() bildirilmeyen, açıkça durum bilgisi olmayan ve durum bilgisi olan istemciler arasındaki ayrımı korur.

Protokol uyumluluğunu anlaşma

MTP 2.4'ten başlayarak, sunucu modu protokol anlaşması MTP NuGet paket sürümünden bağımsızdır. İstemci, desteklediği protokol sürümlerini bildirir ve sunucu ortak bir sürüm seçer. Desteklenen sürümler arasında örtüşme olmadığında, test uygulaması uyumsuz bir wire contract ile devam etmek yerine ProtocolError çıkış koduyla (12) sonlanır.

İletileri doğrulamak için sürümlenmiş sunucu modu 1.0 JSON şemasını kullanın. System.Text.Json ve Jsonite serileştiricileri aynı şemayı ve hata zarfını izler.

Ayrıca bakınız