This page is part of the FHIR Specification (v5.0.0: R5 - STU). This is the current published version. For a full list of available versions, see the Directory of published versions . Page versions: R5 R4B R4 R3 R2
FHIR Infrastructure Work Group | Maturity Level: 4 | Trial Use | Security Category: Anonymous | Compartments: No defined compartments |
A structured set of tests against a FHIR server or client implementation to determine compliance against the FHIR specification.
This resource is a Quality Reporting & Testing resource from a FHIR Implementation Support perspective - see Implementation Support Module.
The TestScript resource is used to define tests that can be executed against one or more FHIR clients and servers. The TestScript resource will typically contain
For example, one TestScript might feature a set of tests focusing on searching Patients and validating the Bundle responses. The fixtures for such a test would contain a list of Patient resources that are required for the test to complete successfully. The setup procedures create the fixtures on the FHIR server being tested. A series of tests execute search operations with various search parameter combinations and evaluate the client requests and server responses for conformance and expected results. The teardown procedures could then clean up (delete) the fixtures on FHIR server that were created during the setup procedures.
The purpose of the TestScript is to encode in an executable representation tests that can be used
Note to Implementers: At this time the scope and usage of TestScript resources is focused on the FHIR specification. The TestScript resource scope and usage may expand in the future to include support for other HL7 specifications such as C-CDA and V2 as HL7 aligns these specifications with FHIR-based nomenclature and definitions. Future support may also additionally include non-HL7 specifications that leverage the FHIR specification such as IHE profiles.
The TestScript resource should NOT be used to represent Clinical tests, Prescriptions, or any other Healthcare related concept. The TestScript resource is an infrastructure support resource used to represent standardized tests to determine a FHIR implementation's level of adherence to the FHIR specification.
TestScript is a part of the conformance framework and is used to validate the behavior of FHIR systems, specifically their correct implementation of StructureDefinition, ValueSet, OperationDefinition, CapabilityStatement and other FHIR resources that govern system behavior. TestScript instances may be included as part of ImplementationGuides to help define and test the desired behavior of systems that choose to comply with the implementation guide.
The following resources represent the FHIR conformance framework that are used to express the expected behavior of a FHIR compliant system:
The TestScript resource is designed to establish testing as a first class artifact within the FHIR specification. This resource allows defining a suite of tests that can be executed on one or more FHIR servers and clients.
Implementers should be familiar with the testing concepts and descriptions found in Testing FHIR before working with this resource.
Structure
Name | Flags | Card. | Type | Description & Constraints |
---|---|---|---|---|
TestScript | TU | DomainResource | Describes a set of tests + Warning: Name should be usable as an identifier for the module by machine processing applications such as code generation Elements defined in Ancestors: id, meta, implicitRules, language, text, contained, extension, modifierExtension Interfaces Implemented: CanonicalResource | |
url | ΣC | 0..1 | uri | Canonical identifier for this test script, represented as a URI (globally unique) + Warning: URL should not contain | or # - these characters make processing canonical references problematic |
identifier | Σ | 0..* | Identifier | Additional identifier for the test script |
version | Σ | 0..1 | string | Business version of the test script |
versionAlgorithm[x] | Σ | 0..1 | How to compare versions Binding: Version Algorithm (Extensible) | |
versionAlgorithmString | string | |||
versionAlgorithmCoding | Coding | |||
name | ΣC | 1..1 | string | Name for this test script (computer friendly) |
title | ΣT | 0..1 | string | Name for this test script (human friendly) |
status | ?!Σ | 1..1 | code | draft | active | retired | unknown Binding: PublicationStatus (Required) |
experimental | Σ | 0..1 | boolean | For testing purposes, not real usage |
date | Σ | 0..1 | dateTime | Date last changed |
publisher | ΣT | 0..1 | string | Name of the publisher/steward (organization or individual) |
contact | Σ | 0..* | ContactDetail | Contact details for the publisher |
description | T | 0..1 | markdown | Natural language description of the test script |
useContext | Σ | 0..* | UsageContext | The context that the content is intended to support |
jurisdiction | ΣXD | 0..* | CodeableConcept | Intended jurisdiction for test script (if applicable) Binding: Jurisdiction ValueSet (Extensible) |
purpose | T | 0..1 | markdown | Why this test script is defined |
copyright | T | 0..1 | markdown | Use and/or publishing restrictions |
copyrightLabel | T | 0..1 | string | Copyright holder and year(s) |
origin | 0..* | BackboneElement | An abstract server representing a client or sender in a message exchange | |
index | 1..1 | integer | The index of the abstract origin server starting at 1 | |
profile | 1..1 | Coding | FHIR-Client | FHIR-SDC-FormFiller Binding: Test Script Profile Origin Type (Extensible) | |
url | 0..1 | url | The url path of the origin server | |
destination | 0..* | BackboneElement | An abstract server representing a destination or receiver in a message exchange | |
index | 1..1 | integer | The index of the abstract destination server starting at 1 | |
profile | 1..1 | Coding | FHIR-Server | FHIR-SDC-FormManager | FHIR-SDC-FormReceiver | FHIR-SDC-FormProcessor Binding: Test Script Profile Destination Type (Extensible) | |
url | 0..1 | url | The url path of the destination server | |
metadata | C | 0..1 | BackboneElement | Required capability that is assumed to function correctly on the FHIR server being tested + Rule: TestScript metadata capability SHALL contain required or validated or both. |
link | 0..* | BackboneElement | Links to the FHIR specification | |
url | 1..1 | uri | URL to the specification | |
description | 0..1 | string | Short description | |
capability | C | 1..* | BackboneElement | Capabilities that are assumed to function correctly on the FHIR server being tested |
required | C | 1..1 | boolean | Are the capabilities required? |
validated | C | 1..1 | boolean | Are the capabilities validated? |
description | 0..1 | string | The expected capabilities of the server | |
origin | 0..* | integer | Which origin server these requirements apply to | |
destination | 0..1 | integer | Which server these requirements apply to | |
link | 0..* | uri | Links to the FHIR specification | |
capabilities | 1..1 | canonical(CapabilityStatement) | Required Capability Statement | |
scope | 0..* | BackboneElement | Indication of the artifact(s) that are tested by this test case | |
artifact | 1..1 | canonical(Any) | The specific conformance artifact being tested | |
conformance | 0..1 | CodeableConcept | required | optional | strict Binding: Test Script Scope Conformance Type (Extensible) | |
phase | 0..1 | CodeableConcept | unit | integration | production Binding: Test Script Scope Phase Type (Extensible) | |
fixture | 0..* | BackboneElement | Fixture in the test script - by reference (uri) | |
autocreate | 1..1 | boolean | Whether or not to implicitly create the fixture during setup | |
autodelete | 1..1 | boolean | Whether or not to implicitly delete the fixture during teardown | |
resource | 0..1 | Reference(Any) | Reference of the resource | |
profile | 0..* | canonical(StructureDefinition) | Reference of the validation profile | |
variable | C | 0..* | BackboneElement | Placeholder for evaluated elements + Rule: Variable can only contain one of expression, headerField or path. |
name | 1..1 | string | Descriptive name for this variable | |
defaultValue | 0..1 | string | Default, hard-coded, or user-defined value for this variable | |
description | 0..1 | string | Natural language description of the variable | |
expression | C | 0..1 | string | The FHIRPath expression against the fixture body |
headerField | C | 0..1 | string | HTTP header field name for source |
hint | 0..1 | string | Hint help text for default value to enter | |
path | C | 0..1 | string | XPath or JSONPath against the fixture body |
sourceId | 0..1 | id | Fixture Id of source expression or headerField within this variable | |
setup | 0..1 | BackboneElement | A series of required setup operations before tests are executed | |
action | C | 1..* | BackboneElement | A setup operation or assert to perform + Rule: Setup action SHALL contain either an operation or assert but not both. |
operation | C | 0..1 | BackboneElement | The setup operation to perform + Rule: Setup operation SHALL contain either sourceId or targetId or params or url. |
type | C | 0..1 | Coding | The operation code type that will be executed Binding: Test Script Operation Code (Extensible) |
resource | 0..1 | uri | Resource type Binding: Concrete FHIR Types (Extensible) | |
label | 0..1 | string | Tracking/logging operation label | |
description | 0..1 | string | Tracking/reporting operation description | |
accept | 0..1 | code | Mime type to accept in the payload of the response, with charset etc Binding: Mime Types (Required) | |
contentType | 0..1 | code | Mime type of the request payload contents, with charset etc Binding: Mime Types (Required) | |
destination | 0..1 | integer | Server responding to the request | |
encodeRequestUrl | 1..1 | boolean | Whether or not to send the request url in encoded format | |
method | 0..1 | code | delete | get | options | patch | post | put | head Binding: Test Script Request Method Code (Required) | |
origin | 0..1 | integer | Server initiating the request | |
params | C | 0..1 | string | Explicitly defined path parameters |
requestHeader | 0..* | BackboneElement | Each operation can have one or more header elements | |
field | 1..1 | string | HTTP header field name | |
value | 1..1 | string | HTTP headerfield value | |
requestId | 0..1 | id | Fixture Id of mapped request | |
responseId | 0..1 | id | Fixture Id of mapped response | |
sourceId | C | 0..1 | id | Fixture Id of body for PUT and POST requests |
targetId | C | 0..1 | id | Id of fixture used for extracting the [id], [type], and [vid] for GET requests |
url | C | 0..1 | string | Request URL |
assert | C | 0..1 | BackboneElement | The assertion to perform + Rule: Only a single assertion SHALL be present within setup action assert element. + Rule: Setup action assert SHALL contain either compareToSourceId and compareToSourceExpression, compareToSourceId and compareToSourcePath or neither. + Rule: Setup action assert response and responseCode SHALL be empty when direction equals request |
label | 0..1 | string | Tracking/logging assertion label | |
description | 0..1 | string | Tracking/reporting assertion description | |
direction | C | 0..1 | code | response | request Binding: Assertion Direction Type (Required) |
compareToSourceId | C | 0..1 | string | Id of the source fixture to be evaluated |
compareToSourceExpression | C | 0..1 | string | The FHIRPath expression to evaluate against the source fixture |
compareToSourcePath | C | 0..1 | string | XPath or JSONPath expression to evaluate against the source fixture |
contentType | C | 0..1 | code | Mime type to compare against the 'Content-Type' header Binding: Mime Types (Required) |
defaultManualCompletion | 0..1 | code | fail | pass | skip | stop Binding: Assertion Manual Completion Type (Required) | |
expression | C | 0..1 | string | The FHIRPath expression to be evaluated |
headerField | C | 0..1 | string | HTTP header field name |
minimumId | C | 0..1 | string | Fixture Id of minimum content resource |
navigationLinks | C | 0..1 | boolean | Perform validation on navigation links? |
operator | 0..1 | code | equals | notEquals | in | notIn | greaterThan | lessThan | empty | notEmpty | contains | notContains | eval | manualEval Binding: Assertion Operator Type (Required) | |
path | C | 0..1 | string | XPath or JSONPath expression |
requestMethod | C | 0..1 | code | delete | get | options | patch | post | put | head Binding: Test Script Request Method Code (Required) |
requestURL | 0..1 | string | Request URL comparison value | |
resource | C | 0..1 | uri | Resource type Binding: Concrete FHIR Types (Extensible) |
response | C | 0..1 | code | continue | switchingProtocols | okay | created | accepted | nonAuthoritativeInformation | noContent | resetContent | partialContent | multipleChoices | movedPermanently | found | seeOther | notModified | useProxy | temporaryRedirect | permanentRedirect | badRequest | unauthorized | paymentRequired | forbidden | notFound | methodNotAllowed | notAcceptable | proxyAuthenticationRequired | requestTimeout | conflict | gone | lengthRequired | preconditionFailed | contentTooLarge | uriTooLong | unsupportedMediaType | rangeNotSatisfiable | expectationFailed | misdirectedRequest | unprocessableContent | upgradeRequired | internalServerError | notImplemented | badGateway | serviceUnavailable | gatewayTimeout | httpVersionNotSupported Binding: Assertion Response Types (Required) |
responseCode | C | 0..1 | string | HTTP response code to test |
sourceId | 0..1 | id | Fixture Id of source expression or headerField | |
stopTestOnFail | 1..1 | boolean | If this assert fails, will the current test execution stop? | |
validateProfileId | C | 0..1 | id | Profile Id of validation profile reference |
value | 0..1 | string | The value to compare to | |
warningOnly | 1..1 | boolean | Will this assert produce a warning only on error? | |
requirement | 0..* | BackboneElement | Links or references to the testing requirements | |
link[x] | 0..1 | Link or reference to the testing requirement | ||
linkUri | uri | |||
linkCanonical | canonical(Requirements) | |||
test | 0..* | BackboneElement | A test in this script | |
name | 0..1 | string | Tracking/logging name of this test | |
description | 0..1 | string | Tracking/reporting short description of the test | |
action | C | 1..* | BackboneElement | A test operation or assert to perform + Rule: Test action SHALL contain either an operation or assert but not both. |
operation | C | 0..1 | see operation | The setup operation to perform + Rule: Test operation SHALL contain either sourceId or targetId or params or url. |
assert | C | 0..1 | see assert | The setup assertion to perform + Rule: Only a single assertion SHALL be present within test action assert element. + Rule: Test action assert SHALL contain either compareToSourceId and compareToSourceExpression, compareToSourceId and compareToSourcePath or neither. + Rule: Test action assert response and response and responseCode SHALL be empty when direction equals request |
teardown | 0..1 | BackboneElement | A series of required clean up steps | |
action | 1..* | BackboneElement | One or more teardown operations to perform | |
operation | C | 1..1 | see operation | The teardown operation to perform + Rule: Teardown operation SHALL contain either sourceId or targetId or params or url. |
Documentation for this format |
See the Extensions for this resource
UML Diagram (Legend)
XML Template
<TestScript xmlns="http://hl7.org/fhir"> <!-- from Resource: id, meta, implicitRules, and language --> <!-- from DomainResource: text, contained, extension, and modifierExtension --> <url value="[uri]"/><!-- 0..1 Canonical identifier for this test script, represented as a URI (globally unique) --> <identifier><!-- 0..* Identifier Additional identifier for the test script --></identifier> <version value="[string]"/><!-- 0..1 Business version of the test script --> <versionAlgorithm[x]><!-- 0..1 string|Coding How to compare versions --></versionAlgorithm[x]> <name value="[string]"/><!-- I 1..1 Name for this test script (computer friendly) --> <title value="[string]"/><!-- 0..1 Name for this test script (human friendly) --> <status value="[code]"/><!-- 1..1 draft | active | retired | unknown --> <experimental value="[boolean]"/><!-- 0..1 For testing purposes, not real usage --> <date value="[dateTime]"/><!-- 0..1 Date last changed --> <publisher value="[string]"/><!-- 0..1 Name of the publisher/steward (organization or individual) --> <contact><!-- 0..* ContactDetail Contact details for the publisher --></contact> <description value="[markdown]"/><!-- 0..1 Natural language description of the test script --> <useContext><!-- 0..* UsageContext The context that the content is intended to support --></useContext> <jurisdiction><!-- 0..* CodeableConcept Intended jurisdiction for test script (if applicable) --></jurisdiction> <purpose value="[markdown]"/><!-- 0..1 Why this test script is defined --> <copyright value="[markdown]"/><!-- 0..1 Use and/or publishing restrictions --> <copyrightLabel value="[string]"/><!-- 0..1 Copyright holder and year(s) --> <origin> <!-- 0..* An abstract server representing a client or sender in a message exchange --> <index value="[integer]"/><!-- 1..1 The index of the abstract origin server starting at 1 --> <profile><!-- 1..1 Coding FHIR-Client | FHIR-SDC-FormFiller --></profile> <url value="[url]"/><!-- 0..1 The url path of the origin server --> </origin> <destination> <!-- 0..* An abstract server representing a destination or receiver in a message exchange --> <index value="[integer]"/><!-- 1..1 The index of the abstract destination server starting at 1 --> <profile><!-- 1..1 Coding FHIR-Server | FHIR-SDC-FormManager | FHIR-SDC-FormReceiver | FHIR-SDC-FormProcessor --></profile> <url value="[url]"/><!-- 0..1 The url path of the destination server --> </destination> <metadata> <!-- 0..1 Required capability that is assumed to function correctly on the FHIR server being tested --> <link> <!-- 0..* Links to the FHIR specification --> <url value="[uri]"/><!-- 1..1 URL to the specification --> <description value="[string]"/><!-- 0..1 Short description --> </link> <capability> <!-- I 1..* Capabilities that are assumed to function correctly on the FHIR server being tested --> <required value="[boolean]"/><!-- I 1..1 Are the capabilities required? --> <validated value="[boolean]"/><!-- I 1..1 Are the capabilities validated? --> <description value="[string]"/><!-- 0..1 The expected capabilities of the server --> <origin value="[integer]"/><!-- 0..* Which origin server these requirements apply to --> <destination value="[integer]"/><!-- 0..1 Which server these requirements apply to --> <link value="[uri]"/><!-- 0..* Links to the FHIR specification --> <capabilities><!-- 1..1 canonical(CapabilityStatement) Required Capability Statement --></capabilities> </capability> </metadata> <scope> <!-- 0..* Indication of the artifact(s) that are tested by this test case --> <artifact><!-- 1..1 canonical(Any) The specific conformance artifact being tested --></artifact> <conformance><!-- 0..1 CodeableConcept required | optional | strict --></conformance> <phase><!-- 0..1 CodeableConcept unit | integration | production --></phase> </scope> <fixture> <!-- 0..* Fixture in the test script - by reference (uri) --> <autocreate value="[boolean]"/><!-- 1..1 Whether or not to implicitly create the fixture during setup --> <autodelete value="[boolean]"/><!-- 1..1 Whether or not to implicitly delete the fixture during teardown --> <resource><!-- 0..1 Reference(Any) Reference of the resource --></resource> </fixture> <profile><!-- 0..* canonical(StructureDefinition) Reference of the validation profile --></profile> <variable> <!-- 0..* Placeholder for evaluated elements --> <name value="[string]"/><!-- 1..1 Descriptive name for this variable --> <defaultValue value="[string]"/><!-- 0..1 Default, hard-coded, or user-defined value for this variable --> <description value="[string]"/><!-- 0..1 Natural language description of the variable --> <expression value="[string]"/><!-- I 0..1 The FHIRPath expression against the fixture body --> <headerField value="[string]"/><!-- I 0..1 HTTP header field name for source --> <hint value="[string]"/><!-- 0..1 Hint help text for default value to enter --> <path value="[string]"/><!-- I 0..1 XPath or JSONPath against the fixture body --> <sourceId value="[id]"/><!-- 0..1 Fixture Id of source expression or headerField within this variable --> </variable> <setup> <!-- 0..1 A series of required setup operations before tests are executed --> <action> <!-- 1..* A setup operation or assert to perform --> <operation> <!-- I 0..1 The setup operation to perform --> <type><!-- I 0..1 Coding The operation code type that will be executed --></type> <resource value="[uri]"/><!-- 0..1 Resource type --> <label value="[string]"/><!-- 0..1 Tracking/logging operation label --> <description value="[string]"/><!-- 0..1 Tracking/reporting operation description --> <accept value="[code]"/><!-- 0..1 Mime type to accept in the payload of the response, with charset etc --> <contentType value="[code]"/><!-- 0..1 Mime type of the request payload contents, with charset etc --> <destination value="[integer]"/><!-- 0..1 Server responding to the request --> <encodeRequestUrl value="[boolean]"/><!-- 1..1 Whether or not to send the request url in encoded format --> <method value="[code]"/><!-- 0..1 delete | get | options | patch | post | put | head --> <origin value="[integer]"/><!-- 0..1 Server initiating the request --> <params value="[string]"/><!-- I 0..1 Explicitly defined path parameters --> <requestHeader> <!-- 0..* Each operation can have one or more header elements --> <field value="[string]"/><!-- 1..1 HTTP header field name --> <value value="[string]"/><!-- 1..1 HTTP headerfield value --> </requestHeader> <requestId value="[id]"/><!-- 0..1 Fixture Id of mapped request --> <responseId value="[id]"/><!-- 0..1 Fixture Id of mapped response --> <sourceId value="[id]"/><!-- I 0..1 Fixture Id of body for PUT and POST requests --> <targetId value="[id]"/><!-- I 0..1 Id of fixture used for extracting the [id], [type], and [vid] for GET requests --> <url value="[string]"/><!-- I 0..1 Request URL --> </operation> <assert> <!-- I 0..1 The assertion to perform --> <label value="[string]"/><!-- 0..1 Tracking/logging assertion label --> <description value="[string]"/><!-- 0..1 Tracking/reporting assertion description --> <direction value="[code]"/><!-- I 0..1 response | request --> <compareToSourceId value="[string]"/><!-- I 0..1 Id of the source fixture to be evaluated --> <compareToSourceExpression value="[string]"/><!-- I 0..1 The FHIRPath expression to evaluate against the source fixture --> <compareToSourcePath value="[string]"/><!-- I 0..1 XPath or JSONPath expression to evaluate against the source fixture --> <contentType value="[code]"/><!-- I 0..1 Mime type to compare against the 'Content-Type' header --> <defaultManualCompletion value="[code]"/><!-- 0..1 fail | pass | skip | stop --> <expression value="[string]"/><!-- I 0..1 The FHIRPath expression to be evaluated --> <headerField value="[string]"/><!-- I 0..1 HTTP header field name --> <minimumId value="[string]"/><!-- I 0..1 Fixture Id of minimum content resource --> <navigationLinks value="[boolean]"/><!-- I 0..1 Perform validation on navigation links? --> <operator value="[code]"/><!-- 0..1 equals | notEquals | in | notIn | greaterThan | lessThan | empty | notEmpty | contains | notContains | eval | manualEval --> <path value="[string]"/><!-- I 0..1 XPath or JSONPath expression --> <requestMethod value="[code]"/><!-- I 0..1 delete | get | options | patch | post | put | head --> <requestURL value="[string]"/><!-- 0..1 Request URL comparison value --> <resource value="[uri]"/><!-- I 0..1 Resource type --> <response value="[code]"/><!-- I 0..1 continue | switchingProtocols | okay | created | accepted | nonAuthoritativeInformation | noContent | resetContent | partialContent | multipleChoices | movedPermanently | found | seeOther | notModified | useProxy | temporaryRedirect | permanentRedirect | badRequest | unauthorized | paymentRequired | forbidden | notFound | methodNotAllowed | notAcceptable | proxyAuthenticationRequired | requestTimeout | conflict | gone | lengthRequired | preconditionFailed | contentTooLarge | uriTooLong | unsupportedMediaType | rangeNotSatisfiable | expectationFailed | misdirectedRequest | unprocessableContent | upgradeRequired | internalServerError | notImplemented | badGateway | serviceUnavailable | gatewayTimeout | httpVersionNotSupported --> <responseCode value="[string]"/><!-- I 0..1 HTTP response code to test --> <sourceId value="[id]"/><!-- 0..1 Fixture Id of source expression or headerField --> <stopTestOnFail value="[boolean]"/><!-- 1..1 If this assert fails, will the current test execution stop? --> <validateProfileId value="[id]"/><!-- I 0..1 Profile Id of validation profile reference --> <value value="[string]"/><!-- 0..1 The value to compare to --> <warningOnly value="[boolean]"/><!-- 1..1 Will this assert produce a warning only on error? --> <requirement> <!-- 0..* Links or references to the testing requirements --> <link[x]><!-- 0..1 uri|canonical(Requirements) Link or reference to the testing requirement --></link[x]> </requirement> </assert> </action> </setup> <test> <!-- 0..* A test in this script --> <name value="[string]"/><!-- 0..1 Tracking/logging name of this test --> <description value="[string]"/><!-- 0..1 Tracking/reporting short description of the test --> <action> <!-- 1..* A test operation or assert to perform --> <operation><!-- 0..1 Content as for TestScript.setup.action.operation The setup operation to perform --></operation> <assert><!-- 0..1 Content as for TestScript.setup.action.assert The setup assertion to perform --></assert> </action> </test> <teardown> <!-- 0..1 A series of required clean up steps --> <action> <!-- 1..* One or more teardown operations to perform --> <operation><!-- 1..1 Content as for TestScript.setup.action.operation The teardown operation to perform --></operation> </action> </teardown> </TestScript>
JSON Template
{ "resourceType" : "TestScript", // from Resource: id, meta, implicitRules, and language // from DomainResource: text, contained, extension, and modifierExtension "url" : "<uri>", // Canonical identifier for this test script, represented as a URI (globally unique) "identifier" : [{ Identifier }], // Additional identifier for the test script "version" : "<string>", // Business version of the test script // versionAlgorithm[x]: How to compare versions. One of these 2: "versionAlgorithmString" : "<string>", "versionAlgorithmCoding" : { Coding }, "name" : "<string>", // I R! Name for this test script (computer friendly) "title" : "<string>", // Name for this test script (human friendly) "status" : "<code>", // R! draft | active | retired | unknown "experimental" : <boolean>, // For testing purposes, not real usage "date" : "<dateTime>", // Date last changed "publisher" : "<string>", // Name of the publisher/steward (organization or individual) "contact" : [{ ContactDetail }], // Contact details for the publisher "description" : "<markdown>", // Natural language description of the test script "useContext" : [{ UsageContext }], // The context that the content is intended to support "jurisdiction" : [{ CodeableConcept }], // Intended jurisdiction for test script (if applicable) "purpose" : "<markdown>", // Why this test script is defined "copyright" : "<markdown>", // Use and/or publishing restrictions "copyrightLabel" : "<string>", // Copyright holder and year(s) "origin" : [{ // An abstract server representing a client or sender in a message exchange "index" : <integer>, // R! The index of the abstract origin server starting at 1 "profile" : { Coding }, // R! FHIR-Client | FHIR-SDC-FormFiller "url" : "<url>" // The url path of the origin server }], "destination" : [{ // An abstract server representing a destination or receiver in a message exchange "index" : <integer>, // R! The index of the abstract destination server starting at 1 "profile" : { Coding }, // R! FHIR-Server | FHIR-SDC-FormManager | FHIR-SDC-FormReceiver | FHIR-SDC-FormProcessor "url" : "<url>" // The url path of the destination server }], "metadata" : { // Required capability that is assumed to function correctly on the FHIR server being tested "link" : [{ // Links to the FHIR specification "url" : "<uri>", // R! URL to the specification "description" : "<string>" // Short description }], "capability" : [{ // I R! Capabilities that are assumed to function correctly on the FHIR server being tested "required" : <boolean>, // I R! Are the capabilities required? "validated" : <boolean>, // I R! Are the capabilities validated? "description" : "<string>", // The expected capabilities of the server "origin" : [<integer>], // Which origin server these requirements apply to "destination" : <integer>, // Which server these requirements apply to "link" : ["<uri>"], // Links to the FHIR specification "capabilities" : "<canonical(CapabilityStatement)>" // R! Required Capability Statement }] }, "scope" : [{ // Indication of the artifact(s) that are tested by this test case "artifact" : "<canonical(Any)>", // R! The specific conformance artifact being tested "conformance" : { CodeableConcept }, // required | optional | strict "phase" : { CodeableConcept } // unit | integration | production }], "fixture" : [{ // Fixture in the test script - by reference (uri) "autocreate" : <boolean>, // R! Whether or not to implicitly create the fixture during setup "autodelete" : <boolean>, // R! Whether or not to implicitly delete the fixture during teardown "resource" : { Reference(Any) } // Reference of the resource }], "profile" : ["<canonical(StructureDefinition)>"], // Reference of the validation profile "variable" : [{ // Placeholder for evaluated elements "name" : "<string>", // R! Descriptive name for this variable "defaultValue" : "<string>", // Default, hard-coded, or user-defined value for this variable "description" : "<string>", // Natural language description of the variable "expression" : "<string>", // I The FHIRPath expression against the fixture body "headerField" : "<string>", // I HTTP header field name for source "hint" : "<string>", // Hint help text for default value to enter "path" : "<string>", // I XPath or JSONPath against the fixture body "sourceId" : "<id>" // Fixture Id of source expression or headerField within this variable }], "setup" : { // A series of required setup operations before tests are executed "action" : [{ // R! A setup operation or assert to perform "operation" : { // I The setup operation to perform "type" : { Coding }, // I The operation code type that will be executed "resource" : "<uri>", // Resource type "label" : "<string>", // Tracking/logging operation label "description" : "<string>", // Tracking/reporting operation description "accept" : "<code>", // Mime type to accept in the payload of the response, with charset etc "contentType" : "<code>", // Mime type of the request payload contents, with charset etc "destination" : <integer>, // Server responding to the request "encodeRequestUrl" : <boolean>, // R! Whether or not to send the request url in encoded format "method" : "<code>", // delete | get | options | patch | post | put | head "origin" : <integer>, // Server initiating the request "params" : "<string>", // I Explicitly defined path parameters "requestHeader" : [{ // Each operation can have one or more header elements "field" : "<string>", // R! HTTP header field name "value" : "<string>" // R! HTTP headerfield value }], "requestId" : "<id>", // Fixture Id of mapped request "responseId" : "<id>", // Fixture Id of mapped response "sourceId" : "<id>", // I Fixture Id of body for PUT and POST requests "targetId" : "<id>", // I Id of fixture used for extracting the [id], [type], and [vid] for GET requests "url" : "<string>" // I Request URL }, "assert" : { // I The assertion to perform "label" : "<string>", // Tracking/logging assertion label "description" : "<string>", // Tracking/reporting assertion description "direction" : "<code>", // I response | request "compareToSourceId" : "<string>", // I Id of the source fixture to be evaluated "compareToSourceExpression" : "<string>", // I The FHIRPath expression to evaluate against the source fixture "compareToSourcePath" : "<string>", // I XPath or JSONPath expression to evaluate against the source fixture "contentType" : "<code>", // I Mime type to compare against the 'Content-Type' header "defaultManualCompletion" : "<code>", // fail | pass | skip | stop "expression" : "<string>", // I The FHIRPath expression to be evaluated "headerField" : "<string>", // I HTTP header field name "minimumId" : "<string>", // I Fixture Id of minimum content resource "navigationLinks" : <boolean>, // I Perform validation on navigation links? "operator" : "<code>", // equals | notEquals | in | notIn | greaterThan | lessThan | empty | notEmpty | contains | notContains | eval | manualEval "path" : "<string>", // I XPath or JSONPath expression "requestMethod" : "<code>", // I delete | get | options | patch | post | put | head "requestURL" : "<string>", // Request URL comparison value "resource" : "<uri>", // I Resource type "response" : "<code>", // I continue | switchingProtocols | okay | created | accepted | nonAuthoritativeInformation | noContent | resetContent | partialContent | multipleChoices | movedPermanently | found | seeOther | notModified | useProxy | temporaryRedirect | permanentRedirect | badRequest | unauthorized | paymentRequired | forbidden | notFound | methodNotAllowed | notAcceptable | proxyAuthenticationRequired | requestTimeout | conflict | gone | lengthRequired | preconditionFailed | contentTooLarge | uriTooLong | unsupportedMediaType | rangeNotSatisfiable | expectationFailed | misdirectedRequest | unprocessableContent | upgradeRequired | internalServerError | notImplemented | badGateway | serviceUnavailable | gatewayTimeout | httpVersionNotSupported "responseCode" : "<string>", // I HTTP response code to test "sourceId" : "<id>", // Fixture Id of source expression or headerField "stopTestOnFail" : <boolean>, // R! If this assert fails, will the current test execution stop? "validateProfileId" : "<id>", // I Profile Id of validation profile reference "value" : "<string>", // The value to compare to "warningOnly" : <boolean>, // R! Will this assert produce a warning only on error? "requirement" : [{ // Links or references to the testing requirements // link[x]: Link or reference to the testing requirement. One of these 2: "linkUri" : "<uri>", "linkCanonical" : "<canonical(Requirements)>" }] } }] }, "test" : [{ // A test in this script "name" : "<string>", // Tracking/logging name of this test "description" : "<string>", // Tracking/reporting short description of the test "action" : [{ // R! A test operation or assert to perform "operation" : { Content as for TestScript.setup.action.operation }, // The setup operation to perform "assert" : { Content as for TestScript.setup.action.assert } // The setup assertion to perform }] }], "teardown" : { // A series of required clean up steps "action" : [{ // R! One or more teardown operations to perform "operation" : { Content as for TestScript.setup.action.operation } // R! The teardown operation to perform }] } }
Turtle Template
@prefix fhir: <http://hl7.org/fhir/> . [ a fhir:TestScript; fhir:nodeRole fhir:treeRoot; # if this is the parser root # from Resource: .id, .meta, .implicitRules, and .language # from DomainResource: .text, .contained, .extension, and .modifierExtension fhir:url [ uri ] ; # 0..1 Canonical identifier for this test script, represented as a URI (globally unique) fhir:identifier ( [ Identifier ] ... ) ; # 0..* Additional identifier for the test script fhir:version [ string ] ; # 0..1 Business version of the test script # versionAlgorithm[x] : 0..1 How to compare versions. One of these 2 fhir:versionAlgorithm [ a fhir:string ; string ] fhir:versionAlgorithm [ a fhir:Coding ; Coding ] fhir:name [ string ] ; # 1..1 I Name for this test script (computer friendly) fhir:title [ string ] ; # 0..1 Name for this test script (human friendly) fhir:status [ code ] ; # 1..1 draft | active | retired | unknown fhir:experimental [ boolean ] ; # 0..1 For testing purposes, not real usage fhir:date [ dateTime ] ; # 0..1 Date last changed fhir:publisher [ string ] ; # 0..1 Name of the publisher/steward (organization or individual) fhir:contact ( [ ContactDetail ] ... ) ; # 0..* Contact details for the publisher fhir:description [ markdown ] ; # 0..1 Natural language description of the test script fhir:useContext ( [ UsageContext ] ... ) ; # 0..* The context that the content is intended to support fhir:jurisdiction ( [ CodeableConcept ] ... ) ; # 0..* Intended jurisdiction for test script (if applicable) fhir:purpose [ markdown ] ; # 0..1 Why this test script is defined fhir:copyright [ markdown ] ; # 0..1 Use and/or publishing restrictions fhir:copyrightLabel [ string ] ; # 0..1 Copyright holder and year(s) fhir:origin ( [ # 0..* An abstract server representing a client or sender in a message exchange fhir:index [ integer ] ; # 1..1 The index of the abstract origin server starting at 1 fhir:profile [ Coding ] ; # 1..1 FHIR-Client | FHIR-SDC-FormFiller fhir:url [ url ] ; # 0..1 The url path of the origin server ] ... ) ; fhir:destination ( [ # 0..* An abstract server representing a destination or receiver in a message exchange fhir:index [ integer ] ; # 1..1 The index of the abstract destination server starting at 1 fhir:profile [ Coding ] ; # 1..1 FHIR-Server | FHIR-SDC-FormManager | FHIR-SDC-FormReceiver | FHIR-SDC-FormProcessor fhir:url [ url ] ; # 0..1 The url path of the destination server ] ... ) ; fhir:metadata [ # 0..1 Required capability that is assumed to function correctly on the FHIR server being tested fhir:link ( [ # 0..* Links to the FHIR specification fhir:url [ uri ] ; # 1..1 URL to the specification fhir:description [ string ] ; # 0..1 Short description ] ... ) ; fhir:capability ( [ # 1..* I Capabilities that are assumed to function correctly on the FHIR server being tested fhir:required [ boolean ] ; # 1..1 I Are the capabilities required? fhir:validated [ boolean ] ; # 1..1 I Are the capabilities validated? fhir:description [ string ] ; # 0..1 The expected capabilities of the server fhir:origin ( [ integer ] ... ) ; # 0..* Which origin server these requirements apply to fhir:destination [ integer ] ; # 0..1 Which server these requirements apply to fhir:link ( [ uri ] ... ) ; # 0..* Links to the FHIR specification fhir:capabilities [ canonical(CapabilityStatement) ] ; # 1..1 Required Capability Statement ] ... ) ; ] ; fhir:scope ( [ # 0..* Indication of the artifact(s) that are tested by this test case fhir:artifact [ canonical(Any) ] ; # 1..1 The specific conformance artifact being tested fhir:conformance [ CodeableConcept ] ; # 0..1 required | optional | strict fhir:phase [ CodeableConcept ] ; # 0..1 unit | integration | production ] ... ) ; fhir:fixture ( [ # 0..* Fixture in the test script - by reference (uri) fhir:autocreate [ boolean ] ; # 1..1 Whether or not to implicitly create the fixture during setup fhir:autodelete [ boolean ] ; # 1..1 Whether or not to implicitly delete the fixture during teardown fhir:resource [ Reference(Any) ] ; # 0..1 Reference of the resource ] ... ) ; fhir:profile ( [ canonical(StructureDefinition) ] ... ) ; # 0..* Reference of the validation profile fhir:variable ( [ # 0..* Placeholder for evaluated elements fhir:name [ string ] ; # 1..1 Descriptive name for this variable fhir:defaultValue [ string ] ; # 0..1 Default, hard-coded, or user-defined value for this variable fhir:description [ string ] ; # 0..1 Natural language description of the variable fhir:expression [ string ] ; # 0..1 I The FHIRPath expression against the fixture body fhir:headerField [ string ] ; # 0..1 I HTTP header field name for source fhir:hint [ string ] ; # 0..1 Hint help text for default value to enter fhir:path [ string ] ; # 0..1 I XPath or JSONPath against the fixture body fhir:sourceId [ id ] ; # 0..1 Fixture Id of source expression or headerField within this variable ] ... ) ; fhir:setup [ # 0..1 A series of required setup operations before tests are executed fhir:action ( [ # 1..* A setup operation or assert to perform fhir:operation [ # 0..1 I The setup operation to perform fhir:type [ Coding ] ; # 0..1 I The operation code type that will be executed fhir:resource [ uri ] ; # 0..1 Resource type fhir:label [ string ] ; # 0..1 Tracking/logging operation label fhir:description [ string ] ; # 0..1 Tracking/reporting operation description fhir:accept [ code ] ; # 0..1 Mime type to accept in the payload of the response, with charset etc fhir:contentType [ code ] ; # 0..1 Mime type of the request payload contents, with charset etc fhir:destination [ integer ] ; # 0..1 Server responding to the request fhir:encodeRequestUrl [ boolean ] ; # 1..1 Whether or not to send the request url in encoded format fhir:method [ code ] ; # 0..1 delete | get | options | patch | post | put | head fhir:origin [ integer ] ; # 0..1 Server initiating the request fhir:params [ string ] ; # 0..1 I Explicitly defined path parameters fhir:requestHeader ( [ # 0..* Each operation can have one or more header elements fhir:field [ string ] ; # 1..1 HTTP header field name fhir:value [ string ] ; # 1..1 HTTP headerfield value ] ... ) ; fhir:requestId [ id ] ; # 0..1 Fixture Id of mapped request fhir:responseId [ id ] ; # 0..1 Fixture Id of mapped response fhir:sourceId [ id ] ; # 0..1 I Fixture Id of body for PUT and POST requests fhir:targetId [ id ] ; # 0..1 I Id of fixture used for extracting the [id], [type], and [vid] for GET requests fhir:url [ string ] ; # 0..1 I Request URL ] ; fhir:assert [ # 0..1 I The assertion to perform fhir:label [ string ] ; # 0..1 Tracking/logging assertion label fhir:description [ string ] ; # 0..1 Tracking/reporting assertion description fhir:direction [ code ] ; # 0..1 I response | request fhir:compareToSourceId [ string ] ; # 0..1 I Id of the source fixture to be evaluated fhir:compareToSourceExpression [ string ] ; # 0..1 I The FHIRPath expression to evaluate against the source fixture fhir:compareToSourcePath [ string ] ; # 0..1 I XPath or JSONPath expression to evaluate against the source fixture fhir:contentType [ code ] ; # 0..1 I Mime type to compare against the 'Content-Type' header fhir:defaultManualCompletion [ code ] ; # 0..1 fail | pass | skip | stop fhir:expression [ string ] ; # 0..1 I The FHIRPath expression to be evaluated fhir:headerField [ string ] ; # 0..1 I HTTP header field name fhir:minimumId [ string ] ; # 0..1 I Fixture Id of minimum content resource fhir:navigationLinks [ boolean ] ; # 0..1 I Perform validation on navigation links? fhir:operator [ code ] ; # 0..1 equals | notEquals | in | notIn | greaterThan | lessThan | empty | notEmpty | contains | notContains | eval | manualEval fhir:path [ string ] ; # 0..1 I XPath or JSONPath expression fhir:requestMethod [ code ] ; # 0..1 I delete | get | options | patch | post | put | head fhir:requestURL [ string ] ; # 0..1 Request URL comparison value fhir:resource [ uri ] ; # 0..1 I Resource type fhir:response [ code ] ; # 0..1 I continue | switchingProtocols | okay | created | accepted | nonAuthoritativeInformation | noContent | resetContent | partialContent | multipleChoices | movedPermanently | found | seeOther | notModified | useProxy | temporaryRedirect | permanentRedirect | badRequest | unauthorized | paymentRequired | forbidden | notFound | methodNotAllowed | notAcceptable | proxyAuthenticationRequired | requestTimeout | conflict | gone | lengthRequired | preconditionFailed | contentTooLarge | uriTooLong | unsupportedMediaType | rangeNotSatisfiable | expectationFailed | misdirectedRequest | unprocessableContent | upgradeRequired | internalServerError | notImplemented | badGateway | serviceUnavailable | gatewayTimeout | httpVersionNotSupported fhir:responseCode [ string ] ; # 0..1 I HTTP response code to test fhir:sourceId [ id ] ; # 0..1 Fixture Id of source expression or headerField fhir:stopTestOnFail [ boolean ] ; # 1..1 If this assert fails, will the current test execution stop? fhir:validateProfileId [ id ] ; # 0..1 I Profile Id of validation profile reference fhir:value [ string ] ; # 0..1 The value to compare to fhir:warningOnly [ boolean ] ; # 1..1 Will this assert produce a warning only on error? fhir:requirement ( [ # 0..* Links or references to the testing requirements # link[x] : 0..1 Link or reference to the testing requirement. One of these 2 fhir:link [ a fhir:uri ; uri ] fhir:link [ a fhir:canonical ; canonical(Requirements) ] ] ... ) ; ] ; ] ... ) ; ] ; fhir:test ( [ # 0..* A test in this script fhir:name [ string ] ; # 0..1 Tracking/logging name of this test fhir:description [ string ] ; # 0..1 Tracking/reporting short description of the test fhir:action ( [ # 1..* A test operation or assert to perform fhir:operation [ See TestScript.setup.action.operation ] ; # 0..1 The setup operation to perform fhir:assert [ See TestScript.setup.action.assert ] ; # 0..1 The setup assertion to perform ] ... ) ; ] ... ) ; fhir:teardown [ # 0..1 A series of required clean up steps fhir:action ( [ # 1..* One or more teardown operations to perform fhir:operation [ See TestScript.setup.action.operation ] ; # 1..1 The teardown operation to perform ] ... ) ; ] ; ]
Changes from both R4 and R4B
TestScript | |
TestScript.url |
|
TestScript.identifier |
|
TestScript.versionAlgorithm[x] |
|
TestScript.copyrightLabel |
|
TestScript.origin.url |
|
TestScript.destination.url |
|
TestScript.scope |
|
TestScript.scope.artifact |
|
TestScript.scope.conformance |
|
TestScript.scope.phase |
|
TestScript.profile |
|
TestScript.setup.action.operation.type |
|
TestScript.setup.action.operation.resource |
|
TestScript.setup.action.assert.defaultManualCompletion |
|
TestScript.setup.action.assert.operator |
|
TestScript.setup.action.assert.resource |
|
TestScript.setup.action.assert.response |
|
TestScript.setup.action.assert.stopTestOnFail |
|
TestScript.setup.action.assert.requirement |
|
TestScript.setup.action.assert.requirement.link[x] |
|
See the Full Difference for further information
This analysis is available for R4 as XML or JSON and for R4B as XML or JSON.
See R4 <--> R5 Conversion Maps (status = See Conversions Summary.)
Structure
Name | Flags | Card. | Type | Description & Constraints |
---|---|---|---|---|
TestScript | TU | DomainResource | Describes a set of tests + Warning: Name should be usable as an identifier for the module by machine processing applications such as code generation Elements defined in Ancestors: id, meta, implicitRules, language, text, contained, extension, modifierExtension Interfaces Implemented: CanonicalResource | |
url | ΣC | 0..1 | uri | Canonical identifier for this test script, represented as a URI (globally unique) + Warning: URL should not contain | or # - these characters make processing canonical references problematic |
identifier | Σ | 0..* | Identifier | Additional identifier for the test script |
version | Σ | 0..1 | string | Business version of the test script |
versionAlgorithm[x] | Σ | 0..1 | How to compare versions Binding: Version Algorithm (Extensible) | |
versionAlgorithmString | string | |||
versionAlgorithmCoding | Coding | |||
name | ΣC | 1..1 | string | Name for this test script (computer friendly) |
title | ΣT | 0..1 | string | Name for this test script (human friendly) |
status | ?!Σ | 1..1 | code | draft | active | retired | unknown Binding: PublicationStatus (Required) |
experimental | Σ | 0..1 | boolean | For testing purposes, not real usage |
date | Σ | 0..1 | dateTime | Date last changed |
publisher | ΣT | 0..1 | string | Name of the publisher/steward (organization or individual) |
contact | Σ | 0..* | ContactDetail | Contact details for the publisher |
description | T | 0..1 | markdown | Natural language description of the test script |
useContext | Σ | 0..* | UsageContext | The context that the content is intended to support |
jurisdiction | ΣXD | 0..* | CodeableConcept | Intended jurisdiction for test script (if applicable) Binding: Jurisdiction ValueSet (Extensible) |
purpose | T | 0..1 | markdown | Why this test script is defined |
copyright | T | 0..1 | markdown | Use and/or publishing restrictions |
copyrightLabel | T | 0..1 | string | Copyright holder and year(s) |
origin | 0..* | BackboneElement | An abstract server representing a client or sender in a message exchange | |
index | 1..1 | integer | The index of the abstract origin server starting at 1 | |
profile | 1..1 | Coding | FHIR-Client | FHIR-SDC-FormFiller Binding: Test Script Profile Origin Type (Extensible) | |
url | 0..1 | url | The url path of the origin server | |
destination | 0..* | BackboneElement | An abstract server representing a destination or receiver in a message exchange | |
index | 1..1 | integer | The index of the abstract destination server starting at 1 | |
profile | 1..1 | Coding | FHIR-Server | FHIR-SDC-FormManager | FHIR-SDC-FormReceiver | FHIR-SDC-FormProcessor Binding: Test Script Profile Destination Type (Extensible) | |
url | 0..1 | url | The url path of the destination server | |
metadata | C | 0..1 | BackboneElement | Required capability that is assumed to function correctly on the FHIR server being tested + Rule: TestScript metadata capability SHALL contain required or validated or both. |
link | 0..* | BackboneElement | Links to the FHIR specification | |
url | 1..1 | uri | URL to the specification | |
description | 0..1 | string | Short description | |
capability | C | 1..* | BackboneElement | Capabilities that are assumed to function correctly on the FHIR server being tested |
required | C | 1..1 | boolean | Are the capabilities required? |
validated | C | 1..1 | boolean | Are the capabilities validated? |
description | 0..1 | string | The expected capabilities of the server | |
origin | 0..* | integer | Which origin server these requirements apply to | |
destination | 0..1 | integer | Which server these requirements apply to | |
link | 0..* | uri | Links to the FHIR specification | |
capabilities | 1..1 | canonical(CapabilityStatement) | Required Capability Statement | |
scope | 0..* | BackboneElement | Indication of the artifact(s) that are tested by this test case | |
artifact | 1..1 | canonical(Any) | The specific conformance artifact being tested | |
conformance | 0..1 | CodeableConcept | required | optional | strict Binding: Test Script Scope Conformance Type (Extensible) | |
phase | 0..1 | CodeableConcept | unit | integration | production Binding: Test Script Scope Phase Type (Extensible) | |
fixture | 0..* | BackboneElement | Fixture in the test script - by reference (uri) | |
autocreate | 1..1 | boolean | Whether or not to implicitly create the fixture during setup | |
autodelete | 1..1 | boolean | Whether or not to implicitly delete the fixture during teardown | |
resource | 0..1 | Reference(Any) | Reference of the resource | |
profile | 0..* | canonical(StructureDefinition) | Reference of the validation profile | |
variable | C | 0..* | BackboneElement | Placeholder for evaluated elements + Rule: Variable can only contain one of expression, headerField or path. |
name | 1..1 | string | Descriptive name for this variable | |
defaultValue | 0..1 | string | Default, hard-coded, or user-defined value for this variable | |
description | 0..1 | string | Natural language description of the variable | |
expression | C | 0..1 | string | The FHIRPath expression against the fixture body |
headerField | C | 0..1 | string | HTTP header field name for source |
hint | 0..1 | string | Hint help text for default value to enter | |
path | C | 0..1 | string | XPath or JSONPath against the fixture body |
sourceId | 0..1 | id | Fixture Id of source expression or headerField within this variable | |
setup | 0..1 | BackboneElement | A series of required setup operations before tests are executed | |
action | C | 1..* | BackboneElement | A setup operation or assert to perform + Rule: Setup action SHALL contain either an operation or assert but not both. |
operation | C | 0..1 | BackboneElement | The setup operation to perform + Rule: Setup operation SHALL contain either sourceId or targetId or params or url. |
type | C | 0..1 | Coding | The operation code type that will be executed Binding: Test Script Operation Code (Extensible) |
resource | 0..1 | uri | Resource type Binding: Concrete FHIR Types (Extensible) | |
label | 0..1 | string | Tracking/logging operation label | |
description | 0..1 | string | Tracking/reporting operation description | |
accept | 0..1 | code | Mime type to accept in the payload of the response, with charset etc Binding: Mime Types (Required) | |
contentType | 0..1 | code | Mime type of the request payload contents, with charset etc Binding: Mime Types (Required) | |
destination | 0..1 | integer | Server responding to the request | |
encodeRequestUrl | 1..1 | boolean | Whether or not to send the request url in encoded format | |
method | 0..1 | code | delete | get | options | patch | post | put | head Binding: Test Script Request Method Code (Required) | |
origin | 0..1 | integer | Server initiating the request | |
params | C | 0..1 | string | Explicitly defined path parameters |
requestHeader | 0..* | BackboneElement | Each operation can have one or more header elements | |
field | 1..1 | string | HTTP header field name | |
value | 1..1 | string | HTTP headerfield value | |
requestId | 0..1 | id | Fixture Id of mapped request | |
responseId | 0..1 | id | Fixture Id of mapped response | |
sourceId | C | 0..1 | id | Fixture Id of body for PUT and POST requests |
targetId | C | 0..1 | id | Id of fixture used for extracting the [id], [type], and [vid] for GET requests |
url | C | 0..1 | string | Request URL |
assert | C | 0..1 | BackboneElement | The assertion to perform + Rule: Only a single assertion SHALL be present within setup action assert element. + Rule: Setup action assert SHALL contain either compareToSourceId and compareToSourceExpression, compareToSourceId and compareToSourcePath or neither. + Rule: Setup action assert response and responseCode SHALL be empty when direction equals request |
label | 0..1 | string | Tracking/logging assertion label | |
description | 0..1 | string | Tracking/reporting assertion description | |
direction | C | 0..1 | code | response | request Binding: Assertion Direction Type (Required) |
compareToSourceId | C | 0..1 | string | Id of the source fixture to be evaluated |
compareToSourceExpression | C | 0..1 | string | The FHIRPath expression to evaluate against the source fixture |
compareToSourcePath | C | 0..1 | string | XPath or JSONPath expression to evaluate against the source fixture |
contentType | C | 0..1 | code | Mime type to compare against the 'Content-Type' header Binding: Mime Types (Required) |
defaultManualCompletion | 0..1 | code | fail | pass | skip | stop Binding: Assertion Manual Completion Type (Required) | |
expression | C | 0..1 | string | The FHIRPath expression to be evaluated |
headerField | C | 0..1 | string | HTTP header field name |
minimumId | C | 0..1 | string | Fixture Id of minimum content resource |
navigationLinks | C | 0..1 | boolean | Perform validation on navigation links? |
operator | 0..1 | code | equals | notEquals | in | notIn | greaterThan | lessThan | empty | notEmpty | contains | notContains | eval | manualEval Binding: Assertion Operator Type (Required) | |
path | C | 0..1 | string | XPath or JSONPath expression |
requestMethod | C | 0..1 | code | delete | get | options | patch | post | put | head Binding: Test Script Request Method Code (Required) |
requestURL | 0..1 | string | Request URL comparison value | |
resource | C | 0..1 | uri | Resource type Binding: Concrete FHIR Types (Extensible) |
response | C | 0..1 | code | continue | switchingProtocols | okay | created | accepted | nonAuthoritativeInformation | noContent | resetContent | partialContent | multipleChoices | movedPermanently | found | seeOther | notModified | useProxy | temporaryRedirect | permanentRedirect | badRequest | unauthorized | paymentRequired | forbidden | notFound | methodNotAllowed | notAcceptable | proxyAuthenticationRequired | requestTimeout | conflict | gone | lengthRequired | preconditionFailed | contentTooLarge | uriTooLong | unsupportedMediaType | rangeNotSatisfiable | expectationFailed | misdirectedRequest | unprocessableContent | upgradeRequired | internalServerError | notImplemented | badGateway | serviceUnavailable | gatewayTimeout | httpVersionNotSupported Binding: Assertion Response Types (Required) |
responseCode | C | 0..1 | string | HTTP response code to test |
sourceId | 0..1 | id | Fixture Id of source expression or headerField | |
stopTestOnFail | 1..1 | boolean | If this assert fails, will the current test execution stop? | |
validateProfileId | C | 0..1 | id | Profile Id of validation profile reference |
value | 0..1 | string | The value to compare to | |
warningOnly | 1..1 | boolean | Will this assert produce a warning only on error? | |
requirement | 0..* | BackboneElement | Links or references to the testing requirements | |
link[x] | 0..1 | Link or reference to the testing requirement | ||
linkUri | uri | |||
linkCanonical | canonical(Requirements) | |||
test | 0..* | BackboneElement | A test in this script | |
name | 0..1 | string | Tracking/logging name of this test | |
description | 0..1 | string | Tracking/reporting short description of the test | |
action | C | 1..* | BackboneElement | A test operation or assert to perform + Rule: Test action SHALL contain either an operation or assert but not both. |
operation | C | 0..1 | see operation | The setup operation to perform + Rule: Test operation SHALL contain either sourceId or targetId or params or url. |
assert | C | 0..1 | see assert | The setup assertion to perform + Rule: Only a single assertion SHALL be present within test action assert element. + Rule: Test action assert SHALL contain either compareToSourceId and compareToSourceExpression, compareToSourceId and compareToSourcePath or neither. + Rule: Test action assert response and response and responseCode SHALL be empty when direction equals request |
teardown | 0..1 | BackboneElement | A series of required clean up steps | |
action | 1..* | BackboneElement | One or more teardown operations to perform | |
operation | C | 1..1 | see operation | The teardown operation to perform + Rule: Teardown operation SHALL contain either sourceId or targetId or params or url. |
Documentation for this format |
See the Extensions for this resource
XML Template
<TestScript xmlns="http://hl7.org/fhir"> <!-- from Resource: id, meta, implicitRules, and language --> <!-- from DomainResource: text, contained, extension, and modifierExtension --> <url value="[uri]"/><!-- 0..1 Canonical identifier for this test script, represented as a URI (globally unique) --> <identifier><!-- 0..* Identifier Additional identifier for the test script --></identifier> <version value="[string]"/><!-- 0..1 Business version of the test script --> <versionAlgorithm[x]><!-- 0..1 string|Coding How to compare versions --></versionAlgorithm[x]> <name value="[string]"/><!-- I 1..1 Name for this test script (computer friendly) --> <title value="[string]"/><!-- 0..1 Name for this test script (human friendly) --> <status value="[code]"/><!-- 1..1 draft | active | retired | unknown --> <experimental value="[boolean]"/><!-- 0..1 For testing purposes, not real usage --> <date value="[dateTime]"/><!-- 0..1 Date last changed --> <publisher value="[string]"/><!-- 0..1 Name of the publisher/steward (organization or individual) --> <contact><!-- 0..* ContactDetail Contact details for the publisher --></contact> <description value="[markdown]"/><!-- 0..1 Natural language description of the test script --> <useContext><!-- 0..* UsageContext The context that the content is intended to support --></useContext> <jurisdiction><!-- 0..* CodeableConcept Intended jurisdiction for test script (if applicable) --></jurisdiction> <purpose value="[markdown]"/><!-- 0..1 Why this test script is defined --> <copyright value="[markdown]"/><!-- 0..1 Use and/or publishing restrictions --> <copyrightLabel value="[string]"/><!-- 0..1 Copyright holder and year(s) --> <origin> <!-- 0..* An abstract server representing a client or sender in a message exchange --> <index value="[integer]"/><!-- 1..1 The index of the abstract origin server starting at 1 --> <profile><!-- 1..1 Coding FHIR-Client | FHIR-SDC-FormFiller --></profile> <url value="[url]"/><!-- 0..1 The url path of the origin server --> </origin> <destination> <!-- 0..* An abstract server representing a destination or receiver in a message exchange --> <index value="[integer]"/><!-- 1..1 The index of the abstract destination server starting at 1 --> <profile><!-- 1..1 Coding FHIR-Server | FHIR-SDC-FormManager | FHIR-SDC-FormReceiver | FHIR-SDC-FormProcessor --></profile> <url value="[url]"/><!-- 0..1 The url path of the destination server --> </destination> <metadata> <!-- 0..1 Required capability that is assumed to function correctly on the FHIR server being tested --> <link> <!-- 0..* Links to the FHIR specification --> <url value="[uri]"/><!-- 1..1 URL to the specification --> <description value="[string]"/><!-- 0..1 Short description --> </link> <capability> <!-- I 1..* Capabilities that are assumed to function correctly on the FHIR server being tested --> <required value="[boolean]"/><!-- I 1..1 Are the capabilities required? --> <validated value="[boolean]"/><!-- I 1..1 Are the capabilities validated? --> <description value="[string]"/><!-- 0..1 The expected capabilities of the server --> <origin value="[integer]"/><!-- 0..* Which origin server these requirements apply to --> <destination value="[integer]"/><!-- 0..1 Which server these requirements apply to --> <link value="[uri]"/><!-- 0..* Links to the FHIR specification --> <capabilities><!-- 1..1 canonical(CapabilityStatement) Required Capability Statement --></capabilities> </capability> </metadata> <scope> <!-- 0..* Indication of the artifact(s) that are tested by this test case --> <artifact><!-- 1..1 canonical(Any) The specific conformance artifact being tested --></artifact> <conformance><!-- 0..1 CodeableConcept required | optional | strict --></conformance> <phase><!-- 0..1 CodeableConcept unit | integration | production --></phase> </scope> <fixture> <!-- 0..* Fixture in the test script - by reference (uri) --> <autocreate value="[boolean]"/><!-- 1..1 Whether or not to implicitly create the fixture during setup --> <autodelete value="[boolean]"/><!-- 1..1 Whether or not to implicitly delete the fixture during teardown --> <resource><!-- 0..1 Reference(Any) Reference of the resource --></resource> </fixture> <profile><!-- 0..* canonical(StructureDefinition) Reference of the validation profile --></profile> <variable> <!-- 0..* Placeholder for evaluated elements --> <name value="[string]"/><!-- 1..1 Descriptive name for this variable --> <defaultValue value="[string]"/><!-- 0..1 Default, hard-coded, or user-defined value for this variable --> <description value="[string]"/><!-- 0..1 Natural language description of the variable --> <expression value="[string]"/><!-- I 0..1 The FHIRPath expression against the fixture body --> <headerField value="[string]"/><!-- I 0..1 HTTP header field name for source --> <hint value="[string]"/><!-- 0..1 Hint help text for default value to enter --> <path value="[string]"/><!-- I 0..1 XPath or JSONPath against the fixture body --> <sourceId value="[id]"/><!-- 0..1 Fixture Id of source expression or headerField within this variable --> </variable> <setup> <!-- 0..1 A series of required setup operations before tests are executed --> <action> <!-- 1..* A setup operation or assert to perform --> <operation> <!-- I 0..1 The setup operation to perform --> <type><!-- I 0..1 Coding The operation code type that will be executed --></type> <resource value="[uri]"/><!-- 0..1 Resource type --> <label value="[string]"/><!-- 0..1 Tracking/logging operation label --> <description value="[string]"/><!-- 0..1 Tracking/reporting operation description --> <accept value="[code]"/><!-- 0..1 Mime type to accept in the payload of the response, with charset etc --> <contentType value="[code]"/><!-- 0..1 Mime type of the request payload contents, with charset etc --> <destination value="[integer]"/><!-- 0..1 Server responding to the request --> <encodeRequestUrl value="[boolean]"/><!-- 1..1 Whether or not to send the request url in encoded format --> <method value="[code]"/><!-- 0..1 delete | get | options | patch | post | put | head --> <origin value="[integer]"/><!-- 0..1 Server initiating the request --> <params value="[string]"/><!-- I 0..1 Explicitly defined path parameters --> <requestHeader> <!-- 0..* Each operation can have one or more header elements --> <field value="[string]"/><!-- 1..1 HTTP header field name --> <value value="[string]"/><!-- 1..1 HTTP headerfield value --> </requestHeader> <requestId value="[id]"/><!-- 0..1 Fixture Id of mapped request --> <responseId value="[id]"/><!-- 0..1 Fixture Id of mapped response --> <sourceId value="[id]"/><!-- I 0..1 Fixture Id of body for PUT and POST requests --> <targetId value="[id]"/><!-- I 0..1 Id of fixture used for extracting the [id], [type], and [vid] for GET requests --> <url value="[string]"/><!-- I 0..1 Request URL --> </operation> <assert> <!-- I 0..1 The assertion to perform --> <label value="[string]"/><!-- 0..1 Tracking/logging assertion label --> <description value="[string]"/><!-- 0..1 Tracking/reporting assertion description --> <direction value="[code]"/><!-- I 0..1 response | request --> <compareToSourceId value="[string]"/><!-- I 0..1 Id of the source fixture to be evaluated --> <compareToSourceExpression value="[string]"/><!-- I 0..1 The FHIRPath expression to evaluate against the source fixture --> <compareToSourcePath value="[string]"/><!-- I 0..1 XPath or JSONPath expression to evaluate against the source fixture --> <contentType value="[code]"/><!-- I 0..1 Mime type to compare against the 'Content-Type' header --> <defaultManualCompletion value="[code]"/><!-- 0..1 fail | pass | skip | stop --> <expression value="[string]"/><!-- I 0..1 The FHIRPath expression to be evaluated --> <headerField value="[string]"/><!-- I 0..1 HTTP header field name --> <minimumId value="[string]"/><!-- I 0..1 Fixture Id of minimum content resource --> <navigationLinks value="[boolean]"/><!-- I 0..1 Perform validation on navigation links? --> <operator value="[code]"/><!-- 0..1 equals | notEquals | in | notIn | greaterThan | lessThan | empty | notEmpty | contains | notContains | eval | manualEval --> <path value="[string]"/><!-- I 0..1 XPath or JSONPath expression --> <requestMethod value="[code]"/><!-- I 0..1 delete | get | options | patch | post | put | head --> <requestURL value="[string]"/><!-- 0..1 Request URL comparison value --> <resource value="[uri]"/><!-- I 0..1 Resource type --> <response value="[code]"/><!-- I 0..1 continue | switchingProtocols | okay | created | accepted | nonAuthoritativeInformation | noContent | resetContent | partialContent | multipleChoices | movedPermanently | found | seeOther | notModified | useProxy | temporaryRedirect | permanentRedirect | badRequest | unauthorized | paymentRequired | forbidden | notFound | methodNotAllowed | notAcceptable | proxyAuthenticationRequired | requestTimeout | conflict | gone | lengthRequired | preconditionFailed | contentTooLarge | uriTooLong | unsupportedMediaType | rangeNotSatisfiable | expectationFailed | misdirectedRequest | unprocessableContent | upgradeRequired | internalServerError | notImplemented | badGateway | serviceUnavailable | gatewayTimeout | httpVersionNotSupported --> <responseCode value="[string]"/><!-- I 0..1 HTTP response code to test --> <sourceId value="[id]"/><!-- 0..1 Fixture Id of source expression or headerField --> <stopTestOnFail value="[boolean]"/><!-- 1..1 If this assert fails, will the current test execution stop? --> <validateProfileId value="[id]"/><!-- I 0..1 Profile Id of validation profile reference --> <value value="[string]"/><!-- 0..1 The value to compare to --> <warningOnly value="[boolean]"/><!-- 1..1 Will this assert produce a warning only on error? --> <requirement> <!-- 0..* Links or references to the testing requirements --> <link[x]><!-- 0..1 uri|canonical(Requirements) Link or reference to the testing requirement --></link[x]> </requirement> </assert> </action> </setup> <test> <!-- 0..* A test in this script --> <name value="[string]"/><!-- 0..1 Tracking/logging name of this test --> <description value="[string]"/><!-- 0..1 Tracking/reporting short description of the test --> <action> <!-- 1..* A test operation or assert to perform --> <operation><!-- 0..1 Content as for TestScript.setup.action.operation The setup operation to perform --></operation> <assert><!-- 0..1 Content as for TestScript.setup.action.assert The setup assertion to perform --></assert> </action> </test> <teardown> <!-- 0..1 A series of required clean up steps --> <action> <!-- 1..* One or more teardown operations to perform --> <operation><!-- 1..1 Content as for TestScript.setup.action.operation The teardown operation to perform --></operation> </action> </teardown> </TestScript>
JSON Template
{ "resourceType" : "TestScript", // from Resource: id, meta, implicitRules, and language // from DomainResource: text, contained, extension, and modifierExtension "url" : "<uri>", // Canonical identifier for this test script, represented as a URI (globally unique) "identifier" : [{ Identifier }], // Additional identifier for the test script "version" : "<string>", // Business version of the test script // versionAlgorithm[x]: How to compare versions. One of these 2: "versionAlgorithmString" : "<string>", "versionAlgorithmCoding" : { Coding }, "name" : "<string>", // I R! Name for this test script (computer friendly) "title" : "<string>", // Name for this test script (human friendly) "status" : "<code>", // R! draft | active | retired | unknown "experimental" : <boolean>, // For testing purposes, not real usage "date" : "<dateTime>", // Date last changed "publisher" : "<string>", // Name of the publisher/steward (organization or individual) "contact" : [{ ContactDetail }], // Contact details for the publisher "description" : "<markdown>", // Natural language description of the test script "useContext" : [{ UsageContext }], // The context that the content is intended to support "jurisdiction" : [{ CodeableConcept }], // Intended jurisdiction for test script (if applicable) "purpose" : "<markdown>", // Why this test script is defined "copyright" : "<markdown>", // Use and/or publishing restrictions "copyrightLabel" : "<string>", // Copyright holder and year(s) "origin" : [{ // An abstract server representing a client or sender in a message exchange "index" : <integer>, // R! The index of the abstract origin server starting at 1 "profile" : { Coding }, // R! FHIR-Client | FHIR-SDC-FormFiller "url" : "<url>" // The url path of the origin server }], "destination" : [{ // An abstract server representing a destination or receiver in a message exchange "index" : <integer>, // R! The index of the abstract destination server starting at 1 "profile" : { Coding }, // R! FHIR-Server | FHIR-SDC-FormManager | FHIR-SDC-FormReceiver | FHIR-SDC-FormProcessor "url" : "<url>" // The url path of the destination server }], "metadata" : { // Required capability that is assumed to function correctly on the FHIR server being tested "link" : [{ // Links to the FHIR specification "url" : "<uri>", // R! URL to the specification "description" : "<string>" // Short description }], "capability" : [{ // I R! Capabilities that are assumed to function correctly on the FHIR server being tested "required" : <boolean>, // I R! Are the capabilities required? "validated" : <boolean>, // I R! Are the capabilities validated? "description" : "<string>", // The expected capabilities of the server "origin" : [<integer>], // Which origin server these requirements apply to "destination" : <integer>, // Which server these requirements apply to "link" : ["<uri>"], // Links to the FHIR specification "capabilities" : "<canonical(CapabilityStatement)>" // R! Required Capability Statement }] }, "scope" : [{ // Indication of the artifact(s) that are tested by this test case "artifact" : "<canonical(Any)>", // R! The specific conformance artifact being tested "conformance" : { CodeableConcept }, // required | optional | strict "phase" : { CodeableConcept } // unit | integration | production }], "fixture" : [{ // Fixture in the test script - by reference (uri) "autocreate" : <boolean>, // R! Whether or not to implicitly create the fixture during setup "autodelete" : <boolean>, // R! Whether or not to implicitly delete the fixture during teardown "resource" : { Reference(Any) } // Reference of the resource }], "profile" : ["<canonical(StructureDefinition)>"], // Reference of the validation profile "variable" : [{ // Placeholder for evaluated elements "name" : "<string>", // R! Descriptive name for this variable "defaultValue" : "<string>", // Default, hard-coded, or user-defined value for this variable "description" : "<string>", // Natural language description of the variable "expression" : "<string>", // I The FHIRPath expression against the fixture body "headerField" : "<string>", // I HTTP header field name for source "hint" : "<string>", // Hint help text for default value to enter "path" : "<string>", // I XPath or JSONPath against the fixture body "sourceId" : "<id>" // Fixture Id of source expression or headerField within this variable }], "setup" : { // A series of required setup operations before tests are executed "action" : [{ // R! A setup operation or assert to perform "operation" : { // I The setup operation to perform "type" : { Coding }, // I The operation code type that will be executed "resource" : "<uri>", // Resource type "label" : "<string>", // Tracking/logging operation label "description" : "<string>", // Tracking/reporting operation description "accept" : "<code>", // Mime type to accept in the payload of the response, with charset etc "contentType" : "<code>", // Mime type of the request payload contents, with charset etc "destination" : <integer>, // Server responding to the request "encodeRequestUrl" : <boolean>, // R! Whether or not to send the request url in encoded format "method" : "<code>", // delete | get | options | patch | post | put | head "origin" : <integer>, // Server initiating the request "params" : "<string>", // I Explicitly defined path parameters "requestHeader" : [{ // Each operation can have one or more header elements "field" : "<string>", // R! HTTP header field name "value" : "<string>" // R! HTTP headerfield value }], "requestId" : "<id>", // Fixture Id of mapped request "responseId" : "<id>", // Fixture Id of mapped response "sourceId" : "<id>", // I Fixture Id of body for PUT and POST requests "targetId" : "<id>", // I Id of fixture used for extracting the [id], [type], and [vid] for GET requests "url" : "<string>" // I Request URL }, "assert" : { // I The assertion to perform "label" : "<string>", // Tracking/logging assertion label "description" : "<string>", // Tracking/reporting assertion description "direction" : "<code>", // I response | request "compareToSourceId" : "<string>", // I Id of the source fixture to be evaluated "compareToSourceExpression" : "<string>", // I The FHIRPath expression to evaluate against the source fixture "compareToSourcePath" : "<string>", // I XPath or JSONPath expression to evaluate against the source fixture "contentType" : "<code>", // I Mime type to compare against the 'Content-Type' header "defaultManualCompletion" : "<code>", // fail | pass | skip | stop "expression" : "<string>", // I The FHIRPath expression to be evaluated "headerField" : "<string>", // I HTTP header field name "minimumId" : "<string>", // I Fixture Id of minimum content resource "navigationLinks" : <boolean>, // I Perform validation on navigation links? "operator" : "<code>", // equals | notEquals | in | notIn | greaterThan | lessThan | empty | notEmpty | contains | notContains | eval | manualEval "path" : "<string>", // I XPath or JSONPath expression "requestMethod" : "<code>", // I delete | get | options | patch | post | put | head "requestURL" : "<string>", // Request URL comparison value "resource" : "<uri>", // I Resource type "response" : "<code>", // I continue | switchingProtocols | okay | created | accepted | nonAuthoritativeInformation | noContent | resetContent | partialContent | multipleChoices | movedPermanently | found | seeOther | notModified | useProxy | temporaryRedirect | permanentRedirect | badRequest | unauthorized | paymentRequired | forbidden | notFound | methodNotAllowed | notAcceptable | proxyAuthenticationRequired | requestTimeout | conflict | gone | lengthRequired | preconditionFailed | contentTooLarge | uriTooLong | unsupportedMediaType | rangeNotSatisfiable | expectationFailed | misdirectedRequest | unprocessableContent | upgradeRequired | internalServerError | notImplemented | badGateway | serviceUnavailable | gatewayTimeout | httpVersionNotSupported "responseCode" : "<string>", // I HTTP response code to test "sourceId" : "<id>", // Fixture Id of source expression or headerField "stopTestOnFail" : <boolean>, // R! If this assert fails, will the current test execution stop? "validateProfileId" : "<id>", // I Profile Id of validation profile reference "value" : "<string>", // The value to compare to "warningOnly" : <boolean>, // R! Will this assert produce a warning only on error? "requirement" : [{ // Links or references to the testing requirements // link[x]: Link or reference to the testing requirement. One of these 2: "linkUri" : "<uri>", "linkCanonical" : "<canonical(Requirements)>" }] } }] }, "test" : [{ // A test in this script "name" : "<string>", // Tracking/logging name of this test "description" : "<string>", // Tracking/reporting short description of the test "action" : [{ // R! A test operation or assert to perform "operation" : { Content as for TestScript.setup.action.operation }, // The setup operation to perform "assert" : { Content as for TestScript.setup.action.assert } // The setup assertion to perform }] }], "teardown" : { // A series of required clean up steps "action" : [{ // R! One or more teardown operations to perform "operation" : { Content as for TestScript.setup.action.operation } // R! The teardown operation to perform }] } }
Turtle Template
@prefix fhir: <http://hl7.org/fhir/> . [ a fhir:TestScript; fhir:nodeRole fhir:treeRoot; # if this is the parser root # from Resource: .id, .meta, .implicitRules, and .language # from DomainResource: .text, .contained, .extension, and .modifierExtension fhir:url [ uri ] ; # 0..1 Canonical identifier for this test script, represented as a URI (globally unique) fhir:identifier ( [ Identifier ] ... ) ; # 0..* Additional identifier for the test script fhir:version [ string ] ; # 0..1 Business version of the test script # versionAlgorithm[x] : 0..1 How to compare versions. One of these 2 fhir:versionAlgorithm [ a fhir:string ; string ] fhir:versionAlgorithm [ a fhir:Coding ; Coding ] fhir:name [ string ] ; # 1..1 I Name for this test script (computer friendly) fhir:title [ string ] ; # 0..1 Name for this test script (human friendly) fhir:status [ code ] ; # 1..1 draft | active | retired | unknown fhir:experimental [ boolean ] ; # 0..1 For testing purposes, not real usage fhir:date [ dateTime ] ; # 0..1 Date last changed fhir:publisher [ string ] ; # 0..1 Name of the publisher/steward (organization or individual) fhir:contact ( [ ContactDetail ] ... ) ; # 0..* Contact details for the publisher fhir:description [ markdown ] ; # 0..1 Natural language description of the test script fhir:useContext ( [ UsageContext ] ... ) ; # 0..* The context that the content is intended to support fhir:jurisdiction ( [ CodeableConcept ] ... ) ; # 0..* Intended jurisdiction for test script (if applicable) fhir:purpose [ markdown ] ; # 0..1 Why this test script is defined fhir:copyright [ markdown ] ; # 0..1 Use and/or publishing restrictions fhir:copyrightLabel [ string ] ; # 0..1 Copyright holder and year(s) fhir:origin ( [ # 0..* An abstract server representing a client or sender in a message exchange fhir:index [ integer ] ; # 1..1 The index of the abstract origin server starting at 1 fhir:profile [ Coding ] ; # 1..1 FHIR-Client | FHIR-SDC-FormFiller fhir:url [ url ] ; # 0..1 The url path of the origin server ] ... ) ; fhir:destination ( [ # 0..* An abstract server representing a destination or receiver in a message exchange fhir:index [ integer ] ; # 1..1 The index of the abstract destination server starting at 1 fhir:profile [ Coding ] ; # 1..1 FHIR-Server | FHIR-SDC-FormManager | FHIR-SDC-FormReceiver | FHIR-SDC-FormProcessor fhir:url [ url ] ; # 0..1 The url path of the destination server ] ... ) ; fhir:metadata [ # 0..1 Required capability that is assumed to function correctly on the FHIR server being tested fhir:link ( [ # 0..* Links to the FHIR specification fhir:url [ uri ] ; # 1..1 URL to the specification fhir:description [ string ] ; # 0..1 Short description ] ... ) ; fhir:capability ( [ # 1..* I Capabilities that are assumed to function correctly on the FHIR server being tested fhir:required [ boolean ] ; # 1..1 I Are the capabilities required? fhir:validated [ boolean ] ; # 1..1 I Are the capabilities validated? fhir:description [ string ] ; # 0..1 The expected capabilities of the server fhir:origin ( [ integer ] ... ) ; # 0..* Which origin server these requirements apply to fhir:destination [ integer ] ; # 0..1 Which server these requirements apply to fhir:link ( [ uri ] ... ) ; # 0..* Links to the FHIR specification fhir:capabilities [ canonical(CapabilityStatement) ] ; # 1..1 Required Capability Statement ] ... ) ; ] ; fhir:scope ( [ # 0..* Indication of the artifact(s) that are tested by this test case fhir:artifact [ canonical(Any) ] ; # 1..1 The specific conformance artifact being tested fhir:conformance [ CodeableConcept ] ; # 0..1 required | optional | strict fhir:phase [ CodeableConcept ] ; # 0..1 unit | integration | production ] ... ) ; fhir:fixture ( [ # 0..* Fixture in the test script - by reference (uri) fhir:autocreate [ boolean ] ; # 1..1 Whether or not to implicitly create the fixture during setup fhir:autodelete [ boolean ] ; # 1..1 Whether or not to implicitly delete the fixture during teardown fhir:resource [ Reference(Any) ] ; # 0..1 Reference of the resource ] ... ) ; fhir:profile ( [ canonical(StructureDefinition) ] ... ) ; # 0..* Reference of the validation profile fhir:variable ( [ # 0..* Placeholder for evaluated elements fhir:name [ string ] ; # 1..1 Descriptive name for this variable fhir:defaultValue [ string ] ; # 0..1 Default, hard-coded, or user-defined value for this variable fhir:description [ string ] ; # 0..1 Natural language description of the variable fhir:expression [ string ] ; # 0..1 I The FHIRPath expression against the fixture body fhir:headerField [ string ] ; # 0..1 I HTTP header field name for source fhir:hint [ string ] ; # 0..1 Hint help text for default value to enter fhir:path [ string ] ; # 0..1 I XPath or JSONPath against the fixture body fhir:sourceId [ id ] ; # 0..1 Fixture Id of source expression or headerField within this variable ] ... ) ; fhir:setup [ # 0..1 A series of required setup operations before tests are executed fhir:action ( [ # 1..* A setup operation or assert to perform fhir:operation [ # 0..1 I The setup operation to perform fhir:type [ Coding ] ; # 0..1 I The operation code type that will be executed fhir:resource [ uri ] ; # 0..1 Resource type fhir:label [ string ] ; # 0..1 Tracking/logging operation label fhir:description [ string ] ; # 0..1 Tracking/reporting operation description fhir:accept [ code ] ; # 0..1 Mime type to accept in the payload of the response, with charset etc fhir:contentType [ code ] ; # 0..1 Mime type of the request payload contents, with charset etc fhir:destination [ integer ] ; # 0..1 Server responding to the request fhir:encodeRequestUrl [ boolean ] ; # 1..1 Whether or not to send the request url in encoded format fhir:method [ code ] ; # 0..1 delete | get | options | patch | post | put | head fhir:origin [ integer ] ; # 0..1 Server initiating the request fhir:params [ string ] ; # 0..1 I Explicitly defined path parameters fhir:requestHeader ( [ # 0..* Each operation can have one or more header elements fhir:field [ string ] ; # 1..1 HTTP header field name fhir:value [ string ] ; # 1..1 HTTP headerfield value ] ... ) ; fhir:requestId [ id ] ; # 0..1 Fixture Id of mapped request fhir:responseId [ id ] ; # 0..1 Fixture Id of mapped response fhir:sourceId [ id ] ; # 0..1 I Fixture Id of body for PUT and POST requests fhir:targetId [ id ] ; # 0..1 I Id of fixture used for extracting the [id], [type], and [vid] for GET requests fhir:url [ string ] ; # 0..1 I Request URL ] ; fhir:assert [ # 0..1 I The assertion to perform fhir:label [ string ] ; # 0..1 Tracking/logging assertion label fhir:description [ string ] ; # 0..1 Tracking/reporting assertion description fhir:direction [ code ] ; # 0..1 I response | request fhir:compareToSourceId [ string ] ; # 0..1 I Id of the source fixture to be evaluated fhir:compareToSourceExpression [ string ] ; # 0..1 I The FHIRPath expression to evaluate against the source fixture fhir:compareToSourcePath [ string ] ; # 0..1 I XPath or JSONPath expression to evaluate against the source fixture fhir:contentType [ code ] ; # 0..1 I Mime type to compare against the 'Content-Type' header fhir:defaultManualCompletion [ code ] ; # 0..1 fail | pass | skip | stop fhir:expression [ string ] ; # 0..1 I The FHIRPath expression to be evaluated fhir:headerField [ string ] ; # 0..1 I HTTP header field name fhir:minimumId [ string ] ; # 0..1 I Fixture Id of minimum content resource fhir:navigationLinks [ boolean ] ; # 0..1 I Perform validation on navigation links? fhir:operator [ code ] ; # 0..1 equals | notEquals | in | notIn | greaterThan | lessThan | empty | notEmpty | contains | notContains | eval | manualEval fhir:path [ string ] ; # 0..1 I XPath or JSONPath expression fhir:requestMethod [ code ] ; # 0..1 I delete | get | options | patch | post | put | head fhir:requestURL [ string ] ; # 0..1 Request URL comparison value fhir:resource [ uri ] ; # 0..1 I Resource type fhir:response [ code ] ; # 0..1 I continue | switchingProtocols | okay | created | accepted | nonAuthoritativeInformation | noContent | resetContent | partialContent | multipleChoices | movedPermanently | found | seeOther | notModified | useProxy | temporaryRedirect | permanentRedirect | badRequest | unauthorized | paymentRequired | forbidden | notFound | methodNotAllowed | notAcceptable | proxyAuthenticationRequired | requestTimeout | conflict | gone | lengthRequired | preconditionFailed | contentTooLarge | uriTooLong | unsupportedMediaType | rangeNotSatisfiable | expectationFailed | misdirectedRequest | unprocessableContent | upgradeRequired | internalServerError | notImplemented | badGateway | serviceUnavailable | gatewayTimeout | httpVersionNotSupported fhir:responseCode [ string ] ; # 0..1 I HTTP response code to test fhir:sourceId [ id ] ; # 0..1 Fixture Id of source expression or headerField fhir:stopTestOnFail [ boolean ] ; # 1..1 If this assert fails, will the current test execution stop? fhir:validateProfileId [ id ] ; # 0..1 I Profile Id of validation profile reference fhir:value [ string ] ; # 0..1 The value to compare to fhir:warningOnly [ boolean ] ; # 1..1 Will this assert produce a warning only on error? fhir:requirement ( [ # 0..* Links or references to the testing requirements # link[x] : 0..1 Link or reference to the testing requirement. One of these 2 fhir:link [ a fhir:uri ; uri ] fhir:link [ a fhir:canonical ; canonical(Requirements) ] ] ... ) ; ] ; ] ... ) ; ] ; fhir:test ( [ # 0..* A test in this script fhir:name [ string ] ; # 0..1 Tracking/logging name of this test fhir:description [ string ] ; # 0..1 Tracking/reporting short description of the test fhir:action ( [ # 1..* A test operation or assert to perform fhir:operation [ See TestScript.setup.action.operation ] ; # 0..1 The setup operation to perform fhir:assert [ See TestScript.setup.action.assert ] ; # 0..1 The setup assertion to perform ] ... ) ; ] ... ) ; fhir:teardown [ # 0..1 A series of required clean up steps fhir:action ( [ # 1..* One or more teardown operations to perform fhir:operation [ See TestScript.setup.action.operation ] ; # 1..1 The teardown operation to perform ] ... ) ; ] ; ]
Changes from both R4 and R4B
TestScript | |
TestScript.url |
|
TestScript.identifier |
|
TestScript.versionAlgorithm[x] |
|
TestScript.copyrightLabel |
|
TestScript.origin.url |
|
TestScript.destination.url |
|
TestScript.scope |
|
TestScript.scope.artifact |
|
TestScript.scope.conformance |
|
TestScript.scope.phase |
|
TestScript.profile |
|
TestScript.setup.action.operation.type |
|
TestScript.setup.action.operation.resource |
|
TestScript.setup.action.assert.defaultManualCompletion |
|
TestScript.setup.action.assert.operator |
|
TestScript.setup.action.assert.resource |
|
TestScript.setup.action.assert.response |
|
TestScript.setup.action.assert.stopTestOnFail |
|
TestScript.setup.action.assert.requirement |
|
TestScript.setup.action.assert.requirement.link[x] |
|
See the Full Difference for further information
This analysis is available for R4 as XML or JSON and for R4B as XML or JSON.
See R4 <--> R5 Conversion Maps (status = See Conversions Summary.)
Additional definitions: Master Definition XML + JSON, XML Schema/Schematron + JSON Schema, ShEx (for Turtle) , the spreadsheet version & the dependency analysis
Path | ValueSet | Type | Documentation |
---|---|---|---|
TestScript.versionAlgorithm[x] | VersionAlgorithm | Extensible | Indicates the mechanism used to compare versions to determine which is more current. |
TestScript.status | PublicationStatus | Required | The lifecycle status of an artifact. |
TestScript.jurisdiction | JurisdictionValueSet | Extensible | This value set defines a base set of codes for country, country subdivision and region for indicating where a resource is intended to be used. Note: The codes for countries and country subdivisions are taken from ISO 3166 while the codes for "supra-national" regions are from UN Standard country or area codes for statistical use (M49) . |
TestScript.origin.profile | TestScriptProfileOriginType | Extensible | This value set defines a set of codes that are used to indicate the profile type of a test system when acting as the origin within a TestScript. |
TestScript.destination.profile | TestScriptProfileDestinationType | Extensible | This value set defines a set of codes that are used to indicate the profile type of a test system when acting as the destination within a TestScript. |
TestScript.scope.conformance | TestScriptScopeConformanceType | Extensible | The expectation of whether the test must pass for the system to be considered conformant with the artifact. |
TestScript.scope.phase | TestScriptScopePhaseType | Extensible | The phase of testing for this artifact. |
TestScript.setup.action.operation.type | TestScriptOperationCode (a valid code from FHIR Restful Interactions) | Extensible | This value set defines a set of codes that are used to indicate the supported operations of a testing engine or tool. |
TestScript.setup.action.operation.resource | ConcreteFHIRTypes | Extensible | List of all non-abstract types, data types and resources |
TestScript.setup.action.operation.accept | MimeTypes (a valid code from urn:ietf:bcp:13 ) | Required | This value set includes all possible codes from BCP-13 (see http://tools.ietf.org/html/bcp13) |
TestScript.setup.action.operation.contentType | MimeTypes (a valid code from urn:ietf:bcp:13 ) | Required | This value set includes all possible codes from BCP-13 (see http://tools.ietf.org/html/bcp13) |
TestScript.setup.action.operation.method | TestScriptRequestMethodCode | Required | The allowable request method or HTTP operation codes. |
TestScript.setup.action.assert.direction | AssertionDirectionType | Required | The type of direction to use for assertion. |
TestScript.setup.action.assert.contentType | MimeTypes (a valid code from urn:ietf:bcp:13 ) | Required | This value set includes all possible codes from BCP-13 (see http://tools.ietf.org/html/bcp13) |
TestScript.setup.action.assert.defaultManualCompletion | AssertionManualCompletionType | Required | The type of manual completion to use for assertion. |
TestScript.setup.action.assert.operator | AssertionOperatorType | Required | The type of operator to use for assertion. |
TestScript.setup.action.assert.requestMethod | TestScriptRequestMethodCode | Required | The allowable request method or HTTP operation codes. |
TestScript.setup.action.assert.resource | ConcreteFHIRTypes | Extensible | List of all non-abstract types, data types and resources |
TestScript.setup.action.assert.response | AssertionResponseTypes | Required | The type of response code to use for assertion. |
UniqueKey | Level | Location | Description | Expression |
cnl-0 | Warning | (base) | Name should be usable as an identifier for the module by machine processing applications such as code generation | name.exists() implies name.matches('^[A-Z]([A-Za-z0-9_]){1,254}$') |
tst-1 | Rule | TestScript.setup.action | Setup action SHALL contain either an operation or assert but not both. | operation.exists() xor assert.exists() |
cnl-1 | Warning | TestScript.url | URL should not contain | or # - these characters make processing canonical references problematic | exists() implies matches('^[^|# ]+$') |
tst-2 | Rule | TestScript.test.action | Test action SHALL contain either an operation or assert but not both. | operation.exists() xor assert.exists() |
tst-3 | Rule | TestScript.variable | Variable can only contain one of expression, headerField or path. | expression.empty() or headerField.empty() or path.empty() |
tst-4 | Rule | TestScript.metadata | TestScript metadata capability SHALL contain required or validated or both. | capability.required.exists() or capability.validated.exists() |
tst-5 | Rule | TestScript.setup.action.assert | Only a single assertion SHALL be present within setup action assert element. | extension.exists() or (contentType.count() + expression.count() + headerField.count() + minimumId.count() + navigationLinks.count() + path.count() + requestMethod.count() + resource.count() + responseCode.count() + response.count() + validateProfileId.count() <=1) or (((expression.count() + minimumId.count() <=2) or (expression.count() + validateProfileId.count() <=2)) and (expression.count() + path.count() <=1) and (minimumId.count() + validateProfileId.count() <=1)) or (((path.count() + minimumId.count() <=2) or (path.count() + validateProfileId.count() <=2)) and (expression.count() + path.count() <=1) and (minimumId.count() + validateProfileId.count() <=1)) |
tst-6 | Rule | TestScript.test.action.assert | Only a single assertion SHALL be present within test action assert element. | extension.exists() or (contentType.count() + expression.count() + headerField.count() + minimumId.count() + navigationLinks.count() + path.count() + requestMethod.count() + resource.count() + responseCode.count() + response.count() + validateProfileId.count() <=1) or (((expression.count() + minimumId.count() <=2) or (expression.count() + validateProfileId.count() <=2)) and (expression.count() + path.count() <=1) and (minimumId.count() + validateProfileId.count() <=1)) or (((path.count() + minimumId.count() <=2) or (path.count() + validateProfileId.count() <=2)) and (expression.count() + path.count() <=1) and (minimumId.count() + validateProfileId.count() <=1)) |
tst-7 | Rule | TestScript.setup.action.operation | Setup operation SHALL contain either sourceId or targetId or params or url. | sourceId.exists() or (targetId.count() + url.count() + params.count() = 1) or (type.code in ('capabilities' |'search' | 'transaction' | 'history')) |
tst-8 | Rule | TestScript.test.action.operation | Test operation SHALL contain either sourceId or targetId or params or url. | sourceId.exists() or (targetId.count() + url.count() + params.count() = 1) or (type.code in ('capabilities' | 'search' | 'transaction' | 'history')) |
tst-9 | Rule | TestScript.teardown.action.operation | Teardown operation SHALL contain either sourceId or targetId or params or url. | sourceId.exists() or (targetId.count() + url.count() + params.count() = 1) or (type.code in ('capabilities' | 'search' | 'transaction' | 'history')) |
tst-10 | Rule | TestScript.setup.action.assert | Setup action assert SHALL contain either compareToSourceId and compareToSourceExpression, compareToSourceId and compareToSourcePath or neither. | compareToSourceId.empty() xor (compareToSourceExpression.exists() or compareToSourcePath.exists()) |
tst-11 | Rule | TestScript.test.action.assert | Test action assert SHALL contain either compareToSourceId and compareToSourceExpression, compareToSourceId and compareToSourcePath or neither. | compareToSourceId.empty() xor (compareToSourceExpression.exists() or compareToSourcePath.exists()) |
tst-12 | Rule | TestScript.setup.action.assert | Setup action assert response and responseCode SHALL be empty when direction equals request | (response.empty() and responseCode.empty() and direction = 'request') or direction.empty() or direction = 'response' |
tst-13 | Rule | TestScript.test.action.assert | Test action assert response and response and responseCode SHALL be empty when direction equals request | (response.empty() and responseCode.empty() and direction = 'request') or direction.empty() or direction = 'response' |
Please refer to the Testing FHIR - How Tos for examples on working with this resource.
Search parameters for this resource. See also the full list of search parameters for this resource, and check the Extensions registry for search parameters on extensions related to this resource. The common parameters also apply. See Searching for more information about searching in REST, messaging, and services.
Name | Type | Description | Expression | In Common |
context | token | A use context assigned to the test script | (TestScript.useContext.value.ofType(CodeableConcept)) | 30 Resources |
context-quantity | quantity | A quantity- or range-valued use context assigned to the test script | (TestScript.useContext.value.ofType(Quantity)) | (TestScript.useContext.value.ofType(Range)) | 30 Resources |
context-type | token | A type of use context assigned to the test script | TestScript.useContext.code | 30 Resources |
context-type-quantity | composite | A use context type and quantity- or range-based value assigned to the test script | On TestScript.useContext: context-type: code context-quantity: value.ofType(Quantity) | value.ofType(Range) | 30 Resources |
context-type-value | composite | A use context type and value assigned to the test script | On TestScript.useContext: context-type: code context: value.ofType(CodeableConcept) | 30 Resources |
date | date | The test script publication date | TestScript.date | 30 Resources |
description | string | The description of the test script | TestScript.description | 28 Resources |
identifier | token | External identifier for the test script | TestScript.identifier | 34 Resources |
jurisdiction | token | Intended jurisdiction for the test script | TestScript.jurisdiction | 26 Resources |
name | string | Computationally friendly name of the test script | TestScript.name | 26 Resources |
publisher | string | Name of the publisher of the test script | TestScript.publisher | 30 Resources |
scope-artifact | reference | The artifact under test | TestScript.scope.artifact (Any) | |
scope-artifact-conformance | composite | The artifact under test and conformance testing expectation | On TestScript.scope: artifact: artifact conformance: conformance.ofType(CodeableConcept) | |
scope-artifact-phase | composite | The artifact under test and phase of testing | On TestScript.scope: artifact: artifact phase: phase.ofType(CodeableConcept) | |
status | token | The current status of the test script | TestScript.status | 35 Resources |
testscript-capability | string | TestScript required and validated capability | TestScript.metadata.capability.description | |
title | string | The human-friendly name of the test script | TestScript.title | 27 Resources |
url | uri | The uri that identifies the test script | TestScript.url | 34 Resources |
version | token | The business version of the test script | TestScript.version | 30 Resources |