- 重要な情報
- はじめに
- 用語集
- ガイド
- エージェント
- インテグレーション
- OpenTelemetry
- 開発者
- API
- CoScreen
- アプリ内
- Service Management
- インフラストラクチャー
- アプリケーションパフォーマンス
- 継続的インテグレーション
- ログ管理
- セキュリティ
- UX モニタリング
- 管理
対応言語
言語 | バージョン |
---|---|
.NET Framework | >= 4.6.1 |
.NET Core | >= 2.1 |
.NET Core | >= 3.1 |
.NET | >= 6 |
.NET | >= 7 |
対応するテストフレームワーク
テストフレームワーク | バージョン |
---|---|
xUnit | >= 2.2 |
NUnit | >= 3.0 |
MsTestV2 | >= 14 |
BenchmarkDotNet | >= 0.13.2 |
Datadog にテスト結果を報告するには、Datadog .NET ライブラリを構成する必要があります。
If you are running tests on an on-premises CI provider, such as Jenkins or self-managed GitLab CI, install the Datadog Agent on each worker node by following the Agent installation instructions. This is the recommended option as it allows you to automatically link test results to logs and underlying host metrics.
If you are using a Kubernetes executor, Datadog recommends using the Datadog Operator. The operator includes Datadog Admission Controller which can automatically inject the tracer library into the build pods. Note: If you use the Datadog Operator, there is no need to download and inject the tracer library since the Admission Controller can do this for you, so you can skip the corresponding step below. However, you still need to make sure that your pods set the environment variables or command-line parameters necessary to enable Test Visibility.
If you are not using Kubernetes or can’t use the Datadog Admission Controller and the CI provider is using a container-based executor, set the DD_TRACE_AGENT_URL
environment variable (which defaults to http://localhost:8126
) in the build container running the tracer to an endpoint that is accessible from within that container. Note: Using localhost
inside the build references the container itself and not the underlying worker node or any container where the Agent might be running in.
DD_TRACE_AGENT_URL
includes the protocol and port (for example, http://localhost:8126
) and takes precedence over DD_AGENT_HOST
and DD_TRACE_AGENT_PORT
, and is the recommended configuration parameter to configure the Datadog Agent’s URL for CI Visibility.
If you still have issues connecting to the Datadog Agent, use the Agentless Mode. Note: When using this method, tests are not correlated with logs and infrastructure metrics.
If you are using a cloud CI provider without access to the underlying worker nodes, such as GitHub Actions or CircleCI, configure the library to use the Agentless mode. For this, set the following environment variables:
DD_CIVISIBILITY_AGENTLESS_ENABLED=true
(Required)false
DD_API_KEY
(Required)(empty)
Additionally, configure the Datadog site to which you want to send data.
DD_SITE
(Required)datadoghq.com
以下のいずれかの方法で dd-trace
コマンドをインストールまたは更新してください。
以下のコマンドを実行して、.NET SDK を使用する。
dotnet tool update -g dd-trace
適切なバージョンをダウンロードする。
または、GitHub のリリースページよりダウンロードする。
テストスイートをインスツルメントするには、テストコマンドの前に dd-trace ci run
を付け、テスト対象のサービスまたはライブラリの名前を --dd-service
パラメーターとして指定し、テストが実行されている環境 (例: 開発者ワークステーションでテストを実行する場合は local
、CI プロバイダーでテストを実行する場合は ci
) を --dd-env
パラメーターとして指定します。例:
dotnet test の使用によって
dd-trace ci run --dd-service=my-dotnet-app --dd-env=ci -- dotnet test
VSTest.Console.exe の使用によって
dd-trace ci run --dd-service=my-dotnet-app --dd-env=ci -- VSTest.Console.exe {test_assembly}.dll
すべてのテストは自動的にインスツルメントされます。
コマンドライン引数または環境変数を使用して、CLI のデフォルト構成を変更できます。構成設定の完全なリストについては、以下を実行してください。
dd-trace ci run --help
次のリストは、主要な構成設定のデフォルト値を示しています。
--dd-service
DD_SERVICE
my-dotnet-app
--dd-env
DD_ENV
none
local
、ci
--agent-url
http://hostname:port
の形式で指定します。DD_TRACE_AGENT_URL
http://localhost:8126
他のすべての Datadog トレーサー構成オプションも使用できます。
テストにカスタムタグを追加するには、まずカスタムインスツルメンテーションを構成します。
現在アクティブなスパンを使用して、テストにカスタムタグを追加することができます。
// テスト内
var scope = Tracer.Instance.ActiveScope; // from Datadog.Trace;
if (scope != null) {
scope.Span.SetTag("test_owner", "my_team");
}
// テストは正常に続きます
// ...
これらのタグに対して、フィルターや group by
フィールドを作成するには、まずファセットを作成する必要があります。タグの追加についての詳細は、.NET カスタムインスツルメンテーションドキュメントのタグの追加セクションを参照してください。
テストにカスタムメトリクスを追加するには、まずカスタムインスツルメンテーションを構成します。
タグと同様に、現在アクティブなスパンを使用して、テストにカスタムメトリクスを追加できます。
// テスト内
var scope = Tracer.Instance.ActiveScope; // from Datadog.Trace;
if (scope != null) {
scope.Span.SetTag("memory_allocations", 16);
}
// テストは正常に続きます
// ...
これらのタグに対して、フィルターや視覚化を作成するには、まずファセットを作成する必要があります。タグの追加についての詳細は、.NET カスタムインスツルメンテーションドキュメントのタグの追加セクションを参照してください。
カスタムメトリクスについては、カスタムメトリクスの追加ガイドを参照してください。
コードカバレッジが利用できる場合、Datadog トレーサー (v2.31.0 以降) は、テストセッションの test.code_coverage.lines_pct
タグでそれを報告します。
コードカバレッジの計算に [Coverlet][101] を使用している場合、dd-trace
を実行する際に DD_CIVISIBILITY_EXTERNAL_CODE_COVERAGE_PATH
環境変数にレポートファイルへのパスを指定します。レポートファイルは、OpenCover または Cobertura 形式である必要があります。または、DD_CIVISIBILITY_CODE_COVERAGE_ENABLED=true
環境変数で、Datadog トレーサーに内蔵されているコードカバレッジ計算を有効にできます。
注: Intelligent Test Runner を使用する場合、トレーサーに内蔵されたコードカバレッジはデフォルトで有効になっています。
テストセッションの Coverage タブで、テストカバレッジの推移を見ることができます。
除外オプションの詳細については、コードカバレッジを参照してください。
ベンチマークテストをインスツルメンテーションするには
Datadog.Trace.BenchmarkDotNet
NuGet パッケージをプロジェクトに追加します (例えば、dotnet add package Datadog.Trace.BenchmarkDotNet
を使用します)。DatadogDiagnoser
属性または WithDatadog()
拡張機能を使って、 Datadog.Trace.BenchmarkDotNet
エクスポーターを使用するようにプロジェクトを構成してください。例:using BenchmarkDotNet.Attributes;
using Datadog.Trace.BenchmarkDotNet;
[DatadogDiagnoser]
[MemoryDiagnoser]
public class OperationBenchmark
{
[Benchmark]
public void Operation()
{
// ...
}
}
using BenchmarkDotNet.Configs;
using BenchmarkDotNet.Running;
using Datadog.Trace.BenchmarkDotNet;
var config = DefaultConfig.Instance
.WithDatadog();
BenchmarkRunner.Run<OperationBenchmark>(config);
Datadog uses Git information for visualizing your test results and grouping them by repository, branch, and commit. Git metadata is automatically collected by the test instrumentation from CI provider environment variables and the local .git
folder in the project path, if available.
If you are running tests in non-supported CI providers or with no .git
folder, you can set the Git information manually using environment variables. These environment variables take precedence over any auto-detected information. Set the following environment variables to provide Git information:
DD_GIT_REPOSITORY_URL
git@github.com:MyCompany/MyApp.git
, https://github.com/MyCompany/MyApp.git
DD_GIT_BRANCH
develop
DD_GIT_TAG
1.0.1
DD_GIT_COMMIT_SHA
a18ebf361cc831f5535e58ec4fae04ffd98d8152
DD_GIT_COMMIT_MESSAGE
Set release number
DD_GIT_COMMIT_AUTHOR_NAME
John Smith
DD_GIT_COMMIT_AUTHOR_EMAIL
john@example.com
DD_GIT_COMMIT_AUTHOR_DATE
2021-03-12T16:00:28Z
DD_GIT_COMMIT_COMMITTER_NAME
Jane Smith
DD_GIT_COMMIT_COMMITTER_EMAIL
jane@example.com
DD_GIT_COMMIT_COMMITTER_DATE
2021-03-12T16:00:28Z
dd-trace
のバージョンに依存します。カスタムインスツルメンテーションを使用するには、dd-trace
と Datadog.Trace
の NuGet パッケージのバージョンを同期させておく必要があります。.NET アプリケーションでカスタムインスツルメンテーションを使用するには
dd-trace --version
を実行します。Datadog.Trace
NuGet パッケージをアプリケーションに追加します。Datadog.Trace.Tracer.Instance
プロパティを介してグローバルトレーサーにアクセスし、新しいスパンを作成します。カスタムインスツルメンテーションのスパンやタグの追加方法については、.NET カスタムインスツルメンテーションのドキュメントを参照してください。
Datadog.Trace
NuGet パッケージを追加する必要があります。.NET プロジェクトで XUnit、NUnit、MSTest を使用している場合、CI Visibility は自動的にインスツルメンテーションを行い、Datadog にテスト結果を送信します。サポートされていないテストフレームワークを使用している場合、または別のテストメカニズムを持っている場合、代わりに API を使用して Datadog にテスト結果を報告することができます。
この API は、テストモジュール、テストスイート、テストの 3 つの概念に基づいています。
テストモジュールは、テストを含む .NET アセンブリを表します。
テストモジュールを開始するには、TestModule.Create()
を呼び出し、テストが配置されているモジュールの名前または .NET アセンブリ名を渡します。
すべてのテストが終了したら、module.Close()
または module.CloseAsync()
を呼び出し、これによりライブラリは残っているテスト結果をすべてバックエンドに送信します。
テストスイートは、テストの集合で構成されます。これらのテストは、共通の初期化および終了メソッドを持ち、いくつかの変数を共有することができます。.NET では、通常、複数のテストメソッドを含むテストクラスまたはフィクスチャとして実装されます。テストスイートは、属性やエラー情報などの追加情報を持つこともできます。
module.GetOrCreateSuite()
を呼び出し、テストスイートの名前を渡すことでテストモジュール内にテストスイートを作成します。
スイートの中の関連するテストがすべて実行を終えたら suite.Close()
を呼び出します。
各テストはスイート内で実行され、TestStatus.Pass
、TestStatus.Fail
、TestStatus.Skip
のいずれかのステータスで終了する必要があります。
テストは、オプションで以下のような付加情報を持つことができます。
suite.CreateTest()
を呼び出し、テストの名前を渡すことで、スイート内のテストを作成します。テストが終了したら、あらかじめ定義されたステータスのいずれかを指定して test.Close()
を呼び出します。
namespace Datadog.Trace.Ci
{
/// <summary>
/// CI Visibility テストモジュール
/// </summary>
public sealed class TestModule
{
/// <summary>
/// テストフレームワークを取得します
/// </summary>
public string? Framework { get; }
/// <summary>
/// モジュール名を取得します
/// </summary>
public string Name { get; }
/// <summary>
/// テストモジュールの開始日を取得します
/// </summary>
public System.DateTimeOffset StartTime { get; }
/// <summary>
/// テストモジュールを閉じます
/// </summary>
/// <remarks>可能な限り CloseAsync() バージョンを使用します。</remarks>
public void Close() { }
/// <summary>
/// テストモジュールを閉じます
/// </summary>
/// <remarks>可能な限り CloseAsync() バージョンを使用します。</remarks>
/// <param name="duration">テストモジュールの期間</param>
public void Close(System.TimeSpan? duration) { }
/// <summary>
/// テストモジュールを閉じます
/// </summary>
/// <returns>タスクインスタンス </returns>
public System.Threading.Tasks.Task CloseAsync() { }
/// <summary>
/// テストモジュールを閉じます
/// </summary>
/// <param name="duration">テストモジュールの期間</param>
/// <returns>タスクインスタンス </returns>
public System.Threading.Tasks.Task CloseAsync(System.TimeSpan? duration) { }
/// <summary>
/// このセッションのために新しいテストスイートを作成します
/// </summary>
/// <param name="name">テストスイートの名前</param>
/// <returns>テストスイートインスタンス</returns>
public Datadog.Trace.Ci.TestSuite GetOrCreateSuite(string name) { }
/// <summary>
/// このセッションのために新しいテストスイートを作成します
/// </summary>
/// <param name="name">テストスイートの名前</param>
/// <param name="startDate">テストスイートの開始日</param>
/// <returns>テストスイートインスタンス</returns>
public Datadog.Trace.Ci.TestSuite GetOrCreateSuite(string name, System.DateTimeOffset? startDate) { }
/// <summary>
/// 例外からエラー情報を設定します
/// </summary>
/// <param name="exception">例外インスタンス</param>
public void SetErrorInfo(System.Exception exception) { }
/// <summary>
/// エラー情報を設定します
/// </summary>
/// <param name="type">エラータイプ</param>
/// <param name="message">エラーメッセージ</param>
/// <param name="callStack">エラーのコールスタック</param>
public void SetErrorInfo(string type, string message, string? callStack) { }
/// <summary>
/// 数字タグをテストに設定します
/// </summary>
/// <param name="key">タグのキー</param>
/// <param name="value">タグの値</param>
public void SetTag(string key, double? value) { }
/// <summary>
/// 文字列タグをテストに設定します
/// </summary>
/// <param name="key">タグのキー</param>
/// <param name="value">タグの値</param>
public void SetTag(string key, string? value) { }
/// <summary>
/// 新しいテストモジュールを作成します
/// </summary>
/// <param name="name">テストモジュール名</param>
/// <returns>新しいテストモジュールインスタンス</returns>
public static Datadog.Trace.Ci.TestModule Create(string name) { }
/// <summary>
/// 新しいテストモジュールを作成します
/// </summary>
/// <param name="name">テストモジュール名</param>
/// <param name="framework">テスティングフレームワーク名</param>
/// <param name="frameworkVersion">テスティングフレームワークのバージョン</param>
/// <returns>新しいテストモジュールインスタンス</returns>
public static Datadog.Trace.Ci.TestModule Create(string name, string framework, string frameworkVersion) { }
/// <summary>
/// 新しいテストモジュールを作成します
/// </summary>
/// <param name="name">テストモジュール名</param>
/// <param name="framework">テスティングフレームワーク名</param>
/// <param name="frameworkVersion">テスティングフレームワークのバージョン</param>
/// <param name="startDate">テストセッション開始日</param>
/// <returns>新しいテストモジュールインスタンス</returns>
public static Datadog.Trace.Ci.TestModule Create(string name, string framework, string frameworkVersion, System.DateTimeOffset startDate) { }
}
/// <summary>
/// CI Visibility テストスイート
/// </summary>
public sealed class TestSuite
{
/// <summary>
/// このスイートのテストモジュールを取得します
/// </summary>
public Datadog.Trace.Ci.TestModule Module { get; }
/// <summary>
/// テストスイート名を取得します
/// </summary>
public string Name { get; }
/// <summary>
/// テストスイートの開始日を取得します
/// </summary>
public System.DateTimeOffset StartTime { get; }
/// <summary>
/// テストスイートを閉じます
/// </summary>
public void Close() { }
/// <summary>
/// テストスイートを閉じます
/// </summary>
/// <param name="duration">テストスイートの所要時間</param>
public void Close(System.TimeSpan? duration) { }
/// <summary>
/// このスイートの新しいテストを作成します
/// </summary>
/// <param name="name">テスト名</param>
/// <returns>テストインスタンス</returns>
public Datadog.Trace.Ci.Test CreateTest(string name) { }
/// <summary>
/// このスイートの新しいテストを作成します
/// </summary>
/// <param name="name">テストの名前</param>
/// <param name="startDate">テスト開始日</param>
/// <returns>テストインスタンス</returns>
public Datadog.Trace.Ci.Test CreateTest(string name, System.DateTimeOffset startDate) { }
/// <summary>
/// 例外からエラー情報を設定します
/// </summary>
/// <param name="exception">例外インスタンス</param>
public void SetErrorInfo(System.Exception exception) { }
/// <summary>
/// エラー情報を設定します
/// </summary>
/// <param name="type">エラータイプ</param>
/// <param name="message">エラーメッセージ</param>
/// <param name="callStack">エラーのコールスタック</param>
public void SetErrorInfo(string type, string message, string? callStack) { }
/// <summary>
/// 数字タグをテストに設定します
/// </summary>
/// <param name="key">タグのキー</param>
/// <param name="value">タグの値</param>
public void SetTag(string key, double? value) { }
/// <summary>
/// 文字列タグをテストに設定します
/// </summary>
/// <param name="key">タグのキー</param>
/// <param name="value">タグの値</param>
public void SetTag(string key, string? value) { }
}
/// <summary>
/// CI Visibility テスト
/// </summary>
public sealed class Test
{
/// <summary>
/// テスト名を取得します
/// </summary>
public string? Name { get; }
/// <summary>
/// テスト開始日を取得します
/// </summary>
public System.DateTimeOffset StartTime { get; }
/// <summary>
/// このテストのテストスイートを取得します
/// </summary>
public Datadog.Trace.Ci.TestSuite Suite { get; }
/// <summary>
/// ベンチマークデータを追加します
/// </summary>
/// <param name="measureType">メジャータイプ</param>
/// <param name="info">メジャー情報</param>
/// <param name="statistics">統計値</param>
public void AddBenchmarkData(Datadog.Trace.Ci.BenchmarkMeasureType measureType, string info, in Datadog.Trace.Ci.BenchmarkDiscreteStats statistics) { }
/// <summary>
/// テストを閉じます
/// </summary>
/// <param name="status">テストステータス</param>
public void Close(Datadog.Trace.Ci.TestStatus status) { }
/// <summary>
/// テストを閉じます
/// </summary>
/// <param name="status">テストステータス</param>
/// <param name="duration">テストスイートの期間</param>
public void Close(Datadog.Trace.Ci.TestStatus status, System.TimeSpan? duration) { }
/// <summary>
/// テストを閉じます
/// </summary>
/// <param name="status">テストステータス</param>
/// <param name="duration">テストスイートの期間</param>
/// <param name="skipReason">この場合 </param>
public void Close(Datadog.Trace.Ci.TestStatus status, System.TimeSpan? duration, string? skipReason) { }
/// <summary>
/// ベンチマークのメタデータを設定します
/// </summary>
/// <param name="hostInfo">ホスト情報</param>
/// <param name="jobInfo">ジョブ情報</param>
public void SetBenchmarkMetadata(in Datadog.Trace.Ci.BenchmarkHostInfo hostInfo, in Datadog.Trace.Ci.BenchmarkJobInfo jobInfo) { }
/// <summary>
/// 例外からエラー情報を設定します
/// </summary>
/// <param name="exception">例外インスタンス</param>
public void SetErrorInfo(System.Exception exception) { }
/// <summary>
/// エラー情報を設定します
/// </summary>
/// <param name="type">エラータイプ</param>
/// <param name="message">エラーメッセージ</param>
/// <param name="callStack">エラーのコールスタック</param>
public void SetErrorInfo(string type, string message, string? callStack) { }
/// <summary>
/// テストパラメーターを設定します
/// </summary>
/// <param name="parameters">TestParameters インスタンス</param>
public void SetParameters(Datadog.Trace.Ci.TestParameters parameters) { }
/// <summary>
/// 数字タグをテストに設定します
/// </summary>
/// <param name="key">タグのキー</param>
/// <param name="value">タグの値</param>
public void SetTag(string key, double? value) { }
/// <summary>
/// 文字列タグをテストに設定します
/// </summary>
/// <param name="key">タグのキー</param>
/// <param name="value">タグの値</param>
public void SetTag(string key, string? value) { }
/// <summary>
/// テスト方法情報を設定します
/// </summary>
/// <param name="methodInfo">Test MethodInfo インスタンス</param>
public void SetTestMethodInfo(System.Reflection.MethodInfo methodInfo) { }
/// <summary>
/// テストの特徴を設定します
/// </summary>
/// <param name="traits">特徴ディクショナリー</param>
public void SetTraits(System.Collections.Generic.Dictionary<string, System.Collections.Generic.List<string>> traits) { }
}
/// <summary>
/// テストステータス
/// </summary>
public enum TestStatus
{
/// <summary>
/// パステストステータス
/// </summary>
Pass = 0,
/// <summary>
/// フェイルテストステータス
/// </summary>
Fail = 1,
/// <summary>
/// スキップテストステータス
/// </summary>
Skip = 2,
}
/// <summary>
/// テストパラメーター
/// </summary>
public class TestParameters
{
/// <summary>
/// テストの引数を取得または設定します
/// </summary>
public System.Collections.Generic.Dictionary<string, object>? Arguments { get; set; }
/// <summary>
/// テストパラメーターメタデータを取得または設定します
/// </summary>
public System.Collections.Generic.Dictionary<string, object>? Metadata { get; set; }
}
/// <summary>
/// ベンチマーク測定の離散統計
/// </summary>
public readonly struct BenchmarkDiscreteStats
{
/// <summary>
/// 尖度値
/// </summary>
public readonly double Kurtosis;
/// <summary>
/// 最大値
/// </summary>
public readonly double Max;
/// <summary>
/// 平均値
/// </summary>
public readonly double Mean;
/// <summary>
/// 中央値
/// </summary>
public readonly double Median;
/// <summary>
/// 最小値
/// </summary>
public readonly double Min;
/// <summary>
/// サンプル数
/// </summary>
public readonly int N;
/// <summary>
/// 90 パーセンタイル値
/// </summary>
public readonly double P90;
/// <summary>
/// 95 パーセンタイル値
/// </summary>
public readonly double P95;
/// <summary>
/// 99 パーセンタイル値
/// </summary>
public readonly double P99;
/// <summary>
/// 歪度値
/// </summary>
public readonly double Skewness;
/// <summary>
/// 標準偏差値
/// </summary>
public readonly double StandardDeviation;
/// <summary>
/// 標準エラー値
/// </summary>
public readonly double StandardError;
/// <summary>
/// <see cref="BenchmarkDiscreteStats"/> 構造体の新しいインスタンスを初期化します。
/// </summary>
/// <param name="n">サンプル数</param>
/// <param name="max">最大値</param>
/// <param name="min">最小値</param>
/// <param name="mean">平均値</param>
/// <param name="median">中央値</param>
/// <param name="standardDeviation">標準偏差値</param>
/// <param name="standardError">標準エラー値</param>
/// <param name="kurtosis">尖度値</param>
/// <param name="skewness">歪度値</param>
/// <param name="p99">99 パーセンタイル値</param>
/// <param name="p95">95 パーセンタイル値</param>
/// <param name="p90">90 パーセンタイル値</param>
public BenchmarkDiscreteStats(int n, double max, double min, double mean, double median, double standardDeviation, double standardError, double kurtosis, double skewness, double p99, double p95, double p90) { }
/// <summary>
/// double の配列からベンチマークの離散統計値を取得します
/// </summary>
/// <param name="values">double の配列</param>
/// <returns>ベンチマーク離散統計インスタンス</returns>
public static Datadog.Trace.Ci.BenchmarkDiscreteStats GetFrom(double[] values) { }
}
/// <summary>
/// ベンチマークホスト情報
/// </summary>
public struct BenchmarkHostInfo
{
/// <summary>
/// クロノメーター周波数
/// </summary>
public double? ChronometerFrequencyHertz;
/// <summary>
/// クロノメーター分解能
/// </summary>
public double? ChronometerResolution;
/// <summary>
/// ロジカルコア数
/// </summary>
public int? LogicalCoreCount;
/// <summary>
/// OS バージョン
/// </summary>
public string? OsVersion;
/// <summary>
/// 物理コア数
/// </summary>
public int? PhysicalCoreCount;
/// <summary>
/// 物理プロセッサー数
/// </summary>
public int? ProcessorCount;
/// <summary>
/// プロセッサー最大周波数ヘルツ
/// </summary>
public double? ProcessorMaxFrequencyHertz;
/// <summary>
/// プロセッサー名
/// </summary>
public string? ProcessorName;
/// <summary>
/// ランタイムバージョン
/// </summary>
public string? RuntimeVersion;
}
/// <summary>
/// ベンチマークジョブ情報
/// </summary>
public struct BenchmarkJobInfo
{
/// <summary>
/// ジョブの説明
/// </summary>
public string? Description;
/// <summary>
/// ジョブプラットフォーム
/// </summary>
public string? Platform;
/// <summary>
/// ジョブランタイムの呼称
/// </summary>
public string? RuntimeMoniker;
/// <summary>
/// ジョブランタイム名
/// </summary>
public string? RuntimeName;
}
/// <summary>
/// ベンチマークメジャータイプ
/// </summary>
public enum BenchmarkMeasureType
{
/// <summary>
/// ナノ秒単位の期間
/// </summary>
Duration = 0,
/// <summary>
/// ナノ秒単位の実行時間
/// </summary>
RunTime = 1,
/// <summary>
/// バイト単位の平均ヒープ割り当て量
/// </summary>
MeanHeapAllocations = 2,
/// <summary>
/// バイト単位の合計ヒープ割り当て量
/// </summary>
TotalHeapAllocations = 3,
/// <summary>
/// ナノ秒単位のアプリケーション起動
/// </summary>
ApplicationLaunch = 4,
/// <summary>
/// ガベージコレクター gen0 カウント
/// </summary>
GarbageCollectorGen0 = 5,
/// <summary>
/// ガベージコレクター gen1 カウント
/// </summary>
GarbageCollectorGen1 = 6,
/// <summary>
/// ガベージコレクター gen2 カウント
/// </summary>
GarbageCollectorGen2 = 7,
/// <summary>
/// メモリ総動作数
/// </summary>
MemoryTotalOperations = 8,
}
}
次のコードは、API の簡単な使い方を表しています。
using System.Reflection;
using Datadog.Trace.Ci;
var module = TestModule.Create(Assembly.GetExecutingAssembly().GetName().Name ?? "(dyn_module)");
module.SetTag("ModuleTag", "Value");
var suite = module.GetOrCreateSuite("MySuite");
suite.SetTag("SuiteTag", 42);
var test = suite.CreateTest("Test01");
test.SetTag("TestTag", "Value");
test.SetParameters(new TestParameters
{
Arguments = new Dictionary<string, object>
{
["a"] = 42,
["b"] = 0,
}
});
test.SetTraits(new Dictionary<string, List<string>>
{
["Category"] = new () { "UnitTest" }
});
try
{
var a = 42;
var b = 0;
var c = a / b;
}
catch (Exception ex)
{
test.SetErrorInfo(ex);
}
test.Close(TestStatus.Fail);
suite.Close();
await module.CloseAsync();
最後に必ず module.Close()
または module.CloseAsync()
を呼び出し、すべてのテストデータが Datadog に送信されるようにします。