- 重要な情報
- はじめに
- 用語集
- ガイド
- エージェント
- インテグレーション
- OpenTelemetry
- 開発者
- API
- CoScreen
- アプリ内
- Service Management
- インフラストラクチャー
- アプリケーションパフォーマンス
- 継続的インテグレーション
- ログ管理
- セキュリティ
- UX モニタリング
- 管理
対応言語:
対応プラットフォーム:
注: Swift Concurrency を使用している場合、非同期タスクの正確なスパン表現のために Xcode >= 13.2 が必要です。
テストスイートレベルの可視化は dd-sdk-swift-testing>=2.1.0
からのみサポートされます。
テストフレームワークのインストール方法は 3 つあります。
dd-sdk-swift-testing
パッケージを追加します。これは、https://github.com/DataDog/dd-sdk-swift-testing
にあります。DatadogSDKTesting
とテストターゲットをリンクします。dd-sdk-swift-testing
を追加します。例:.package(url: "https://github.com/DataDog/dd-sdk-swift-testing.git", from: "2.1.0")
.product(name: "DatadogSDKTesting", package: "dd-sdk-swift-testing")
DatadogSDKTesting
依存関係を Podfile
のテストターゲットに追加します。target 'MyApp' do
# ...
target 'MyAppTests' do
inherit! :search_paths
pod 'DatadogSDKTesting'
end
end
リリースのページから DatadogSDKTesting.zip
をダウンロードし、解凍します。
出来上がった XCFramework にテストターゲットをコピーしてリンクします。
GitHub を使用している場合、GitHub Marketplace から Swift テストアクションを使用して、テストを自動的に構成して実行することができます。デフォルトでは、このページで説明されている残りの構成はスキップできますが (アクション自体の構成を除く)、設定環境変数を使って、追加機能の無効化や設定をすることができます。
Cocoapods や Framework のリンクなどの他の方法と比較して、Swift のテストアクションオプションは構成と実行の柔軟性に欠けるかもしれませんが、コードの変更は必要ではありません。
テストのインスツルメンテーションを有効にするには、テストターゲットに以下の環境変数を、または以下で説明されているとおり Info.plist
ファイルに追加します。テストプランを使用している場合は、Expand variables based on
コンボまたは Target for Variable Expansion
でメインターゲットを選択する必要があります。
UITests では、フレームワークにより自動的に値がアプリケーションに挿入されるため、環境変数はテストターゲットのみに設定する必要があります。
テストのインスツルメンテーションを有効にするには、以下の環境変数をテストのコマンドライン実行に設定する必要があります。代わりに、テストを実行する前に環境に設定することもできますし、コマンドに前置きすることもできます。
DD_TEST_RUNNER=1 DD_API_KEY= DD_APPLICATION_KEY= DD_SITE=us1 SRCROOT=$PWD swift test ...
or
DD_TEST_RUNNER=1 DD_API_KEY= DD_APPLICATION_KEY= DD_SITE=us1 SRCROOT=$PWD xcodebuild test -scheme ...
テストターゲットにこれらすべての変数を設定します。
DD_TEST_RUNNER
$(DD_TEST_RUNNER)
に設定すると、テストプロセスの外部 (CI ビルドなど) で定義された環境変数を使用してテストインスツルメンテーションを有効または無効にできます。false
$(DD_TEST_RUNNER)
DD_API_KEY
(empty)
DD_APPLICATION_KEY
(empty)
DD_SERVICE
my-ios-app
DD_ENV
$(DD_ENV)
に設定して、実行時に環境変数を使用して設定できるようにします。none
$(DD_ENV)
ci
、local
SRCROOT
$(SRCROOT)
を使用します。(empty)
$(SRCROOT)
/Users/ci/source/MyApp
さらに、選択したサイトを使用するように Datadog サイトを構成します ():
DD_SITE
(必須)datadoghq.com
Datadog は Git の情報を使ってテスト結果を可視化し、リポジトリ、ブランチ、コミットごとにグループ化します。Git メタデータは CI プロバイダー環境変数を使用して自動的に収集され、テストアプリケーションに転送する必要があります (完全なリストについては、以下のセクション CI プロバイダー環境変数を参照してください)。
シミュレーターでテストを実行すると、ローカルの .git
フォルダーを使用して完全な Git メタデータが収集されます。この場合、Git 関連の環境変数を転送する必要はありません。
サポートされていない CI プロバイダーでテストを実行する場合や、.git
フォルダがない場合は、環境変数を使って Git の情報を手動で設定することができます。これらの環境変数は、自動検出された情報よりも優先されます。Git の情報を提供するために、以下の環境変数を設定します。
DD_GIT_REPOSITORY_URL
git@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
インストール後、通常どおりにテストを実行します。たとえば、xcodebuild test
コマンドを使用します。テスト、ネットワークリクエスト、アプリケーションクラッシュは自動的に記録されます。CI でテストを実行するときに、環境変数を渡します。次に例を示します。
DD_TEST_RUNNER=1 DD_ENV=ci DD_SITE= xcodebuild \
-project "MyProject.xcodeproj" \
-scheme "MyScheme" \
-destination "platform=macOS,arch=x86_64" \
test
UITests では、テストターゲットと UITests から実行されるアプリケーションの両方がフレームワークとリンクしている必要があります。フレームワークにより自動的に値がアプリケーションに挿入されるため、環境変数はテストターゲットのみに設定する必要があります。
テスト対象のアプリケーションが RUM を使用してインスツルメントされている場合、UI テストの結果と生成された RUM セッションは自動的にリンクされます。RUM の詳細については、RUM iOS インテグレーションガイドを参照してください。iOS RUM バージョン >= 1.10 が必要です。
以下のコンフィギュレーション設定の場合:
Boolean
変数には 1
、0
、true
、false
、YES
、NO
のいずれかを使用できますString
リスト変数には ,
または ;
で区切られた要素の一覧が許可されますDD_ENABLE_STDOUT_INSTRUMENTATION
stdout
に書き込まれたメッセージ (例えば print()
) をキャプチャして、ログとして報告します。これは請求額に影響を与えるかもしれません。(ブール値)DD_ENABLE_STDERR_INSTRUMENTATION
stderr
に書き込まれたメッセージ (例えば NSLog()
や UITest のステップ) をキャプチャして、ログとして報告します。これは請求額に影響を与えるかもしれません。(ブール値)このフレームワークでは、サポートされているすべてのライブラリの自動インスツルメンテーションが可能ですが、これが望ましくない場合もあります。次の環境変数を(または以下で説明されているとおり Info.plist
ファイルに)設定することにより、特定のライブラリの自動インスツルメンテーションを無効にできます。
DD_DISABLE_NETWORK_INSTRUMENTATION
DD_DISABLE_RUM_INTEGRATION
DD_DISABLE_SOURCE_LOCATION
DD_DISABLE_CRASH_HANDLER
ネットワークの自動インスツルメンテーションでは、以下の追加設定を構成します。
DD_DISABLE_HEADERS_INJECTION
DD_INSTRUMENTATION_EXTRA_HEADERS
DD_EXCLUDED_URLS
DD_ENABLE_RECORD_PAYLOAD
DD_MAX_PAYLOAD_SIZE
1024
(整数)DD_DISABLE_NETWORK_CALL_STACK
DD_ENABLE_NETWORK_CALL_STACK_SYMBOLICATED
自身のインフラストラクチャーでテストを実行している場合 (macOS やシミュレータのテスト)、Datadog Agent をインストールして以下を設定することで、テストとインフラストラクチャーのメトリクスを関連付けることができます。
DD_CIVISIBILITY_REPORT_HOSTNAME
モジュール DatadogSDKTesting
をインポートしクラス: DDInstrumentationControl
を使用することで、Swift または Objective-C の一部のテストで特定の自動インスツルメンテーションを有効/無効にすることも可能です。
DD_TAGS
環境変数を(または以下で説明されているとおり Info.plist
ファイルに)使用できます。スペース区切りの key:tag
のペアを含む必要があります。例:
DD_TAGS=tag-key-0:tag-value-0 tag-key-1:tag-value-1
値の 1 つが $
の文字で始まる場合、同じ名前(存在する場合)の環境変数に置換されます。例:
DD_TAGS=home:$HOME
$
文字の使用は、非環境変数対応文字 (a-z
、A-Z
または _
) を含む場合、値の始まりの環境変数の置換もサポートします。例:
FOO = BAR
DD_TAGS=key1:$FOO-v1 // expected: key1:BAR-v1
注: OpenTelemetry の使用は Swift でのみサポートされています。
Datadog Swift テストフレームワークは、内部的に OpenTelemetry をトレーシングテクノロジーとして使用します。OpenTelemetry トレーサーには、DDInstrumentationControl.openTelemetryTracer
を使用してアクセスでき、OpenTelemetry API を使用します。たとえば、タグまたは属性を追加するには、
import DatadogSDKTesting
import OpenTelemetryApi
let tracer = DDInstrumentationControl.openTelemetryTracer as? Tracer
let span = tracer?.spanBuilder(spanName: "ChildSpan").startSpan()
span?.setAttribute(key: "OTTag2", value: "OTValue2")
span?.end()
テストターゲットは、opentelemetry-swift
で明示的にリンクする必要があります。
コードカバレッジが利用できる場合、Datadog SDK (v2.2.7+) は、テストセッションの test.code_coverage.lines_pct
タグでそれを報告します。
Xcode では、Test Scheme でコードカバレッジの報告を有効にすることができます。
テストセッションの Coverage タブで、テストカバレッジの推移を見ることができます。
または、環境変数を設定する代わりに、コンフィギュレーションの値を(アプリバンドルではなく)テストバンドルの Info.plist
ファイルに追加して提供することも可能です。環境変数と Info.plist
ファイルに同じ設定がされている場合は、環境変数が優先されます。
環境変数 | 値 |
---|---|
JENKINS_URL | $(JENKINS_URL) |
WORKSPACE | $(WORKSPACE) |
BUILD_TAG | $(BUILD_TAG) |
BUILD_NUMBER | $(BUILD_NUMBER) |
BUILD_URL | $(BUILD_URL) |
JOB_NAME | $(JOB_NAME) |
DD_CUSTOM_TRACE_ID | $(DD_CUSTOM_TRACE_ID) |
物理デバイスのテスト用追加 Git コンフィギュレーション:
環境変数 | 値 |
---|---|
GIT_COMMIT | $(GIT_COMMIT) |
GIT_URL | $(GIT_URL) |
GIT_URL_1 | $(GIT_URL_1) |
GIT_BRANCH | $(GIT_BRANCH) |
環境変数 | 値 |
---|---|
CIRCLECI | $(CIRCLECI) |
CIRCLE_WORKING_DIRECTORY | $(CIRCLE_WORKING_DIRECTORY) |
CIRCLE_BUILD_NUM | $(CIRCLE_BUILD_NUM) |
CIRCLE_BUILD_URL | $(CIRCLE_BUILD_URL) |
CIRCLE_WORKFLOW_ID | $(CIRCLE_WORKFLOW_ID) |
CIRCLE_PROJECT_REPONAME | $(CIRCLE_PROJECT_REPONAME) |
物理デバイスのテスト用追加 Git コンフィギュレーション:
環境変数 | 値 |
---|---|
CIRCLE_SHA1 | $(CIRCLE_SHA1) |
CIRCLE_REPOSITORY_URL | $(CIRCLE_REPOSITORY_URL) |
CIRCLE_BRANCH | $(CIRCLE_BRANCH) |
CIRCLE_TAG | $(CIRCLE_TAG) |
環境変数 | 値 |
---|---|
GITLAB_CI | $(GITLAB_CI) |
CI_PROJECT_DIR | $(CI_PROJECT_DIR) |
CI_JOB_STAGE | $(CI_JOB_STAGE) |
CI_JOB_NAME | $(CI_JOB_NAME) |
CI_JOB_URL | $(CI_JOB_URL) |
CI_PIPELINE_ID | $(CI_PIPELINE_ID) |
CI_PIPELINE_IID | $(CI_PIPELINE_IID) |
CI_PIPELINE_URL | $(CI_PIPELINE_URL) |
CI_PROJECT_PATH | $(CI_PROJECT_PATH) |
CI_PROJECT_URL | $(CI_PROJECT_URL) |
物理デバイスのテスト用追加 Git コンフィギュレーション:
環境変数 | 値 |
---|---|
CI_COMMIT_SHA | $(CI_COMMIT_SHA) |
CI_REPOSITORY_URL | $(CI_REPOSITORY_URL) |
CI_COMMIT_BRANCH | $(CI_COMMIT_BRANCH) |
CI_COMMIT_TAG | $(CI_COMMIT_TAG) |
CI_COMMIT_MESSAGE | $(CI_COMMIT_MESSAGE) |
CI_COMMIT_AUTHOR | $(CI_COMMIT_AUTHOR) |
CI_COMMIT_TIMESTAMP | $(CI_COMMIT_TIMESTAMP) |
環境変数 | 値 |
---|---|
TRAVIS | $(TRAVIS) |
TRAVIS_BUILD_DIR | $(TRAVIS_BUILD_DIR) |
TRAVIS_BUILD_ID | $(TRAVIS_BUILD_ID) |
TRAVIS_BUILD_NUMBER | $(TRAVIS_BUILD_NUMBER) |
TRAVIS_BUILD_WEB_URL | $(TRAVIS_BUILD_WEB_URL) |
TRAVIS_JOB_WEB_URL | $(TRAVIS_JOB_WEB_URL) |
TRAVIS_REPO_SLUG | $(TRAVIS_REPO_SLUG) |
TRAVIS_PULL_REQUEST_SLUG | $(TRAVIS_PULL_REQUEST_SLUG) |
物理デバイスのテスト用追加 Git コンフィギュレーション:
環境変数 | 値 |
---|---|
TRAVIS_PULL_REQUEST_BRANCH | $(TRAVIS_PULL_REQUEST_BRANCH) |
TRAVIS_BRANCH | $(TRAVIS_BRANCH) |
TRAVIS_COMMIT | $(TRAVIS_COMMIT) |
TRAVIS_TAG | $(TRAVIS_TAG) |
TRAVIS_COMMIT_MESSAGE | $(TRAVIS_COMMIT_MESSAGE) |
環境変数 | 値 |
---|---|
GITHUB_WORKSPACE | $(GITHUB_WORKSPACE) |
GITHUB_REPOSITORY | $(GITHUB_REPOSITORY) |
GITHUB_RUN_ID | $(GITHUB_RUN_ID) |
GITHUB_RUN_NUMBER | $(GITHUB_RUN_NUMBER) |
GITHUB_WORKFLOW | $(GITHUB_WORKFLOW) |
GITHUB_SHA | $(GITHUB_SHA) |
GITHUB_SERVER_URL | $(GITHUB_SERVER_URL) |
GITHUB_RUN_ATTEMPT | $(GITHUB_RUN_ATTEMPT) |
物理デバイスのテスト用追加 Git コンフィギュレーション:
環境変数 | 値 |
---|---|
GITHUB_REF | $(GITHUB_REF) |
GITHUB_HEAD_REF | $(GITHUB_HEAD_REF) |
GITHUB_REPOSITORY | $(GITHUB_REPOSITORY) |
環境変数 | 値 |
---|---|
BUILDKITE | $(BUILDKITE) |
BUILDKITE_BUILD_CHECKOUT_PATH | $(BUILDKITE_BUILD_CHECKOUT_PATH) |
BUILDKITE_BUILD_ID | $(BUILDKITE_BUILD_ID) |
BUILDKITE_BUILD_NUMBER | $(BUILDKITE_BUILD_NUMBER) |
BUILDKITE_BUILD_URL | $(BUILDKITE_BUILD_URL) |
BUILDKITE_PIPELINE_SLUG | $(BUILDKITE_PIPELINE_SLUG) |
BUILDKITE_JOB_ID | $(BUILDKITE_JOB_ID) |
物理デバイスのテスト用追加 Git コンフィギュレーション:
環境変数 | 値 |
---|---|
BUILDKITE_COMMIT | $(BUILDKITE_COMMIT) |
BUILDKITE_REPO | $(BUILDKITE_REPO) |
BUILDKITE_BRANCH | $(BUILDKITE_BRANCH) |
BUILDKITE_TAG | $(BUILDKITE_TAG) |
BUILDKITE_MESSAGE | $(BUILDKITE_MESSAGE) |
BUILDKITE_BUILD_AUTHOR | $(BUILDKITE_BUILD_AUTHOR) |
BUILDKITE_BUILD_AUTHOR_EMAIL | $(BUILDKITE_BUILD_AUTHOR_EMAIL) |
環境変数 | 値 |
---|---|
BITBUCKET_CLONE_DIR | $(BITBUCKET_CLONE_DIR) |
BITBUCKET_BUILD_NUMBER | $(BITBUCKET_BUILD_NUMBER) |
BITBUCKET_PIPELINE_UUID | $(BITBUCKET_PIPELINE_UUID) |
BITBUCKET_REPO_FULL_NAME | $(BITBUCKET_REPO_FULL_NAME) |
物理デバイスのテスト用追加 Git コンフィギュレーション:
環境変数 | 値 |
---|---|
BITBUCKET_COMMIT | $(BITBUCKET_COMMIT) |
BITBUCKET_GIT_SSH_ORIGIN | $(BITBUCKET_GIT_SSH_ORIGIN) |
BITBUCKET_BRANCH | $(BITBUCKET_BRANCH) |
BITBUCKET_TAG | $(BITBUCKET_TAG) |
環境変数 | 値 |
---|---|
APPVEYOR | $(APPVEYOR) |
APPVEYOR_BUILD_FOLDER | $(APPVEYOR_BUILD_FOLDER) |
APPVEYOR_BUILD_ID | $(APPVEYOR_BUILD_ID) |
APPVEYOR_BUILD_NUMBER | $(APPVEYOR_BUILD_NUMBER) |
APPVEYOR_REPO_TAG_NAME | $(APPVEYOR_REPO_TAG_NAME) |
APPVEYOR_REPO_NAME | $(APPVEYOR_REPO_NAME) |
物理デバイスのテスト用追加 Git コンフィギュレーション:
環境変数 | 値 |
---|---|
APPVEYOR_REPO_COMMIT | $(APPVEYOR_REPO_COMMIT) |
APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH | $(APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH) |
APPVEYOR_REPO_BRANCH | $(APPVEYOR_REPO_BRANCH) |
APPVEYOR_REPO_COMMIT_MESSAGE_EXTENDED | $(APPVEYOR_REPO_COMMIT_MESSAGE_EXTENDED) |
APPVEYOR_REPO_COMMIT_AUTHOR | $(APPVEYOR_REPO_COMMIT_AUTHOR) |
APPVEYOR_REPO_COMMIT_AUTHOR_EMAIL | $(APPVEYOR_REPO_COMMIT_AUTHOR_EMAIL) |
環境変数 | 値 |
---|---|
TF_BUILD | $(TF_BUILD) |
BUILD_SOURCESDIRECTORY | $(BUILD_SOURCESDIRECTORY) |
BUILD_BUILDID | $(BUILD_BUILDID) |
BUILD_DEFINITIONNAME | $(BUILD_DEFINITIONNAME) |
SYSTEM_TEAMPROJECTID | $(SYSTEM_TEAMPROJECTID) |
SYSTEM_TEAMFOUNDATIONSERVERURI | $(SYSTEM_TEAMFOUNDATIONSERVERURI) |
SYSTEM_JOBID | $(SYSTEM_JOBID) |
SYSTEM_TASKINSTANCEID | $(SYSTEM_TASKINSTANCEID) |
SYSTEM_JOBDISPLAYNAME | $(SYSTEM_JOBDISPLAYNAME) |
SYSTEM_STAGEDISPLAYNAME | $(SYSTEM_STAGEDISPLAYNAME) |
物理デバイスのテスト用追加 Git コンフィギュレーション:
環境変数 | 値 |
---|---|
BUILD_SOURCEVERSION | $(BUILD_SOURCEVERSION) |
BUILD_REPOSITORY_URI | $(BUILD_REPOSITORY_URI) |
BUILD_SOURCEBRANCH | $(BUILD_SOURCEBRANCH) |
SYSTEM_PULLREQUEST_SOURCECOMMITID | $(SYSTEM_PULLREQUEST_SOURCECOMMITID) |
SYSTEM_PULLREQUEST_SOURCEBRANCH | $(SYSTEM_PULLREQUEST_SOURCEBRANCH) |
SYSTEM_PULLREQUEST_SOURCEREPOSITORYURI | $(SYSTEM_PULLREQUEST_SOURCEREPOSITORYURI) |
BUILD_SOURCEVERSIONMESSAGE | $(BUILD_SOURCEVERSIONMESSAGE) |
BUILD_REQUESTEDFORID | $(BUILD_REQUESTEDFORID) |
BUILD_REQUESTEDFOREMAIL | $(BUILD_REQUESTEDFOREMAIL) |
環境変数 | 値 |
---|---|
BITRISE_SOURCE_DIR | $(BITRISE_SOURCE_DIR) |
BITRISE_TRIGGERED_WORKFLOW_ID | $(BITRISE_TRIGGERED_WORKFLOW_ID) |
BITRISE_BUILD_SLUG | $(BITRISE_BUILD_SLUG) |
BITRISE_BUILD_NUMBER | $(BITRISE_BUILD_NUMBER) |
BITRISE_BUILD_URL | $(BITRISE_BUILD_URL) |
物理デバイスのテスト用追加 Git コンフィギュレーション:
環境変数 | 値 |
---|---|
GIT_REPOSITORY_URL | $(GIT_REPOSITORY_URL) |
BITRISE_GIT_COMMIT | $(BITRISE_GIT_COMMIT) |
BITRISE_GIT_BRANCH | $(BITRISE_GIT_BRANCH) |
BITRISE_GIT_TAG | $(BITRISE_GIT_TAG) |
GIT_CLONE_COMMIT_HASH | $(GIT_CLONE_COMMIT_HASH) |
BITRISE_GIT_MESSAGE | $(BITRISE_GIT_MESSAGE) |
GIT_CLONE_COMMIT_MESSAGE_SUBJECT | $(GIT_CLONE_COMMIT_MESSAGE_SUBJECT) |
GIT_CLONE_COMMIT_MESSAGE_BODY | $(GIT_CLONE_COMMIT_MESSAGE_BODY) |
GIT_CLONE_COMMIT_AUTHOR_NAME | $(GIT_CLONE_COMMIT_AUTHOR_NAME) |
GIT_CLONE_COMMIT_AUTHOR_EMAIL | $(GIT_CLONE_COMMIT_AUTHOR_EMAIL) |
GIT_CLONE_COMMIT_COMMITER_NAME | $(GIT_CLONE_COMMIT_COMMITER_NAME) |
GIT_CLONE_COMMIT_COMMITER_EMAIL | $(GIT_CLONE_COMMIT_COMMITER_EMAIL) |
環境変数 | 値 |
---|---|
DD_GIT_REPOSITORY_URL | リポジトリ URL |
CI_WORKSPACE | $(CI_WORKSPACE) |
CI_COMMIT | $(CI_COMMIT) |
CI_BUILD_ID | $(CI_BUILD_ID) |
CI_BUILD_NUMBER | $(CI_BUILD_NUMBER) |
CI_WORKFLOW | $(CI_WORKFLOW) |
CI_TAG | $(CI_TAG) |
CI_BRANCH | $(CI_BRANCH) |
CI_GIT_REF | $(CI_GIT_REF) |
Swift プロジェクトで XCTests を使用している場合、DatadogSDKTesting
フレームワークが自動的にインスツルメントし、Datadog バックエンドに結果を送信します。XCTest を使用しない場合、代わりに Swift/Objective-C の手動テスト API を使用することができ、これもバックエンドにテスト結果を報告します。
この API は、テストモジュール、テストスイート、テストの 3 つの概念に基づいています。
テストモジュールは、テストを含むライブラリやバンドルのロードを表します。
テストモジュールを開始するには、DDTestModule.start()
を呼び出して、テストするモジュールまたはバンドルの名前を渡します。
すべてのテストが終了したら、module.end()
を呼び出して、残りのテスト結果をすべてバックエンドに送信するようにします。
テストスイートは、共通の機能を持つテストのセットで構成されます。これらのテストは、共通の初期化および終了を共有することができ、また、いくつかの変数を共有することができます。
テストスイートは module.suiteStart()
を呼び出してテストスイートの名前を渡すことでテストモジュールに作成します。
スイートの中の関連するテストがすべて実行を終えたら suite.end()
を呼び出します。
各テストはスイート内で実行され、pass
、fail
、skip
の 3 つのステータスのうち 1 つで終了する必要があります。テストは、オプションで属性やエラー情報などの追加情報を持つことができます。
suite.testStart()
を呼び出し、テストの名前を渡すことで、スイート内のテストを作成します。テストが終了したら、定義済みのステータスのいずれかを設定する必要があります。
class DDTestModule {
// モジュールを開始します。
// - パラメーター:
// - bundleName: テストするモジュールまたはバンドルの名前。
// - startTime: オプション。モジュールが開始された時間。
static func start(bundleName: String, startTime: Date? = nil) -> DDTestModule
//
// モジュールを終了します。
// - パラメーター:
// - endTime: オプション。モジュールが終了した時間。
func end(endTime: Date? = nil)
// テストモジュールにタグ/属性を追加します。タグはいくつでも追加可能です。
// - パラメーター:
// - key: タグの名前。同じ名前のタグが既に存在する場合、
// その値は新しい値で置き換えられます。
// - value: タグの値。数値または文字列を指定することができます。
func setTag(key: String, value: Any)
//
// このモジュールでスイートを開始します。
// - パラメーター:
// - name: スイートの名前。
// - startTime: オプション。スイートの開始時間。
func suiteStart(name: String, startTime: Date: Date? = nil) -> DDTestSuite
}
//
public class DDTestSuite : NSObject {
// テストスイートを終了します。
// - パラメーター:
// - endTime: オプション。スイートが終了した時間。
func end(endTime: Date? = nil)
// タグ/属性をテストスイートに追加します。タグはいくつでも追加することができます。
// - パラメーター:
// - key: タグの名前。同じ名前のタグが既に存在する場合、
// その値は新しい値で置き換えられます。
// - value: タグの値。数値または文字列を指定することができます。
func setTag(key: String, value: Any)
//
// このスイートのテストを開始します。
// - パラメーター:
// - name: テストの名前。
// - startTime: オプション。テストが開始された時間。
func testStart(name: String, startTime: Date: Date? = nil) -> DDTest
}
//
public class DDTest : NSObject {
// テストにタグ/属性を追加します。タグはいくつでも追加することができます。
// - パラメーター:
// - key: タグの名前。同じ名前のタグが既に存在する場合、
// その値は新しい値で置き換えられます。
// - value: タグの値。数値または文字列を指定することができます。
func setTag(key: String, value: Any)
//
// テストにエラー情報を追加します。1 つのテストが報告できるエラー情報は 1 つだけです。
// - パラメーター:
// - type: 報告されるエラーのタイプ。
// - message: エラーに関連するメッセージ。
// - callstack: オプション。エラーに関連するコールスタック。
func setErrorInfo(type: String, message: String, callstack: String? = nil)
//
// テストを終了します。
// - パラメーター:
// - status: このテストについて報告されたステータス。
// - endTime: オプション。テストが終了した時間。
func end(status: DDTestStatus, endTime: Date: Date? = nil)
}
//
// テストによって報告される可能性のあるステータス:
enum DDTestStatus {
// テストは合格しました。
case pass
//
// テストは失敗しました。
case fail
//
// テストはスキップされました。
case skip
}
次のコードは、API の簡単な使い方を表しています。
import DatadogSDKTesting
let module = DDTestModule.start(bundleName: "ManualModule")
let suite1 = module.suiteStart(name: "ManualSuite 1")
let test1 = suite1.testStart(name: "Test 1")
test1.setTag(key: "key", value: "value")
test1.end(status: .pass)
let test2 = suite1.testStart(name: "Test 2")
test2.SetErrorInfo(type: "Error Type", message: "Error message", callstack: "Optional callstack")
test2.end(test: test2, status: .fail)
suite1.end()
let suite2 = module.suiteStart(name: "ManualSuite 2")
..
..
module.end()
最後に必ず module.end()
を呼び出し、すべてのテスト情報を Datadog に流すようにします。
テストフレームワークと CI 表示を最大限に活用するために、以下のプラクティスに従ってください。
Xcode で DWARF with dSYM File
(または swift
でビルドする場合は -Xswiftc -debug-info-format=dwarf
) を使用してコードをビルドします
テストフレームワークは、クラッシュのシンボル化、テストソースの位置の報告、コードの所有者の報告など、いくつかの機能でシンボルファイルを使用します。デバッグシンボルがバイナリに埋め込まれている場合、シンボルファイルを自動的に生成しますが、読み込みに余分な時間がかかることがあります。
一部の Xcode のバージョンでは、UI Test バンドルはデフォルトでサンドボックス付きでビルドされています。サンドボックスに付属する設定は、一部のシステムコマンドで xcrun
を使ってテストフレームワークを実行することを妨げるので、それを無効にする必要があります。
UI Test ランナーバンドルに Entitlements を追加し、それらに App Sandbox = NO
を追加してサンドボックスを無効にします。また、.entitlement
ファイルを作成し、Signing Build Settings に追加することができます。このファイルには、以下の内容を含める必要があります。
<key>com.apple.security.app-sandbox</key>
<false/>
CI Visibility を有効にすると、プロジェクトから以下のデータが収集されます。
さらに、Intelligent Test Runner を有効にすると、プロジェクトから以下のデータが収集されます。