This SDK is part of Datadog's CI Visibility product. A more comprehensive and updated documentation can be found at CI Visibility - Swift Tests
Link your test targets with the framework (you can use SPM or direct linking )
Set the following environment variables to the Test Action:
DD_TEST_RUNNER=1
DD_API_KEY=<your current api key>
SRCROOT=$(SRCROOT)
You my want to set other environment variables to
DD_ENV=<The environment you want to report>
DD_SERVICE=<The name of the service you want to report>
DD_SITE=<The Datadog site to upload results to>
Depending on your CI service, you must also set the environment variables to be read from the test executions. See CI Providers Environment Variables EnvironmentKeys.swift
for details of your specific CI.
For UITests, both the test target and the application running from the UITests must link with the framework, environment variables only need to be set in the test target, since the framework automatically injects these values to the application.
Boolean variables can use any of: "1","0","true","false", "YES", "NO" String List variables accepts a list of elements separated by "," or ";"
DD_ENABLE_STDOUT_INSTRUMENTATION # Captures messages written to `stdout` (e.g `print()` ) and reports them as Logs. (Implies charges for Logs product) (Boolean)
DD_ENABLE_STDERR_INSTRUMENTATION # Captures messages written to `stderr` (e.g `NSLog()`, UITest steps ) and reports them as Logs. (Implies charges for Logs product) (Boolean)
For Network autoinstrumentation there are other settings that you can configure
DD_DISABLE_NETWORK_INSTRUMENTATION # Disables all network instrumentation (Boolean)
DD_DISABLE_HEADERS_INJECTION # Disables all injection of tracing headers (Boolean)
DD_INSTRUMENTATION_EXTRA_HEADERS # Specific extra headers that you want the tool to log (String List)
DD_EXCLUDED_URLS # Urls that you dont want to log or inject headers into(String List)
DD_ENABLE_RECORD_PAYLOAD # It enables reporting a subset of the payloads in requests and responses (Boolean)
DD_MAX_PAYLOAD_SIZE # It sets the maximum size that will be reported from the payload, 1024 by default (Integer)
You can also disable or enable specific autoinstrumentation in some of the tests from Swift or Objective-C by importing the module DatadogSDKTesting
and using the class: DDInstrumentationControl
.
You should never need to do it, but in some very specific cases you may want to disable crash reporting for tests (e.g. you want to test your own crash handler, ... ):
DD_DISABLE_CRASH_HANDLER # Disables crash handling and reporting. (Boolean) WARNING, read note below
You must know that if you disable crash reporting, crashing tests wont be reported to the backend and wont appear as a failure. If you really, really need to do this for any of your tests, run it as a totally separated target, so you dont disable it for the rest of the tests
You can use DD_TAGS
environment variable. It must contain pairs of key:tag
separated by spaces. For example:
DD_TAGS="tag-key-0:tag-value-0 tag-key-1:tag-value-1"
If one of your values starts with the $
character, it will be replaced with the environment variable with the same name if it exists, example:
DD_TAGS="home:$HOME"
It also supports replacing a environment variable at the beggining of the value if contains non env variables supported characters (a-z
, A-Z
or _
):
FOO = BAR
DD_TAGS="key1:$FOO-v1" # expected: key1:BAR-v1
Datadog swift testing framework uses OpenTelemetry as the tracing technology under the hood. You can access the OpenTelemetry tracer using DDInstrumentationControl.openTelemetryTracer
and can use any OpenTelemetry api. For example, for adding a tag/attribute
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()
The test target needs to link explicitly with opentelemetry-swift
.
Alternatively to setting environment variables, all configuration values can be provided by adding them to the Info.plist
file of the Test bundle (not the App bundle). If the same setting is set both in an environment variable and in the Info.plist
file, the environment variable takes precedence.
Pull requests are welcome. First, open an issue to discuss what you would like to change. For more information, read the Contributing Guide.