STU 3 Ballot

This page is part of the FHIR Specification (v1.6.0: STU 3 Ballot 4). The current version which supercedes this version is 5.0.0. For a full list of available versions, see the Directory of published versions . Page versions: R5 R4B R4 R3 R2

7.14 Resource TestScript - Content

FHIR Infrastructure Work GroupMaturity Level: 0Compartments: Not linked to any defined compartments

TestScript is a resource that specifies a suite of tests against a FHIR server implementation to determine compliance against the FHIR specification.

7.14.1 Scope and Usage

The TestScript resource is used to define tests that can be executed on one or more FHIR servers. The TestScript resource would typically contain

  • a list of fixtures (required resources used in the tests)
  • setup procedures
  • a suite of thematically related tests
  • teardown procedures

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 various search parameters and search for the fixtures in the results. The teardown procedures would 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 to

  1. determine whether a given FHIR server adheres to the FHIR specification and
  2. determine whether two or more FHIR servers implement capabilities in a compatible or interoperable manner.
It may not be possible to fully automate the latter goal (especially with regards to business rules that might ride on top of different implementations), however the tests should be able to determine whether two servers support the operations, value sets, profiles, and extensions to exchange Bundles of Resources (such as returned from the Patient $everything operation).

7.14.2 Boundaries and Relationships

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 an 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, Conformance 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:

7.14.3 Background and Context

7.14.3.1 Background

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.

7.14.4 Resource Content

Structure

NameFlagsCard.TypeDescription & Constraintsdoco
.. TestScript DomainResourceDescribes a set of tests
... url Σ1..1uriAbsolute URL used to reference this TestScript
... version Σ0..1stringLogical id for this version of the TestScript
... name Σ1..1stringInformal name for this TestScript
... status ?!Σ1..1codedraft | active | retired
ConformanceResourceStatus (Required)
... identifier Σ0..1IdentifierExternal identifier
... experimental Σ0..1booleanIf for testing purposes, not real usage
... publisher Σ0..1stringName of the publisher (Organization or individual)
... contact Σ0..*BackboneElementContact details of the publisher
.... name Σ0..1stringName of an individual to contact
.... telecom Σ0..*ContactPointContact details for individual or publisher
... date Σ0..1dateTimeDate for this version of the TestScript
... description Σ0..1markdownNatural language description of the TestScript
... useContext Σ0..*CodeableConceptContent intends to support these contexts
Context of Use ValueSet (Extensible)
... requirements 0..1markdownScope and Usage this Test Script is for
... copyright 0..1stringUse and/or publishing restrictions
... origin 0..*BackboneElementAn abstract server representing a client or sender in a message exchange
.... index 1..1integerThe index of the abstract origin server starting at 1
.... profile 1..1CodingFHIR-Client | FHIR-SDC-FormFiller
TestScriptProfileOriginType (Extensible)
... destination 0..*BackboneElementAn abstract server representing a destination or receiver in a message exchange
.... index 1..1integerThe index of the abstract destination server starting at 1
.... profile 1..1CodingFHIR-Server | FHIR-SDC-FormManager | FHIR-SDC-FormReceiver | FHIR-SDC-FormProcessor
TestScriptProfileDestinationType (Extensible)
... metadata I0..1BackboneElementRequired capability that is assumed to function correctly on the FHIR server being tested
TestScript metadata capability SHALL contain required or validated or both.
.... link 0..*BackboneElementLinks to the FHIR specification
..... url 1..1uriURL to the specification
..... description 0..1stringShort description
.... capability 1..*BackboneElementCapabilities that are assumed to function correctly on the FHIR server being tested
..... required 0..1booleanAre the capabilities required?
..... validated 0..1booleanAre the capabilities validated?
..... description 0..1stringThe expected capabilities of the server
..... origin 0..*integerWhich origin server these requirements apply to
..... destination 0..1integerWhich server these requirements apply to
..... link 0..*uriLinks to the FHIR specification
..... conformance 1..1Reference(Conformance)Required Conformance
... fixture 0..*BackboneElementFixture in the test script - by reference (uri)
.... autocreate 0..1booleanWhether or not to implicitly create the fixture during setup
.... autodelete 0..1booleanWhether or not to implicitly delete the fixture during teardown
.... resource 0..1Reference(Any)Reference of the resource
... profile 0..*Reference(Any)Reference of the validation profile
... variable I0..*BackboneElementPlaceholder for evaluated elements
Variable cannot contain both headerField and path.
.... name 1..1stringDescriptive name for this variable
.... defaultValue 0..1stringDefault, hard-coded, or user-defined value for this variable
.... headerField 0..1stringHTTP header field name for source
.... path 0..1stringXPath or JSONPath against the fixture body
.... sourceId 0..1idFixture Id of source expression or headerField within this variable
... rule 0..*BackboneElementAssert rule used within the test script
.... resource 1..1Reference(Any)Assert rule resource reference
.... param 0..*BackboneElementRule parameter template
..... name 1..1stringParameter name matching external assert rule parameter
..... value 0..1stringParameter value defined either explicitly or dynamically
... ruleset 0..*BackboneElementAssert ruleset used within the test script
.... resource 1..1Reference(Any)Assert ruleset resource reference
.... rule 1..*BackboneElementThe referenced rule within the ruleset
..... ruleId 1..1idId of referenced rule within the ruleset
..... param 0..*BackboneElementRuleset rule parameter template
...... name 1..1stringParameter name matching external assert ruleset rule parameter
...... value 0..1stringParameter value defined either explicitly or dynamically
... setup 0..1BackboneElementA series of required setup operations before tests are executed
.... action I1..*BackboneElementA setup operation or assert to perform
Setup action SHALL contain either an operation or assert but not both.
..... operation I0..1BackboneElementThe setup operation to perform
Setup operation SHALL contain either sourceId or targetId or params or url.
...... type 0..1CodingThe operation code type that will be executed
TestScriptOperationCode (Extensible)
...... resource 0..1codeResource type
FHIRDefinedType (Required)
...... label 0..1stringTracking/logging operation label
...... description 0..1stringTracking/reporting operation description
...... accept 0..1codexml | json | ttl | none
ContentType (Required)
...... contentType 0..1codexml | json | ttl | none
ContentType (Required)
...... destination 0..1integerServer responding to the request
...... encodeRequestUrl 0..1booleanWhether or not to send the request url in encoded format
...... origin 0..1integerServer initiating the request
...... params 0..1stringExplicitly defined path parameters
...... requestHeader 0..*BackboneElementEach operation can have one ore more header elements
....... field 1..1stringHTTP header field name
....... value 1..1stringHTTP headerfield value
...... responseId 0..1idFixture Id of mapped response
...... sourceId 0..1idFixture Id of body for PUT and POST requests
...... targetId 0..1idId of fixture used for extracting the [id], [type], and [vid] for GET requests
...... url 0..1stringRequest URL
..... assert I0..1BackboneElementThe assertion to perform
Only a single assertion SHALL be present within setup action assert element.
Setup action assert shall contain both compareToSourceId and compareToSourcePath or neither.
...... label 0..1stringTracking/logging assertion label
...... description 0..1stringTracking/reporting assertion description
...... direction 0..1coderesponse | request
AssertionDirectionType (Required)
...... compareToSourceId 0..1stringId of fixture used to compare the "sourceId/path" evaluations to
...... compareToSourcePath 0..1stringXPath or JSONPath expression against fixture used to compare the "sourceId/path" evaluations to
...... contentType 0..1codexml | json | ttl | none
ContentType (Required)
...... headerField 0..1stringHTTP header field name
...... minimumId 0..1stringFixture Id of minimum content resource
...... navigationLinks 0..1booleanPerform validation on navigation links?
...... operator 0..1codeequals | notEquals | in | notIn | greaterThan | lessThan | empty | notEmpty | contains | notContains
AssertionOperatorType (Required)
...... path 0..1stringXPath or JSONPath expression
...... requestURL 0..1stringRequest URL comparison value
...... resource 0..1codeResource type
FHIRDefinedType (Required)
...... response 0..1codeokay | created | noContent | notModified | bad | forbidden | notFound | methodNotAllowed | conflict | gone | preconditionFailed | unprocessable
AssertionResponseTypes (Required)
...... responseCode 0..1stringHTTP response code to test
...... rule 0..1BackboneElementThe reference to a TestScript.rule
....... ruleId 1..1idId of the TestScript.rule
....... param 0..*BackboneElementRule parameter template
........ name 1..1stringParameter name matching external assert rule parameter
........ value 1..1stringParameter value defined either explicitly or dynamically
...... ruleset 0..1BackboneElementThe reference to a TestScript.ruleset
....... rulesetId 1..1idId of the TestScript.ruleset
....... rule 0..*BackboneElementThe referenced rule within the ruleset
........ ruleId 1..1idId of referenced rule within the ruleset
........ param 0..*BackboneElementRule parameter template
......... name 1..1stringParameter name matching external assert ruleset rule parameter
......... value 1..1stringParameter value defined either explicitly or dynamically
...... sourceId 0..1idFixture Id of source expression or headerField
...... validateProfileId 0..1idProfile Id of validation profile reference
...... value 0..1stringThe value to compare to
...... warningOnly 0..1booleanWill this assert produce a warning only on error?
... test 0..*BackboneElementA test in this script
.... name 0..1stringTracking/logging name of this test
.... description 0..1stringTracking/reporting short description of the test
.... action I1..*BackboneElementA test operation or assert to perform
Test action SHALL contain either an operation or assert but not both.
..... operation I0..1see operationThe setup operation to perform
Test operation SHALL contain either sourceId or targetId or params or url.
..... assert I0..1see assertThe setup assertion to perform
Only a single assertion SHALL be present within test action assert element.
Test action assert shall contain both compareToSourceId and compareToSourcePath or neither.
... teardown 0..1BackboneElementA series of required clean up steps
.... action I1..*BackboneElementOne or more teardown operations to perform
Teardown action SHALL contain an operation.
..... operation I0..1see operationThe teardown operation to perform
Teardown operation SHALL contain either sourceId or targetId or params or url.

doco Documentation for this format

UML Diagram (Legend)

TestScript (DomainResource)An absolute URL that is used to identify this Test Script. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this Test Script is (or will be) publishedurl : uri [1..1]The identifier that is used to identify this version of the TestScript. This is an arbitrary value managed by the TestScript author manuallyversion : string [0..1]A free text natural language name identifying the TestScriptname : string [1..1]The status of the TestScript (this element modifies the meaning of other elements)status : code [1..1] « The lifecycle status of a Value Set or Concept Map. (Strength=Required)ConformanceResourceStatus! »Identifier for the TestScript assigned for external purposes outside the context of FHIRidentifier : Identifier [0..1]This TestScript was authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usageexperimental : boolean [0..1]The name of the individual or organization that published the Test Scriptpublisher : string [0..1]The date this version of the test tcript was published. The date must change when the business version changes, if it does, and it must change if the status code changes. In addition, it should change when the substantive content of the test cases changedate : dateTime [0..1]A free text natural language description of the TestScript and its usedescription : markdown [0..1]The content was developed with a focus and intent of supporting the contexts that are listed. These terms may be used to assist with indexing and searching of Test ScriptsuseContext : CodeableConcept [0..*] « Indicates the countries, regions, disciplines and other aspects of use within which this artifact is targeted for use. (Strength=Extensible)Context of Use ValueSet+ »Explains why this Test Script is needed and why it's been constrained as it hasrequirements : markdown [0..1]A copyright statement relating to the Test Script and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the details of the constraints and mappingscopyright : string [0..1]Reference to the profile to be used for validationprofile : Reference [0..*] « Any »ContactThe name of an individual to contact regarding the Test Scriptname : string [0..1]Contact details for individual (if a name was provided) or the publishertelecom : ContactPoint [0..*]OriginAbstract name given to an origin server in this test script. The name is provided as a number starting at 1index : integer [1..1]The type of origin profile the test system supportsprofile : Coding [1..1] « The type of origin profile the test system supports. (Strength=Extensible)TestScriptProfileOriginType+ »DestinationAbstract name given to a destination server in this test script. The name is provided as a number starting at 1index : integer [1..1]The type of destination profile the test system supportsprofile : Coding [1..1] « The type of destination profile the test system supports. (Strength=Extensible)TestScriptProfileDestinationT...+ »MetadataLinkURL to a particular requirement or feature within the FHIR specificationurl : uri [1..1]Short description of the linkdescription : string [0..1]CapabilityWhether or not the test execution will require the given capabilities of the server in order for this test script to executerequired : boolean [0..1]Whether or not the test execution will validate the given capabilities of the server in order for this test script to executevalidated : boolean [0..1]Description of the capabilities that this test script is requiring the server to supportdescription : string [0..1]Which origin server these requirements apply toorigin : integer [0..*]Which server these requirements apply todestination : integer [0..1]Links to the FHIR specification that describes this interaction and the resources involved in more detaillink : uri [0..*]Minimum conformance required of server for test script to execute successfully. If server does not meet at a minimum the reference conformance definition, then all tests in this script are skippedconformance : Reference [1..1] « Conformance »FixtureWhether or not to implicitly create the fixture during setup. If true, the fixture is automatically created on each server being tested during setup, therefore no create operation is required for this fixture in the TestScript.setup sectionautocreate : boolean [0..1]Whether or not to implicitly delete the fixture during teardown If true, the fixture is automatically deleted on each server being tested during teardown, therefore no delete operation is required for this fixture in the TestScript.teardown sectionautodelete : boolean [0..1]Reference to the resource (containing the contents of the resource needed for operations)resource : Reference [0..1] « Any »VariableDescriptive name for this variablename : string [1..1]A default, hard-coded, or user-defined value for this variabledefaultValue : string [0..1]Will be used to grab the HTTP header field value from the headers that sourceId is pointing toheaderField : string [0..1]XPath or JSONPath against the fixture body. When variables are defined, either headerField must be specified or path, but not bothpath : string [0..1]Fixture to evaluate the XPath/JSONPath expression or the headerField against within this variablesourceId : id [0..1]RuleReference to the resource (containing the contents of the rule needed for assertions)resource : Reference [1..1] « Any »RuleParamDescriptive name for this parameter that matches the external assert rule parameter namename : string [1..1]The explict or dynamic value for the parameter that will be passed on to the external rule templatevalue : string [0..1]RulesetReference to the resource (containing the contents of the ruleset needed for assertions)resource : Reference [1..1] « Any »RulesetRuleId of the referenced rule within the external ruleset templateruleId : id [1..1]RulesetRuleParamDescriptive name for this parameter that matches the external assert ruleset rule parameter namename : string [1..1]The value for the parameter that will be passed on to the external ruleset rule templatevalue : string [0..1]SetupSetupActionOperationServer interaction or operation typetype : Coding [0..1] « The allowable operation code types. (Strength=Extensible)TestScriptOperationCode+ »The type of the resource. See http://hl7-fhir.github.io/resourcelist.htmlresource : code [0..1] « Either a resource or a data type. (Strength=Required)FHIRDefinedType! »The label would be used for tracking/logging purposes by test engineslabel : string [0..1]The description would be used by test engines for tracking and reporting purposesdescription : string [0..1]The content-type or mime-type to use for RESTful operation in the 'Accept' headeraccept : code [0..1] « The content or mime type. (Strength=Required)ContentType! »The content-type or mime-type to use for RESTful operation in the 'Content-Type' headercontentType : code [0..1] « The content or mime type. (Strength=Required)ContentType! »The server where the request message is destined for. Must be one of the server numbers listed in TestScript.destination sectiondestination : integer [0..1]Whether or not to implicitly send the request url in encoded format. The default is true to match the standard RESTful client behavior. Set to false when communicating with a server that does not support encoded url pathsencodeRequestUrl : boolean [0..1]The server where the request message originates from. Must be one of the server numbers listed in TestScript.origin sectionorigin : integer [0..1]Path plus parameters after [type]. Used to set parts of the request URL explicitlyparams : string [0..1]The fixture id (maybe new) to map to the responseresponseId : id [0..1]The id of the fixture used as the body of a PUT or POST requestsourceId : id [0..1]Id of fixture used for extracting the [id], [type], and [vid] for GET requeststargetId : id [0..1]Complete request URLurl : string [0..1]RequestHeaderThe HTTP header field e.g. "Accept"field : string [1..1]The value of the header e.g. "application/fhir+xml"value : string [1..1]AssertThe label would be used for tracking/logging purposes by test engineslabel : string [0..1]The description would be used by test engines for tracking and reporting purposesdescription : string [0..1]The direction to use for the assertiondirection : code [0..1] « The type of direction to use for assertion. (Strength=Required)AssertionDirectionType! »Id of fixture used to compare the "sourceId/path" evaluations tocompareToSourceId : string [0..1]XPath or JSONPath expression against fixture used to compare the "sourceId/path" evaluations tocompareToSourcePath : string [0..1]The content-type or mime-type to use for RESTful operation in the 'Content-Type' headercontentType : code [0..1] « The content or mime type. (Strength=Required)ContentType! »The HTTP header field name e.g. 'Location'headerField : string [0..1]The ID of a fixture. Asserts that the response contains at a minimum the fixture specified by minimumIdminimumId : string [0..1]Whether or not the test execution performs validation on the bundle navigation linksnavigationLinks : boolean [0..1]The operator typeoperator : code [0..1] « The type of operator to use for assertion. (Strength=Required)AssertionOperatorType! »The XPath or JSONPath expression to be evaluated against the fixture representing the response received from serverpath : string [0..1]The value to use in a comparison against the request URL path stringrequestURL : string [0..1]The type of the resource. See http://hl7-fhir.github.io/resourcelist.htmlresource : code [0..1] « Either a resource or a data type. (Strength=Required)FHIRDefinedType! »okay | created | noContent | notModified | bad | forbidden | notFound | methodNotAllowed | conflict | gone | preconditionFailed | unprocessableresponse : code [0..1] « The type of response code to use for assertion. (Strength=Required)AssertionResponseTypes! »The value of the HTTP response code to be testedresponseCode : string [0..1]Fixture to evaluate the XPath/JSONPath expression or the headerField againstsourceId : id [0..1]The ID of the Profile to validate againstvalidateProfileId : id [0..1]The value to compare tovalue : string [0..1]Whether or not the test execution will produce a warning only on error for this assertwarningOnly : boolean [0..1]ActionAssertRuleThe TestScript.rule id value this assert will evaluateruleId : id [1..1]ActionAssertRuleParamDescriptive name for this parameter that matches the external assert rule parameter namename : string [1..1]The value for the parameter that will be passed on to the external rule templatevalue : string [1..1]ActionAssertRulesetThe TestScript.ruleset id value this assert will evaluaterulesetId : id [1..1]ActionAssertRulesetRuleId of the referenced rule within the external ruleset templateruleId : id [1..1]ParamDescriptive name for this parameter that matches the external assert ruleset rule parameter namename : string [1..1]The value for the parameter that will be passed on to the external ruleset rule templatevalue : string [1..1]TestThe name of this test used for tracking/logging purposes by test enginesname : string [0..1]A short description of the test used by test engines for tracking and reporting purposesdescription : string [0..1]TestActionTeardownTeardownActionContacts to assist a user in finding and communicating with the publishercontact[0..*]An abstract server used in operations within this test script in the origin elementorigin[0..*]An abstract server used in operations within this test script in the destination elementdestination[0..*]A link to the FHIR specification that this test is coveringlink[0..*]Capabilities that must exist and are assumed to function correctly on the FHIR server being testedcapability[1..*]The required capability must exist and are assumed to function correctly on the FHIR server being testedmetadata[0..1]Fixture in the test script - by reference (uri). All fixtures are required for the test script to executefixture[0..*]Variable is set based either on element value in response body or on header field value in the response headersvariable[0..*]Each rule template can take one or more parameters for rule evaluationparam[0..*]Assert rule to be used in one or more asserts within the test scriptrule[0..*]Each rule template can take one or more parameters for rule evaluationparam[0..*]The referenced rule within the external ruleset templaterule[1..*]Contains one or more rules. Offers a way to group rules so assertions could reference the group of rules and have them all appliedruleset[0..*]Header elements would be used to set HTTP headersrequestHeader[0..*]The operation to performoperation[0..1]Each rule template can take one or more parameters for rule evaluationparam[0..*]The TestScript.rule this assert will evaluaterule[0..1]Each rule template can take one or more parameters for rule evaluationparam[0..*]The referenced rule within the external ruleset templaterule[0..*]The TestScript.ruleset this assert will evaluateruleset[0..1]Evaluates the results of previous operations to determine if the server under test behaves appropriatelyassert[0..1]Action would contain either an operation or an assertionaction[1..*]A series of required setup operations before tests are executedsetup[0..1]An operation would involve a REST request to a serveroperation[0..1]Evaluates the results of previous operations to determine if the server under test behaves appropriatelyassert[0..1]Action would contain either an operation or an assertionaction[1..*]A test in this scripttest[0..*]An operation would involve a REST request to a serveroperation[0..1]The teardown action will only contain an operationaction[1..*]A series of operations required to clean up after the all the tests are executed (successfully or otherwise)teardown[0..1]

XML Template

<TestScript xmlns="http://hl7.org/fhir"> doco
 <!-- from Resource: id, meta, implicitRules, and language -->
 <!-- from DomainResource: text, contained, extension, and modifierExtension -->
 <url value="[uri]"/><!-- 1..1 Absolute URL used to reference this TestScript -->
 <version value="[string]"/><!-- 0..1 Logical id for this version of the TestScript -->
 <name value="[string]"/><!-- 1..1 Informal name for this TestScript -->
 <status value="[code]"/><!-- 1..1 draft | active | retired -->
 <identifier><!-- 0..1 Identifier External identifier --></identifier>
 <experimental value="[boolean]"/><!-- 0..1 If for testing purposes, not real usage -->
 <publisher value="[string]"/><!-- 0..1 Name of the publisher (Organization or individual) -->
 <contact>  <!-- 0..* Contact details of the publisher -->
  <name value="[string]"/><!-- 0..1 Name of an individual to contact -->
  <telecom><!-- 0..* ContactPoint Contact details for individual or publisher --></telecom>
 </contact>
 <date value="[dateTime]"/><!-- 0..1 Date for this version of the TestScript -->
 <description value="[markdown]"/><!-- 0..1 Natural language description of the TestScript -->
 <useContext><!-- 0..* CodeableConcept Content intends to support these contexts --></useContext>
 <requirements value="[markdown]"/><!-- 0..1 Scope and Usage this Test Script is for -->
 <copyright value="[string]"/><!-- 0..1 Use and/or publishing restrictions -->
 <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>
 </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>
 </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>  <!-- 1..* Capabilities  that are assumed to function correctly on the FHIR server being tested -->
   <required value="[boolean]"/><!-- 0..1 Are the capabilities required? -->
   <validated value="[boolean]"/><!-- 0..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 -->
   <conformance><!-- 1..1 Reference(Conformance) Required Conformance --></conformance>
  </capability>
 </metadata>
 <fixture>  <!-- 0..* Fixture in the test script - by reference (uri) -->
  <autocreate value="[boolean]"/><!-- 0..1 Whether or not to implicitly create the fixture during setup -->
  <autodelete value="[boolean]"/><!-- 0..1 Whether or not to implicitly delete the fixture during teardown -->
  <resource><!-- 0..1 Reference(Any) Reference of the resource --></resource>
 </fixture>
 <profile><!-- 0..* Reference(Any) 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 -->
  <headerField value="[string]"/><!-- 0..1 HTTP header field name for source -->
  <path value="[string]"/><!-- 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>
 <rule>  <!-- 0..* Assert rule used within the test script -->
  <resource><!-- 1..1 Reference(Any) Assert rule resource reference --></resource>
  <param>  <!-- 0..* Rule parameter template -->
   <name value="[string]"/><!-- 1..1 Parameter name matching external assert rule parameter -->
   <value value="[string]"/><!-- 0..1 Parameter value defined either explicitly or dynamically -->
  </param>
 </rule>
 <ruleset>  <!-- 0..* Assert ruleset used within the test script -->
  <resource><!-- 1..1 Reference(Any) Assert ruleset resource reference --></resource>
  <rule>  <!-- 1..* The referenced rule within the ruleset -->
   <ruleId value="[id]"/><!-- 1..1 Id of referenced rule within the ruleset -->
   <param>  <!-- 0..* Ruleset rule parameter template -->
    <name value="[string]"/><!-- 1..1 Parameter name matching external assert ruleset rule parameter -->
    <value value="[string]"/><!-- 0..1 Parameter value defined either explicitly or dynamically -->
   </param>
  </rule>
 </ruleset>
 <setup>  <!-- 0..1 A series of required setup operations before tests are executed -->
  <action>  <!-- 1..* A setup operation or assert to perform -->
   <operation>  <!-- 0..1 The setup operation to perform -->
    <type><!-- 0..1 Coding The operation code type that will be executed --></type>
    <resource value="[code]"/><!-- 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 xml | json | ttl | none -->
    <contentType value="[code]"/><!-- 0..1 xml | json | ttl | none -->
    <destination value="[integer]"/><!-- 0..1 Server responding to the request -->
    <encodeRequestUrl value="[boolean]"/><!-- 0..1 Whether or not to send the request url in encoded format -->
    <origin value="[integer]"/><!-- 0..1 Server initiating the request -->
    <params value="[string]"/><!-- 0..1 Explicitly defined path parameters -->
    <requestHeader>  <!-- 0..* Each operation can have one ore more header elements -->
     <field value="[string]"/><!-- 1..1 HTTP header field name -->
     <value value="[string]"/><!-- 1..1 HTTP headerfield value -->
    </requestHeader>
    <responseId value="[id]"/><!-- 0..1 Fixture Id of mapped response -->
    <sourceId value="[id]"/><!-- 0..1 Fixture Id of body for PUT and POST requests -->
    <targetId value="[id]"/><!-- 0..1 Id of fixture used for extracting the [id],  [type], and [vid] for GET requests -->
    <url value="[string]"/><!-- 0..1 Request URL -->
   </operation>
   <assert>  <!-- 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]"/><!-- 0..1 response | request -->
    <compareToSourceId value="[string]"/><!-- 0..1 Id of fixture used to compare the "sourceId/path" evaluations to -->
    <compareToSourcePath value="[string]"/><!-- 0..1 XPath or JSONPath expression against fixture used to compare the "sourceId/path" evaluations to -->
    <contentType value="[code]"/><!-- 0..1 xml | json | ttl | none -->
    <headerField value="[string]"/><!-- 0..1 HTTP header field name -->
    <minimumId value="[string]"/><!-- 0..1 Fixture Id of minimum content resource -->
    <navigationLinks value="[boolean]"/><!-- 0..1 Perform validation on navigation links? -->
    <operator value="[code]"/><!-- 0..1 equals | notEquals | in | notIn | greaterThan | lessThan | empty | notEmpty | contains | notContains -->
    <path value="[string]"/><!-- 0..1 XPath or JSONPath expression -->
    <requestURL value="[string]"/><!-- 0..1 Request URL comparison value -->
    <resource value="[code]"/><!-- 0..1 Resource type -->
    <response value="[code]"/><!-- 0..1 okay | created | noContent | notModified | bad | forbidden | notFound | methodNotAllowed | conflict | gone | preconditionFailed | unprocessable -->
    <responseCode value="[string]"/><!-- 0..1 HTTP response code to test -->
    <rule>  <!-- 0..1 The reference to a TestScript.rule -->
     <ruleId value="[id]"/><!-- 1..1 Id of the TestScript.rule -->
     <param>  <!-- 0..* Rule parameter template -->
      <name value="[string]"/><!-- 1..1 Parameter name matching external assert rule parameter -->
      <value value="[string]"/><!-- 1..1 Parameter value defined either explicitly or dynamically -->
     </param>
    </rule>
    <ruleset>  <!-- 0..1 The reference to a TestScript.ruleset -->
     <rulesetId value="[id]"/><!-- 1..1 Id of the TestScript.ruleset -->
     <rule>  <!-- 0..* The referenced rule within the ruleset -->
      <ruleId value="[id]"/><!-- 1..1 Id of referenced rule within the ruleset -->
      <param>  <!-- 0..* Rule parameter template -->
       <name value="[string]"/><!-- 1..1 Parameter name matching external assert ruleset rule parameter -->
       <value value="[string]"/><!-- 1..1 Parameter value defined either explicitly or dynamically -->
      </param>
     </rule>
    </ruleset>
    <sourceId value="[id]"/><!-- 0..1 Fixture Id of source expression or headerField -->
    <validateProfileId value="[id]"/><!-- 0..1 Profile Id of validation profile reference -->
    <value value="[string]"/><!-- 0..1 The value to compare to -->
    <warningOnly value="[boolean]"/><!-- 0..1 Will this assert produce a warning only on error? -->
   </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><!-- 0..1 Content as for TestScript.setup.action.operation The teardown operation to perform --></operation>
  </action>
 </teardown>
</TestScript>

JSON Template

{doco
  "resourceType" : "TestScript",
  // from Resource: id, meta, implicitRules, and language
  // from DomainResource: text, contained, extension, and modifierExtension
  "url" : "<uri>", // R!  Absolute URL used to reference this TestScript
  "version" : "<string>", // Logical id for this version of the TestScript
  "name" : "<string>", // R!  Informal name for this TestScript
  "status" : "<code>", // R!  draft | active | retired
  "identifier" : { Identifier }, // External identifier
  "experimental" : <boolean>, // If for testing purposes, not real usage
  "publisher" : "<string>", // Name of the publisher (Organization or individual)
  "contact" : [{ // Contact details of the publisher
    "name" : "<string>", // Name of an individual to contact
    "telecom" : [{ ContactPoint }] // Contact details for individual or publisher
  }],
  "date" : "<dateTime>", // Date for this version of the TestScript
  "description" : "<markdown>", // Natural language description of the TestScript
  "useContext" : [{ CodeableConcept }], // Content intends to support these contexts
  "requirements" : "<markdown>", // Scope and Usage this Test Script is for
  "copyright" : "<string>", // Use and/or publishing restrictions
  "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
  }],
  "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
  }],
  "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" : [{ // R!  Capabilities  that are assumed to function correctly on the FHIR server being tested
      "required" : <boolean>, // Are the capabilities required?
      "validated" : <boolean>, // 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
      "conformance" : { Reference(Conformance) } // R!  Required Conformance
    }]
  },
  "fixture" : [{ // Fixture in the test script - by reference (uri)
    "autocreate" : <boolean>, // Whether or not to implicitly create the fixture during setup
    "autodelete" : <boolean>, // Whether or not to implicitly delete the fixture during teardown
    "resource" : { Reference(Any) } // Reference of the resource
  }],
  "profile" : [{ Reference(Any) }], // 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
    "headerField" : "<string>", // HTTP header field name for source
    "path" : "<string>", // XPath or JSONPath against the fixture body
    "sourceId" : "<id>" // Fixture Id of source expression or headerField within this variable
  }],
  "rule" : [{ // Assert rule used within the test script
    "resource" : { Reference(Any) }, // R!  Assert rule resource reference
    "param" : [{ // Rule parameter template
      "name" : "<string>", // R!  Parameter name matching external assert rule parameter
      "value" : "<string>" // Parameter value defined either explicitly or dynamically
    }]
  }],
  "ruleset" : [{ // Assert ruleset used within the test script
    "resource" : { Reference(Any) }, // R!  Assert ruleset resource reference
    "rule" : [{ // R!  The referenced rule within the ruleset
      "ruleId" : "<id>", // R!  Id of referenced rule within the ruleset
      "param" : [{ // Ruleset rule parameter template
        "name" : "<string>", // R!  Parameter name matching external assert ruleset rule parameter
        "value" : "<string>" // Parameter value defined either explicitly or dynamically
      }]
    }]
  }],
  "setup" : { // A series of required setup operations before tests are executed
    "action" : [{ // R!  A setup operation or assert to perform
      "operation" : { // The setup operation to perform
        "type" : { Coding }, // The operation code type that will be executed
        "resource" : "<code>", // Resource type
        "label" : "<string>", // Tracking/logging operation label
        "description" : "<string>", // Tracking/reporting operation description
        "accept" : "<code>", // xml | json | ttl | none
        "contentType" : "<code>", // xml | json | ttl | none
        "destination" : <integer>, // Server responding to the request
        "encodeRequestUrl" : <boolean>, // Whether or not to send the request url in encoded format
        "origin" : <integer>, // Server initiating the request
        "params" : "<string>", // Explicitly defined path parameters
        "requestHeader" : [{ // Each operation can have one ore more header elements
          "field" : "<string>", // R!  HTTP header field name
          "value" : "<string>" // R!  HTTP headerfield value
        }],
        "responseId" : "<id>", // Fixture Id of mapped response
        "sourceId" : "<id>", // Fixture Id of body for PUT and POST requests
        "targetId" : "<id>", // Id of fixture used for extracting the [id],  [type], and [vid] for GET requests
        "url" : "<string>" // Request URL
      },
      "assert" : { // The assertion to perform
        "label" : "<string>", // Tracking/logging assertion label
        "description" : "<string>", // Tracking/reporting assertion description
        "direction" : "<code>", // response | request
        "compareToSourceId" : "<string>", // Id of fixture used to compare the "sourceId/path" evaluations to
        "compareToSourcePath" : "<string>", // XPath or JSONPath expression against fixture used to compare the "sourceId/path" evaluations to
        "contentType" : "<code>", // xml | json | ttl | none
        "headerField" : "<string>", // HTTP header field name
        "minimumId" : "<string>", // Fixture Id of minimum content resource
        "navigationLinks" : <boolean>, // Perform validation on navigation links?
        "operator" : "<code>", // equals | notEquals | in | notIn | greaterThan | lessThan | empty | notEmpty | contains | notContains
        "path" : "<string>", // XPath or JSONPath expression
        "requestURL" : "<string>", // Request URL comparison value
        "resource" : "<code>", // Resource type
        "response" : "<code>", // okay | created | noContent | notModified | bad | forbidden | notFound | methodNotAllowed | conflict | gone | preconditionFailed | unprocessable
        "responseCode" : "<string>", // HTTP response code to test
        "rule" : { // The reference to a TestScript.rule
          "ruleId" : "<id>", // R!  Id of the TestScript.rule
          "param" : [{ // Rule parameter template
            "name" : "<string>", // R!  Parameter name matching external assert rule parameter
            "value" : "<string>" // R!  Parameter value defined either explicitly or dynamically
          }]
        },
        "ruleset" : { // The reference to a TestScript.ruleset
          "rulesetId" : "<id>", // R!  Id of the TestScript.ruleset
          "rule" : [{ // The referenced rule within the ruleset
            "ruleId" : "<id>", // R!  Id of referenced rule within the ruleset
            "param" : [{ // Rule parameter template
              "name" : "<string>", // R!  Parameter name matching external assert ruleset rule parameter
              "value" : "<string>" // R!  Parameter value defined either explicitly or dynamically
            }]
          }]
        },
        "sourceId" : "<id>", // Fixture Id of source expression or headerField
        "validateProfileId" : "<id>", // Profile Id of validation profile reference
        "value" : "<string>", // The value to compare to
        "warningOnly" : <boolean> // Will this assert produce a warning only on error?
      }
    }]
  },
  "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 } // The teardown operation to perform
    }]
  }
}

Turtle Template

@prefix fhir: <http://hl7.org/fhir/> .doco


[ 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:TestScript.url [ uri ]; # 1..1 Absolute URL used to reference this TestScript
  fhir:TestScript.version [ string ]; # 0..1 Logical id for this version of the TestScript
  fhir:TestScript.name [ string ]; # 1..1 Informal name for this TestScript
  fhir:TestScript.status [ code ]; # 1..1 draft | active | retired
  fhir:TestScript.identifier [ Identifier ]; # 0..1 External identifier
  fhir:TestScript.experimental [ boolean ]; # 0..1 If for testing purposes, not real usage
  fhir:TestScript.publisher [ string ]; # 0..1 Name of the publisher (Organization or individual)
  fhir:TestScript.contact [ # 0..* Contact details of the publisher
    fhir:TestScript.contact.name [ string ]; # 0..1 Name of an individual to contact
    fhir:TestScript.contact.telecom [ ContactPoint ], ... ; # 0..* Contact details for individual or publisher
  ], ...;
  fhir:TestScript.date [ dateTime ]; # 0..1 Date for this version of the TestScript
  fhir:TestScript.description [ markdown ]; # 0..1 Natural language description of the TestScript
  fhir:TestScript.useContext [ CodeableConcept ], ... ; # 0..* Content intends to support these contexts
  fhir:TestScript.requirements [ markdown ]; # 0..1 Scope and Usage this Test Script is for
  fhir:TestScript.copyright [ string ]; # 0..1 Use and/or publishing restrictions
  fhir:TestScript.origin [ # 0..* An abstract server representing a client or sender in a message exchange
    fhir:TestScript.origin.index [ integer ]; # 1..1 The index of the abstract origin server starting at 1
    fhir:TestScript.origin.profile [ Coding ]; # 1..1 FHIR-Client | FHIR-SDC-FormFiller
  ], ...;
  fhir:TestScript.destination [ # 0..* An abstract server representing a destination or receiver in a message exchange
    fhir:TestScript.destination.index [ integer ]; # 1..1 The index of the abstract destination server starting at 1
    fhir:TestScript.destination.profile [ Coding ]; # 1..1 FHIR-Server | FHIR-SDC-FormManager | FHIR-SDC-FormReceiver | FHIR-SDC-FormProcessor
  ], ...;
  fhir:TestScript.metadata [ # 0..1 Required capability that is assumed to function correctly on the FHIR server being tested
    fhir:TestScript.metadata.link [ # 0..* Links to the FHIR specification
      fhir:TestScript.metadata.link.url [ uri ]; # 1..1 URL to the specification
      fhir:TestScript.metadata.link.description [ string ]; # 0..1 Short description
    ], ...;
    fhir:TestScript.metadata.capability [ # 1..* Capabilities  that are assumed to function correctly on the FHIR server being tested
      fhir:TestScript.metadata.capability.required [ boolean ]; # 0..1 Are the capabilities required?
      fhir:TestScript.metadata.capability.validated [ boolean ]; # 0..1 Are the capabilities validated?
      fhir:TestScript.metadata.capability.description [ string ]; # 0..1 The expected capabilities of the server
      fhir:TestScript.metadata.capability.origin [ integer ], ... ; # 0..* Which origin server these requirements apply to
      fhir:TestScript.metadata.capability.destination [ integer ]; # 0..1 Which server these requirements apply to
      fhir:TestScript.metadata.capability.link [ uri ], ... ; # 0..* Links to the FHIR specification
      fhir:TestScript.metadata.capability.conformance [ Reference(Conformance) ]; # 1..1 Required Conformance
    ], ...;
  ];
  fhir:TestScript.fixture [ # 0..* Fixture in the test script - by reference (uri)
    fhir:TestScript.fixture.autocreate [ boolean ]; # 0..1 Whether or not to implicitly create the fixture during setup
    fhir:TestScript.fixture.autodelete [ boolean ]; # 0..1 Whether or not to implicitly delete the fixture during teardown
    fhir:TestScript.fixture.resource [ Reference(Any) ]; # 0..1 Reference of the resource
  ], ...;
  fhir:TestScript.profile [ Reference(Any) ], ... ; # 0..* Reference of the validation profile
  fhir:TestScript.variable [ # 0..* Placeholder for evaluated elements
    fhir:TestScript.variable.name [ string ]; # 1..1 Descriptive name for this variable
    fhir:TestScript.variable.defaultValue [ string ]; # 0..1 Default, hard-coded, or user-defined value for this variable
    fhir:TestScript.variable.headerField [ string ]; # 0..1 HTTP header field name for source
    fhir:TestScript.variable.path [ string ]; # 0..1 XPath or JSONPath against the fixture body
    fhir:TestScript.variable.sourceId [ id ]; # 0..1 Fixture Id of source expression or headerField within this variable
  ], ...;
  fhir:TestScript.rule [ # 0..* Assert rule used within the test script
    fhir:TestScript.rule.resource [ Reference(Any) ]; # 1..1 Assert rule resource reference
    fhir:TestScript.rule.param [ # 0..* Rule parameter template
      fhir:TestScript.rule.param.name [ string ]; # 1..1 Parameter name matching external assert rule parameter
      fhir:TestScript.rule.param.value [ string ]; # 0..1 Parameter value defined either explicitly or dynamically
    ], ...;
  ], ...;
  fhir:TestScript.ruleset [ # 0..* Assert ruleset used within the test script
    fhir:TestScript.ruleset.resource [ Reference(Any) ]; # 1..1 Assert ruleset resource reference
    fhir:TestScript.ruleset.rule [ # 1..* The referenced rule within the ruleset
      fhir:TestScript.ruleset.rule.ruleId [ id ]; # 1..1 Id of referenced rule within the ruleset
      fhir:TestScript.ruleset.rule.param [ # 0..* Ruleset rule parameter template
        fhir:TestScript.ruleset.rule.param.name [ string ]; # 1..1 Parameter name matching external assert ruleset rule parameter
        fhir:TestScript.ruleset.rule.param.value [ string ]; # 0..1 Parameter value defined either explicitly or dynamically
      ], ...;
    ], ...;
  ], ...;
  fhir:TestScript.setup [ # 0..1 A series of required setup operations before tests are executed
    fhir:TestScript.setup.action [ # 1..* A setup operation or assert to perform
      fhir:TestScript.setup.action.operation [ # 0..1 The setup operation to perform
        fhir:TestScript.setup.action.operation.type [ Coding ]; # 0..1 The operation code type that will be executed
        fhir:TestScript.setup.action.operation.resource [ code ]; # 0..1 Resource type
        fhir:TestScript.setup.action.operation.label [ string ]; # 0..1 Tracking/logging operation label
        fhir:TestScript.setup.action.operation.description [ string ]; # 0..1 Tracking/reporting operation description
        fhir:TestScript.setup.action.operation.accept [ code ]; # 0..1 xml | json | ttl | none
        fhir:TestScript.setup.action.operation.contentType [ code ]; # 0..1 xml | json | ttl | none
        fhir:TestScript.setup.action.operation.destination [ integer ]; # 0..1 Server responding to the request
        fhir:TestScript.setup.action.operation.encodeRequestUrl [ boolean ]; # 0..1 Whether or not to send the request url in encoded format
        fhir:TestScript.setup.action.operation.origin [ integer ]; # 0..1 Server initiating the request
        fhir:TestScript.setup.action.operation.params [ string ]; # 0..1 Explicitly defined path parameters
        fhir:TestScript.setup.action.operation.requestHeader [ # 0..* Each operation can have one ore more header elements
          fhir:TestScript.setup.action.operation.requestHeader.field [ string ]; # 1..1 HTTP header field name
          fhir:TestScript.setup.action.operation.requestHeader.value [ string ]; # 1..1 HTTP headerfield value
        ], ...;
        fhir:TestScript.setup.action.operation.responseId [ id ]; # 0..1 Fixture Id of mapped response
        fhir:TestScript.setup.action.operation.sourceId [ id ]; # 0..1 Fixture Id of body for PUT and POST requests
        fhir:TestScript.setup.action.operation.targetId [ id ]; # 0..1 Id of fixture used for extracting the [id],  [type], and [vid] for GET requests
        fhir:TestScript.setup.action.operation.url [ string ]; # 0..1 Request URL
      ];
      fhir:TestScript.setup.action.assert [ # 0..1 The assertion to perform
        fhir:TestScript.setup.action.assert.label [ string ]; # 0..1 Tracking/logging assertion label
        fhir:TestScript.setup.action.assert.description [ string ]; # 0..1 Tracking/reporting assertion description
        fhir:TestScript.setup.action.assert.direction [ code ]; # 0..1 response | request
        fhir:TestScript.setup.action.assert.compareToSourceId [ string ]; # 0..1 Id of fixture used to compare the "sourceId/path" evaluations to
        fhir:TestScript.setup.action.assert.compareToSourcePath [ string ]; # 0..1 XPath or JSONPath expression against fixture used to compare the "sourceId/path" evaluations to
        fhir:TestScript.setup.action.assert.contentType [ code ]; # 0..1 xml | json | ttl | none
        fhir:TestScript.setup.action.assert.headerField [ string ]; # 0..1 HTTP header field name
        fhir:TestScript.setup.action.assert.minimumId [ string ]; # 0..1 Fixture Id of minimum content resource
        fhir:TestScript.setup.action.assert.navigationLinks [ boolean ]; # 0..1 Perform validation on navigation links?
        fhir:TestScript.setup.action.assert.operator [ code ]; # 0..1 equals | notEquals | in | notIn | greaterThan | lessThan | empty | notEmpty | contains | notContains
        fhir:TestScript.setup.action.assert.path [ string ]; # 0..1 XPath or JSONPath expression
        fhir:TestScript.setup.action.assert.requestURL [ string ]; # 0..1 Request URL comparison value
        fhir:TestScript.setup.action.assert.resource [ code ]; # 0..1 Resource type
        fhir:TestScript.setup.action.assert.response [ code ]; # 0..1 okay | created | noContent | notModified | bad | forbidden | notFound | methodNotAllowed | conflict | gone | preconditionFailed | unprocessable
        fhir:TestScript.setup.action.assert.responseCode [ string ]; # 0..1 HTTP response code to test
        fhir:TestScript.setup.action.assert.rule [ # 0..1 The reference to a TestScript.rule
          fhir:TestScript.setup.action.assert.rule.ruleId [ id ]; # 1..1 Id of the TestScript.rule
          fhir:TestScript.setup.action.assert.rule.param [ # 0..* Rule parameter template
            fhir:TestScript.setup.action.assert.rule.param.name [ string ]; # 1..1 Parameter name matching external assert rule parameter
            fhir:TestScript.setup.action.assert.rule.param.value [ string ]; # 1..1 Parameter value defined either explicitly or dynamically
          ], ...;
        ];
        fhir:TestScript.setup.action.assert.ruleset [ # 0..1 The reference to a TestScript.ruleset
          fhir:TestScript.setup.action.assert.ruleset.rulesetId [ id ]; # 1..1 Id of the TestScript.ruleset
          fhir:TestScript.setup.action.assert.ruleset.rule [ # 0..* The referenced rule within the ruleset
            fhir:TestScript.setup.action.assert.ruleset.rule.ruleId [ id ]; # 1..1 Id of referenced rule within the ruleset
            fhir:TestScript.setup.action.assert.ruleset.rule.param [ # 0..* Rule parameter template
              fhir:TestScript.setup.action.assert.ruleset.rule.param.name [ string ]; # 1..1 Parameter name matching external assert ruleset rule parameter
              fhir:TestScript.setup.action.assert.ruleset.rule.param.value [ string ]; # 1..1 Parameter value defined either explicitly or dynamically
            ], ...;
          ], ...;
        ];
        fhir:TestScript.setup.action.assert.sourceId [ id ]; # 0..1 Fixture Id of source expression or headerField
        fhir:TestScript.setup.action.assert.validateProfileId [ id ]; # 0..1 Profile Id of validation profile reference
        fhir:TestScript.setup.action.assert.value [ string ]; # 0..1 The value to compare to
        fhir:TestScript.setup.action.assert.warningOnly [ boolean ]; # 0..1 Will this assert produce a warning only on error?
      ];
    ], ...;
  ];
  fhir:TestScript.test [ # 0..* A test in this script
    fhir:TestScript.test.name [ string ]; # 0..1 Tracking/logging name of this test
    fhir:TestScript.test.description [ string ]; # 0..1 Tracking/reporting short description of the test
    fhir:TestScript.test.action [ # 1..* A test operation or assert to perform
      fhir:TestScript.test.action.operation [ See TestScript.setup.action.operation ]; # 0..1 The setup operation to perform
      fhir:TestScript.test.action.assert [ See TestScript.setup.action.assert ]; # 0..1 The setup assertion to perform
    ], ...;
  ], ...;
  fhir:TestScript.teardown [ # 0..1 A series of required clean up steps
    fhir:TestScript.teardown.action [ # 1..* One or more teardown operations to perform
      fhir:TestScript.teardown.action.operation [ See TestScript.setup.action.operation ]; # 0..1 The teardown operation to perform
    ], ...;
  ];
]

Changes since DSTU2

TestScript
TestScript.description Type changed from string to markdown
TestScript.requirements Type changed from string to markdown
TestScript.origin added
TestScript.origin.index added
TestScript.origin.profile added
TestScript.destination added
TestScript.destination.index added
TestScript.destination.profile added
TestScript.metadata.capability.origin added
TestScript.fixture.autocreate Default Value "false" added
TestScript.fixture.autodelete Default Value "false" added
TestScript.variable.defaultValue added
TestScript.rule added
TestScript.rule.resource added
TestScript.rule.param added
TestScript.rule.param.name added
TestScript.rule.param.value added
TestScript.ruleset added
TestScript.ruleset.resource added
TestScript.ruleset.rule added
TestScript.ruleset.rule.ruleId added
TestScript.ruleset.rule.param added
TestScript.ruleset.rule.param.name added
TestScript.ruleset.rule.param.value added
TestScript.setup.action.operation.destination Default Value "0" removed
TestScript.setup.action.operation.origin added
TestScript.setup.action.assert.requestURL added
TestScript.setup.action.assert.rule added
TestScript.setup.action.assert.rule.ruleId added
TestScript.setup.action.assert.rule.param added
TestScript.setup.action.assert.rule.param.name added
TestScript.setup.action.assert.rule.param.value added
TestScript.setup.action.assert.ruleset added
TestScript.setup.action.assert.ruleset.rulesetId added
TestScript.setup.action.assert.ruleset.rule added
TestScript.setup.action.assert.ruleset.rule.ruleId added
TestScript.setup.action.assert.ruleset.rule.param added
TestScript.setup.action.assert.ruleset.rule.param.name added
TestScript.setup.action.assert.ruleset.rule.param.value added
TestScript.multiserver deleted
TestScript.setup.metadata deleted
TestScript.test.metadata deleted

See the Full Difference for further information

Structure

NameFlagsCard.TypeDescription & Constraintsdoco
.. TestScript DomainResourceDescribes a set of tests
... url Σ1..1uriAbsolute URL used to reference this TestScript
... version Σ0..1stringLogical id for this version of the TestScript
... name Σ1..1stringInformal name for this TestScript
... status ?!Σ1..1codedraft | active | retired
ConformanceResourceStatus (Required)
... identifier Σ0..1IdentifierExternal identifier
... experimental Σ0..1booleanIf for testing purposes, not real usage
... publisher Σ0..1stringName of the publisher (Organization or individual)
... contact Σ0..*BackboneElementContact details of the publisher
.... name Σ0..1stringName of an individual to contact
.... telecom Σ0..*ContactPointContact details for individual or publisher
... date Σ0..1dateTimeDate for this version of the TestScript
... description Σ0..1markdownNatural language description of the TestScript
... useContext Σ0..*CodeableConceptContent intends to support these contexts
Context of Use ValueSet (Extensible)
... requirements 0..1markdownScope and Usage this Test Script is for
... copyright 0..1stringUse and/or publishing restrictions
... origin 0..*BackboneElementAn abstract server representing a client or sender in a message exchange
.... index 1..1integerThe index of the abstract origin server starting at 1
.... profile 1..1CodingFHIR-Client | FHIR-SDC-FormFiller
TestScriptProfileOriginType (Extensible)
... destination 0..*BackboneElementAn abstract server representing a destination or receiver in a message exchange
.... index 1..1integerThe index of the abstract destination server starting at 1
.... profile 1..1CodingFHIR-Server | FHIR-SDC-FormManager | FHIR-SDC-FormReceiver | FHIR-SDC-FormProcessor
TestScriptProfileDestinationType (Extensible)
... metadata I0..1BackboneElementRequired capability that is assumed to function correctly on the FHIR server being tested
TestScript metadata capability SHALL contain required or validated or both.
.... link 0..*BackboneElementLinks to the FHIR specification
..... url 1..1uriURL to the specification
..... description 0..1stringShort description
.... capability 1..*BackboneElementCapabilities that are assumed to function correctly on the FHIR server being tested
..... required 0..1booleanAre the capabilities required?
..... validated 0..1booleanAre the capabilities validated?
..... description 0..1stringThe expected capabilities of the server
..... origin 0..*integerWhich origin server these requirements apply to
..... destination 0..1integerWhich server these requirements apply to
..... link 0..*uriLinks to the FHIR specification
..... conformance 1..1Reference(Conformance)Required Conformance
... fixture 0..*BackboneElementFixture in the test script - by reference (uri)
.... autocreate 0..1booleanWhether or not to implicitly create the fixture during setup
.... autodelete 0..1booleanWhether or not to implicitly delete the fixture during teardown
.... resource 0..1Reference(Any)Reference of the resource
... profile 0..*Reference(Any)Reference of the validation profile
... variable I0..*BackboneElementPlaceholder for evaluated elements
Variable cannot contain both headerField and path.
.... name 1..1stringDescriptive name for this variable
.... defaultValue 0..1stringDefault, hard-coded, or user-defined value for this variable
.... headerField 0..1stringHTTP header field name for source
.... path 0..1stringXPath or JSONPath against the fixture body
.... sourceId 0..1idFixture Id of source expression or headerField within this variable
... rule 0..*BackboneElementAssert rule used within the test script
.... resource 1..1Reference(Any)Assert rule resource reference
.... param 0..*BackboneElementRule parameter template
..... name 1..1stringParameter name matching external assert rule parameter
..... value 0..1stringParameter value defined either explicitly or dynamically
... ruleset 0..*BackboneElementAssert ruleset used within the test script
.... resource 1..1Reference(Any)Assert ruleset resource reference
.... rule 1..*BackboneElementThe referenced rule within the ruleset
..... ruleId 1..1idId of referenced rule within the ruleset
..... param 0..*BackboneElementRuleset rule parameter template
...... name 1..1stringParameter name matching external assert ruleset rule parameter
...... value 0..1stringParameter value defined either explicitly or dynamically
... setup 0..1BackboneElementA series of required setup operations before tests are executed
.... action I1..*BackboneElementA setup operation or assert to perform
Setup action SHALL contain either an operation or assert but not both.
..... operation I0..1BackboneElementThe setup operation to perform
Setup operation SHALL contain either sourceId or targetId or params or url.
...... type 0..1CodingThe operation code type that will be executed
TestScriptOperationCode (Extensible)
...... resource 0..1codeResource type
FHIRDefinedType (Required)
...... label 0..1stringTracking/logging operation label
...... description 0..1stringTracking/reporting operation description
...... accept 0..1codexml | json | ttl | none
ContentType (Required)
...... contentType 0..1codexml | json | ttl | none
ContentType (Required)
...... destination 0..1integerServer responding to the request
...... encodeRequestUrl 0..1booleanWhether or not to send the request url in encoded format
...... origin 0..1integerServer initiating the request
...... params 0..1stringExplicitly defined path parameters
...... requestHeader 0..*BackboneElementEach operation can have one ore more header elements
....... field 1..1stringHTTP header field name
....... value 1..1stringHTTP headerfield value
...... responseId 0..1idFixture Id of mapped response
...... sourceId 0..1idFixture Id of body for PUT and POST requests
...... targetId 0..1idId of fixture used for extracting the [id], [type], and [vid] for GET requests
...... url 0..1stringRequest URL
..... assert I0..1BackboneElementThe assertion to perform
Only a single assertion SHALL be present within setup action assert element.
Setup action assert shall contain both compareToSourceId and compareToSourcePath or neither.
...... label 0..1stringTracking/logging assertion label
...... description 0..1stringTracking/reporting assertion description
...... direction 0..1coderesponse | request
AssertionDirectionType (Required)
...... compareToSourceId 0..1stringId of fixture used to compare the "sourceId/path" evaluations to
...... compareToSourcePath 0..1stringXPath or JSONPath expression against fixture used to compare the "sourceId/path" evaluations to
...... contentType 0..1codexml | json | ttl | none
ContentType (Required)
...... headerField 0..1stringHTTP header field name
...... minimumId 0..1stringFixture Id of minimum content resource
...... navigationLinks 0..1booleanPerform validation on navigation links?
...... operator 0..1codeequals | notEquals | in | notIn | greaterThan | lessThan | empty | notEmpty | contains | notContains
AssertionOperatorType (Required)
...... path 0..1stringXPath or JSONPath expression
...... requestURL 0..1stringRequest URL comparison value
...... resource 0..1codeResource type
FHIRDefinedType (Required)
...... response 0..1codeokay | created | noContent | notModified | bad | forbidden | notFound | methodNotAllowed | conflict | gone | preconditionFailed | unprocessable
AssertionResponseTypes (Required)
...... responseCode 0..1stringHTTP response code to test
...... rule 0..1BackboneElementThe reference to a TestScript.rule
....... ruleId 1..1idId of the TestScript.rule
....... param 0..*BackboneElementRule parameter template
........ name 1..1stringParameter name matching external assert rule parameter
........ value 1..1stringParameter value defined either explicitly or dynamically
...... ruleset 0..1BackboneElementThe reference to a TestScript.ruleset
....... rulesetId 1..1idId of the TestScript.ruleset
....... rule 0..*BackboneElementThe referenced rule within the ruleset
........ ruleId 1..1idId of referenced rule within the ruleset
........ param 0..*BackboneElementRule parameter template
......... name 1..1stringParameter name matching external assert ruleset rule parameter
......... value 1..1stringParameter value defined either explicitly or dynamically
...... sourceId 0..1idFixture Id of source expression or headerField
...... validateProfileId 0..1idProfile Id of validation profile reference
...... value 0..1stringThe value to compare to
...... warningOnly 0..1booleanWill this assert produce a warning only on error?
... test 0..*BackboneElementA test in this script
.... name 0..1stringTracking/logging name of this test
.... description 0..1stringTracking/reporting short description of the test
.... action I1..*BackboneElementA test operation or assert to perform
Test action SHALL contain either an operation or assert but not both.
..... operation I0..1see operationThe setup operation to perform
Test operation SHALL contain either sourceId or targetId or params or url.
..... assert I0..1see assertThe setup assertion to perform
Only a single assertion SHALL be present within test action assert element.
Test action assert shall contain both compareToSourceId and compareToSourcePath or neither.
... teardown 0..1BackboneElementA series of required clean up steps
.... action I1..*BackboneElementOne or more teardown operations to perform
Teardown action SHALL contain an operation.
..... operation I0..1see operationThe teardown operation to perform
Teardown operation SHALL contain either sourceId or targetId or params or url.

doco Documentation for this format

UML Diagram (Legend)

TestScript (DomainResource)An absolute URL that is used to identify this Test Script. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this Test Script is (or will be) publishedurl : uri [1..1]The identifier that is used to identify this version of the TestScript. This is an arbitrary value managed by the TestScript author manuallyversion : string [0..1]A free text natural language name identifying the TestScriptname : string [1..1]The status of the TestScript (this element modifies the meaning of other elements)status : code [1..1] « The lifecycle status of a Value Set or Concept Map. (Strength=Required)ConformanceResourceStatus! »Identifier for the TestScript assigned for external purposes outside the context of FHIRidentifier : Identifier [0..1]This TestScript was authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usageexperimental : boolean [0..1]The name of the individual or organization that published the Test Scriptpublisher : string [0..1]The date this version of the test tcript was published. The date must change when the business version changes, if it does, and it must change if the status code changes. In addition, it should change when the substantive content of the test cases changedate : dateTime [0..1]A free text natural language description of the TestScript and its usedescription : markdown [0..1]The content was developed with a focus and intent of supporting the contexts that are listed. These terms may be used to assist with indexing and searching of Test ScriptsuseContext : CodeableConcept [0..*] « Indicates the countries, regions, disciplines and other aspects of use within which this artifact is targeted for use. (Strength=Extensible)Context of Use ValueSet+ »Explains why this Test Script is needed and why it's been constrained as it hasrequirements : markdown [0..1]A copyright statement relating to the Test Script and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the details of the constraints and mappingscopyright : string [0..1]Reference to the profile to be used for validationprofile : Reference [0..*] « Any »ContactThe name of an individual to contact regarding the Test Scriptname : string [0..1]Contact details for individual (if a name was provided) or the publishertelecom : ContactPoint [0..*]OriginAbstract name given to an origin server in this test script. The name is provided as a number starting at 1index : integer [1..1]The type of origin profile the test system supportsprofile : Coding [1..1] « The type of origin profile the test system supports. (Strength=Extensible)TestScriptProfileOriginType+ »DestinationAbstract name given to a destination server in this test script. The name is provided as a number starting at 1index : integer [1..1]The type of destination profile the test system supportsprofile : Coding [1..1] « The type of destination profile the test system supports. (Strength=Extensible)TestScriptProfileDestinationT...+ »MetadataLinkURL to a particular requirement or feature within the FHIR specificationurl : uri [1..1]Short description of the linkdescription : string [0..1]CapabilityWhether or not the test execution will require the given capabilities of the server in order for this test script to executerequired : boolean [0..1]Whether or not the test execution will validate the given capabilities of the server in order for this test script to executevalidated : boolean [0..1]Description of the capabilities that this test script is requiring the server to supportdescription : string [0..1]Which origin server these requirements apply toorigin : integer [0..*]Which server these requirements apply todestination : integer [0..1]Links to the FHIR specification that describes this interaction and the resources involved in more detaillink : uri [0..*]Minimum conformance required of server for test script to execute successfully. If server does not meet at a minimum the reference conformance definition, then all tests in this script are skippedconformance : Reference [1..1] « Conformance »FixtureWhether or not to implicitly create the fixture during setup. If true, the fixture is automatically created on each server being tested during setup, therefore no create operation is required for this fixture in the TestScript.setup sectionautocreate : boolean [0..1]Whether or not to implicitly delete the fixture during teardown If true, the fixture is automatically deleted on each server being tested during teardown, therefore no delete operation is required for this fixture in the TestScript.teardown sectionautodelete : boolean [0..1]Reference to the resource (containing the contents of the resource needed for operations)resource : Reference [0..1] « Any »VariableDescriptive name for this variablename : string [1..1]A default, hard-coded, or user-defined value for this variabledefaultValue : string [0..1]Will be used to grab the HTTP header field value from the headers that sourceId is pointing toheaderField : string [0..1]XPath or JSONPath against the fixture body. When variables are defined, either headerField must be specified or path, but not bothpath : string [0..1]Fixture to evaluate the XPath/JSONPath expression or the headerField against within this variablesourceId : id [0..1]RuleReference to the resource (containing the contents of the rule needed for assertions)resource : Reference [1..1] « Any »RuleParamDescriptive name for this parameter that matches the external assert rule parameter namename : string [1..1]The explict or dynamic value for the parameter that will be passed on to the external rule templatevalue : string [0..1]RulesetReference to the resource (containing the contents of the ruleset needed for assertions)resource : Reference [1..1] « Any »RulesetRuleId of the referenced rule within the external ruleset templateruleId : id [1..1]RulesetRuleParamDescriptive name for this parameter that matches the external assert ruleset rule parameter namename : string [1..1]The value for the parameter that will be passed on to the external ruleset rule templatevalue : string [0..1]SetupSetupActionOperationServer interaction or operation typetype : Coding [0..1] « The allowable operation code types. (Strength=Extensible)TestScriptOperationCode+ »The type of the resource. See http://hl7-fhir.github.io/resourcelist.htmlresource : code [0..1] « Either a resource or a data type. (Strength=Required)FHIRDefinedType! »The label would be used for tracking/logging purposes by test engineslabel : string [0..1]The description would be used by test engines for tracking and reporting purposesdescription : string [0..1]The content-type or mime-type to use for RESTful operation in the 'Accept' headeraccept : code [0..1] « The content or mime type. (Strength=Required)ContentType! »The content-type or mime-type to use for RESTful operation in the 'Content-Type' headercontentType : code [0..1] « The content or mime type. (Strength=Required)ContentType! »The server where the request message is destined for. Must be one of the server numbers listed in TestScript.destination sectiondestination : integer [0..1]Whether or not to implicitly send the request url in encoded format. The default is true to match the standard RESTful client behavior. Set to false when communicating with a server that does not support encoded url pathsencodeRequestUrl : boolean [0..1]The server where the request message originates from. Must be one of the server numbers listed in TestScript.origin sectionorigin : integer [0..1]Path plus parameters after [type]. Used to set parts of the request URL explicitlyparams : string [0..1]The fixture id (maybe new) to map to the responseresponseId : id [0..1]The id of the fixture used as the body of a PUT or POST requestsourceId : id [0..1]Id of fixture used for extracting the [id], [type], and [vid] for GET requeststargetId : id [0..1]Complete request URLurl : string [0..1]RequestHeaderThe HTTP header field e.g. "Accept"field : string [1..1]The value of the header e.g. "application/fhir+xml"value : string [1..1]AssertThe label would be used for tracking/logging purposes by test engineslabel : string [0..1]The description would be used by test engines for tracking and reporting purposesdescription : string [0..1]The direction to use for the assertiondirection : code [0..1] « The type of direction to use for assertion. (Strength=Required)AssertionDirectionType! »Id of fixture used to compare the "sourceId/path" evaluations tocompareToSourceId : string [0..1]XPath or JSONPath expression against fixture used to compare the "sourceId/path" evaluations tocompareToSourcePath : string [0..1]The content-type or mime-type to use for RESTful operation in the 'Content-Type' headercontentType : code [0..1] « The content or mime type. (Strength=Required)ContentType! »The HTTP header field name e.g. 'Location'headerField : string [0..1]The ID of a fixture. Asserts that the response contains at a minimum the fixture specified by minimumIdminimumId : string [0..1]Whether or not the test execution performs validation on the bundle navigation linksnavigationLinks : boolean [0..1]The operator typeoperator : code [0..1] « The type of operator to use for assertion. (Strength=Required)AssertionOperatorType! »The XPath or JSONPath expression to be evaluated against the fixture representing the response received from serverpath : string [0..1]The value to use in a comparison against the request URL path stringrequestURL : string [0..1]The type of the resource. See http://hl7-fhir.github.io/resourcelist.htmlresource : code [0..1] « Either a resource or a data type. (Strength=Required)FHIRDefinedType! »okay | created | noContent | notModified | bad | forbidden | notFound | methodNotAllowed | conflict | gone | preconditionFailed | unprocessableresponse : code [0..1] « The type of response code to use for assertion. (Strength=Required)AssertionResponseTypes! »The value of the HTTP response code to be testedresponseCode : string [0..1]Fixture to evaluate the XPath/JSONPath expression or the headerField againstsourceId : id [0..1]The ID of the Profile to validate againstvalidateProfileId : id [0..1]The value to compare tovalue : string [0..1]Whether or not the test execution will produce a warning only on error for this assertwarningOnly : boolean [0..1]ActionAssertRuleThe TestScript.rule id value this assert will evaluateruleId : id [1..1]ActionAssertRuleParamDescriptive name for this parameter that matches the external assert rule parameter namename : string [1..1]The value for the parameter that will be passed on to the external rule templatevalue : string [1..1]ActionAssertRulesetThe TestScript.ruleset id value this assert will evaluaterulesetId : id [1..1]ActionAssertRulesetRuleId of the referenced rule within the external ruleset templateruleId : id [1..1]ParamDescriptive name for this parameter that matches the external assert ruleset rule parameter namename : string [1..1]The value for the parameter that will be passed on to the external ruleset rule templatevalue : string [1..1]TestThe name of this test used for tracking/logging purposes by test enginesname : string [0..1]A short description of the test used by test engines for tracking and reporting purposesdescription : string [0..1]TestActionTeardownTeardownActionContacts to assist a user in finding and communicating with the publishercontact[0..*]An abstract server used in operations within this test script in the origin elementorigin[0..*]An abstract server used in operations within this test script in the destination elementdestination[0..*]A link to the FHIR specification that this test is coveringlink[0..*]Capabilities that must exist and are assumed to function correctly on the FHIR server being testedcapability[1..*]The required capability must exist and are assumed to function correctly on the FHIR server being testedmetadata[0..1]Fixture in the test script - by reference (uri). All fixtures are required for the test script to executefixture[0..*]Variable is set based either on element value in response body or on header field value in the response headersvariable[0..*]Each rule template can take one or more parameters for rule evaluationparam[0..*]Assert rule to be used in one or more asserts within the test scriptrule[0..*]Each rule template can take one or more parameters for rule evaluationparam[0..*]The referenced rule within the external ruleset templaterule[1..*]Contains one or more rules. Offers a way to group rules so assertions could reference the group of rules and have them all appliedruleset[0..*]Header elements would be used to set HTTP headersrequestHeader[0..*]The operation to performoperation[0..1]Each rule template can take one or more parameters for rule evaluationparam[0..*]The TestScript.rule this assert will evaluaterule[0..1]Each rule template can take one or more parameters for rule evaluationparam[0..*]The referenced rule within the external ruleset templaterule[0..*]The TestScript.ruleset this assert will evaluateruleset[0..1]Evaluates the results of previous operations to determine if the server under test behaves appropriatelyassert[0..1]Action would contain either an operation or an assertionaction[1..*]A series of required setup operations before tests are executedsetup[0..1]An operation would involve a REST request to a serveroperation[0..1]Evaluates the results of previous operations to determine if the server under test behaves appropriatelyassert[0..1]Action would contain either an operation or an assertionaction[1..*]A test in this scripttest[0..*]An operation would involve a REST request to a serveroperation[0..1]The teardown action will only contain an operationaction[1..*]A series of operations required to clean up after the all the tests are executed (successfully or otherwise)teardown[0..1]

XML Template

<TestScript xmlns="http://hl7.org/fhir"> doco
 <!-- from Resource: id, meta, implicitRules, and language -->
 <!-- from DomainResource: text, contained, extension, and modifierExtension -->
 <url value="[uri]"/><!-- 1..1 Absolute URL used to reference this TestScript -->
 <version value="[string]"/><!-- 0..1 Logical id for this version of the TestScript -->
 <name value="[string]"/><!-- 1..1 Informal name for this TestScript -->
 <status value="[code]"/><!-- 1..1 draft | active | retired -->
 <identifier><!-- 0..1 Identifier External identifier --></identifier>
 <experimental value="[boolean]"/><!-- 0..1 If for testing purposes, not real usage -->
 <publisher value="[string]"/><!-- 0..1 Name of the publisher (Organization or individual) -->
 <contact>  <!-- 0..* Contact details of the publisher -->
  <name value="[string]"/><!-- 0..1 Name of an individual to contact -->
  <telecom><!-- 0..* ContactPoint Contact details for individual or publisher --></telecom>
 </contact>
 <date value="[dateTime]"/><!-- 0..1 Date for this version of the TestScript -->
 <description value="[markdown]"/><!-- 0..1 Natural language description of the TestScript -->
 <useContext><!-- 0..* CodeableConcept Content intends to support these contexts --></useContext>
 <requirements value="[markdown]"/><!-- 0..1 Scope and Usage this Test Script is for -->
 <copyright value="[string]"/><!-- 0..1 Use and/or publishing restrictions -->
 <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>
 </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>
 </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>  <!-- 1..* Capabilities  that are assumed to function correctly on the FHIR server being tested -->
   <required value="[boolean]"/><!-- 0..1 Are the capabilities required? -->
   <validated value="[boolean]"/><!-- 0..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 -->
   <conformance><!-- 1..1 Reference(Conformance) Required Conformance --></conformance>
  </capability>
 </metadata>
 <fixture>  <!-- 0..* Fixture in the test script - by reference (uri) -->
  <autocreate value="[boolean]"/><!-- 0..1 Whether or not to implicitly create the fixture during setup -->
  <autodelete value="[boolean]"/><!-- 0..1 Whether or not to implicitly delete the fixture during teardown -->
  <resource><!-- 0..1 Reference(Any) Reference of the resource --></resource>
 </fixture>
 <profile><!-- 0..* Reference(Any) 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 -->
  <headerField value="[string]"/><!-- 0..1 HTTP header field name for source -->
  <path value="[string]"/><!-- 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>
 <rule>  <!-- 0..* Assert rule used within the test script -->
  <resource><!-- 1..1 Reference(Any) Assert rule resource reference --></resource>
  <param>  <!-- 0..* Rule parameter template -->
   <name value="[string]"/><!-- 1..1 Parameter name matching external assert rule parameter -->
   <value value="[string]"/><!-- 0..1 Parameter value defined either explicitly or dynamically -->
  </param>
 </rule>
 <ruleset>  <!-- 0..* Assert ruleset used within the test script -->
  <resource><!-- 1..1 Reference(Any) Assert ruleset resource reference --></resource>
  <rule>  <!-- 1..* The referenced rule within the ruleset -->
   <ruleId value="[id]"/><!-- 1..1 Id of referenced rule within the ruleset -->
   <param>  <!-- 0..* Ruleset rule parameter template -->
    <name value="[string]"/><!-- 1..1 Parameter name matching external assert ruleset rule parameter -->
    <value value="[string]"/><!-- 0..1 Parameter value defined either explicitly or dynamically -->
   </param>
  </rule>
 </ruleset>
 <setup>  <!-- 0..1 A series of required setup operations before tests are executed -->
  <action>  <!-- 1..* A setup operation or assert to perform -->
   <operation>  <!-- 0..1 The setup operation to perform -->
    <type><!-- 0..1 Coding The operation code type that will be executed --></type>
    <resource value="[code]"/><!-- 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 xml | json | ttl | none -->
    <contentType value="[code]"/><!-- 0..1 xml | json | ttl | none -->
    <destination value="[integer]"/><!-- 0..1 Server responding to the request -->
    <encodeRequestUrl value="[boolean]"/><!-- 0..1 Whether or not to send the request url in encoded format -->
    <origin value="[integer]"/><!-- 0..1 Server initiating the request -->
    <params value="[string]"/><!-- 0..1 Explicitly defined path parameters -->
    <requestHeader>  <!-- 0..* Each operation can have one ore more header elements -->
     <field value="[string]"/><!-- 1..1 HTTP header field name -->
     <value value="[string]"/><!-- 1..1 HTTP headerfield value -->
    </requestHeader>
    <responseId value="[id]"/><!-- 0..1 Fixture Id of mapped response -->
    <sourceId value="[id]"/><!-- 0..1 Fixture Id of body for PUT and POST requests -->
    <targetId value="[id]"/><!-- 0..1 Id of fixture used for extracting the [id],  [type], and [vid] for GET requests -->
    <url value="[string]"/><!-- 0..1 Request URL -->
   </operation>
   <assert>  <!-- 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]"/><!-- 0..1 response | request -->
    <compareToSourceId value="[string]"/><!-- 0..1 Id of fixture used to compare the "sourceId/path" evaluations to -->
    <compareToSourcePath value="[string]"/><!-- 0..1 XPath or JSONPath expression against fixture used to compare the "sourceId/path" evaluations to -->
    <contentType value="[code]"/><!-- 0..1 xml | json | ttl | none -->
    <headerField value="[string]"/><!-- 0..1 HTTP header field name -->
    <minimumId value="[string]"/><!-- 0..1 Fixture Id of minimum content resource -->
    <navigationLinks value="[boolean]"/><!-- 0..1 Perform validation on navigation links? -->
    <operator value="[code]"/><!-- 0..1 equals | notEquals | in | notIn | greaterThan | lessThan | empty | notEmpty | contains | notContains -->
    <path value="[string]"/><!-- 0..1 XPath or JSONPath expression -->
    <requestURL value="[string]"/><!-- 0..1 Request URL comparison value -->
    <resource value="[code]"/><!-- 0..1 Resource type -->
    <response value="[code]"/><!-- 0..1 okay | created | noContent | notModified | bad | forbidden | notFound | methodNotAllowed | conflict | gone | preconditionFailed | unprocessable -->
    <responseCode value="[string]"/><!-- 0..1 HTTP response code to test -->
    <rule>  <!-- 0..1 The reference to a TestScript.rule -->
     <ruleId value="[id]"/><!-- 1..1 Id of the TestScript.rule -->
     <param>  <!-- 0..* Rule parameter template -->
      <name value="[string]"/><!-- 1..1 Parameter name matching external assert rule parameter -->
      <value value="[string]"/><!-- 1..1 Parameter value defined either explicitly or dynamically -->
     </param>
    </rule>
    <ruleset>  <!-- 0..1 The reference to a TestScript.ruleset -->
     <rulesetId value="[id]"/><!-- 1..1 Id of the TestScript.ruleset -->
     <rule>  <!-- 0..* The referenced rule within the ruleset -->
      <ruleId value="[id]"/><!-- 1..1 Id of referenced rule within the ruleset -->
      <param>  <!-- 0..* Rule parameter template -->
       <name value="[string]"/><!-- 1..1 Parameter name matching external assert ruleset rule parameter -->
       <value value="[string]"/><!-- 1..1 Parameter value defined either explicitly or dynamically -->
      </param>
     </rule>
    </ruleset>
    <sourceId value="[id]"/><!-- 0..1 Fixture Id of source expression or headerField -->
    <validateProfileId value="[id]"/><!-- 0..1 Profile Id of validation profile reference -->
    <value value="[string]"/><!-- 0..1 The value to compare to -->
    <warningOnly value="[boolean]"/><!-- 0..1 Will this assert produce a warning only on error? -->
   </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><!-- 0..1 Content as for TestScript.setup.action.operation The teardown operation to perform --></operation>
  </action>
 </teardown>
</TestScript>

JSON Template

{doco
  "resourceType" : "TestScript",
  // from Resource: id, meta, implicitRules, and language
  // from DomainResource: text, contained, extension, and modifierExtension
  "url" : "<uri>", // R!  Absolute URL used to reference this TestScript
  "version" : "<string>", // Logical id for this version of the TestScript
  "name" : "<string>", // R!  Informal name for this TestScript
  "status" : "<code>", // R!  draft | active | retired
  "identifier" : { Identifier }, // External identifier
  "experimental" : <boolean>, // If for testing purposes, not real usage
  "publisher" : "<string>", // Name of the publisher (Organization or individual)
  "contact" : [{ // Contact details of the publisher
    "name" : "<string>", // Name of an individual to contact
    "telecom" : [{ ContactPoint }] // Contact details for individual or publisher
  }],
  "date" : "<dateTime>", // Date for this version of the TestScript
  "description" : "<markdown>", // Natural language description of the TestScript
  "useContext" : [{ CodeableConcept }], // Content intends to support these contexts
  "requirements" : "<markdown>", // Scope and Usage this Test Script is for
  "copyright" : "<string>", // Use and/or publishing restrictions
  "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
  }],
  "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
  }],
  "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" : [{ // R!  Capabilities  that are assumed to function correctly on the FHIR server being tested
      "required" : <boolean>, // Are the capabilities required?
      "validated" : <boolean>, // 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
      "conformance" : { Reference(Conformance) } // R!  Required Conformance
    }]
  },
  "fixture" : [{ // Fixture in the test script - by reference (uri)
    "autocreate" : <boolean>, // Whether or not to implicitly create the fixture during setup
    "autodelete" : <boolean>, // Whether or not to implicitly delete the fixture during teardown
    "resource" : { Reference(Any) } // Reference of the resource
  }],
  "profile" : [{ Reference(Any) }], // 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
    "headerField" : "<string>", // HTTP header field name for source
    "path" : "<string>", // XPath or JSONPath against the fixture body
    "sourceId" : "<id>" // Fixture Id of source expression or headerField within this variable
  }],
  "rule" : [{ // Assert rule used within the test script
    "resource" : { Reference(Any) }, // R!  Assert rule resource reference
    "param" : [{ // Rule parameter template
      "name" : "<string>", // R!  Parameter name matching external assert rule parameter
      "value" : "<string>" // Parameter value defined either explicitly or dynamically
    }]
  }],
  "ruleset" : [{ // Assert ruleset used within the test script
    "resource" : { Reference(Any) }, // R!  Assert ruleset resource reference
    "rule" : [{ // R!  The referenced rule within the ruleset
      "ruleId" : "<id>", // R!  Id of referenced rule within the ruleset
      "param" : [{ // Ruleset rule parameter template
        "name" : "<string>", // R!  Parameter name matching external assert ruleset rule parameter
        "value" : "<string>" // Parameter value defined either explicitly or dynamically
      }]
    }]
  }],
  "setup" : { // A series of required setup operations before tests are executed
    "action" : [{ // R!  A setup operation or assert to perform
      "operation" : { // The setup operation to perform
        "type" : { Coding }, // The operation code type that will be executed
        "resource" : "<code>", // Resource type
        "label" : "<string>", // Tracking/logging operation label
        "description" : "<string>", // Tracking/reporting operation description
        "accept" : "<code>", // xml | json | ttl | none
        "contentType" : "<code>", // xml | json | ttl | none
        "destination" : <integer>, // Server responding to the request
        "encodeRequestUrl" : <boolean>, // Whether or not to send the request url in encoded format
        "origin" : <integer>, // Server initiating the request
        "params" : "<string>", // Explicitly defined path parameters
        "requestHeader" : [{ // Each operation can have one ore more header elements
          "field" : "<string>", // R!  HTTP header field name
          "value" : "<string>" // R!  HTTP headerfield value
        }],
        "responseId" : "<id>", // Fixture Id of mapped response
        "sourceId" : "<id>", // Fixture Id of body for PUT and POST requests
        "targetId" : "<id>", // Id of fixture used for extracting the [id],  [type], and [vid] for GET requests
        "url" : "<string>" // Request URL
      },
      "assert" : { // The assertion to perform
        "label" : "<string>", // Tracking/logging assertion label
        "description" : "<string>", // Tracking/reporting assertion description
        "direction" : "<code>", // response | request
        "compareToSourceId" : "<string>", // Id of fixture used to compare the "sourceId/path" evaluations to
        "compareToSourcePath" : "<string>", // XPath or JSONPath expression against fixture used to compare the "sourceId/path" evaluations to
        "contentType" : "<code>", // xml | json | ttl | none
        "headerField" : "<string>", // HTTP header field name
        "minimumId" : "<string>", // Fixture Id of minimum content resource
        "navigationLinks" : <boolean>, // Perform validation on navigation links?
        "operator" : "<code>", // equals | notEquals | in | notIn | greaterThan | lessThan | empty | notEmpty | contains | notContains
        "path" : "<string>", // XPath or JSONPath expression
        "requestURL" : "<string>", // Request URL comparison value
        "resource" : "<code>", // Resource type
        "response" : "<code>", // okay | created | noContent | notModified | bad | forbidden | notFound | methodNotAllowed | conflict | gone | preconditionFailed | unprocessable
        "responseCode" : "<string>", // HTTP response code to test
        "rule" : { // The reference to a TestScript.rule
          "ruleId" : "<id>", // R!  Id of the TestScript.rule
          "param" : [{ // Rule parameter template
            "name" : "<string>", // R!  Parameter name matching external assert rule parameter
            "value" : "<string>" // R!  Parameter value defined either explicitly or dynamically
          }]
        },
        "ruleset" : { // The reference to a TestScript.ruleset
          "rulesetId" : "<id>", // R!  Id of the TestScript.ruleset
          "rule" : [{ // The referenced rule within the ruleset
            "ruleId" : "<id>", // R!  Id of referenced rule within the ruleset
            "param" : [{ // Rule parameter template
              "name" : "<string>", // R!  Parameter name matching external assert ruleset rule parameter
              "value" : "<string>" // R!  Parameter value defined either explicitly or dynamically
            }]
          }]
        },
        "sourceId" : "<id>", // Fixture Id of source expression or headerField
        "validateProfileId" : "<id>", // Profile Id of validation profile reference
        "value" : "<string>", // The value to compare to
        "warningOnly" : <boolean> // Will this assert produce a warning only on error?
      }
    }]
  },
  "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 } // The teardown operation to perform
    }]
  }
}

Turtle Template

@prefix fhir: <http://hl7.org/fhir/> .doco


[ 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:TestScript.url [ uri ]; # 1..1 Absolute URL used to reference this TestScript
  fhir:TestScript.version [ string ]; # 0..1 Logical id for this version of the TestScript
  fhir:TestScript.name [ string ]; # 1..1 Informal name for this TestScript
  fhir:TestScript.status [ code ]; # 1..1 draft | active | retired
  fhir:TestScript.identifier [ Identifier ]; # 0..1 External identifier
  fhir:TestScript.experimental [ boolean ]; # 0..1 If for testing purposes, not real usage
  fhir:TestScript.publisher [ string ]; # 0..1 Name of the publisher (Organization or individual)
  fhir:TestScript.contact [ # 0..* Contact details of the publisher
    fhir:TestScript.contact.name [ string ]; # 0..1 Name of an individual to contact
    fhir:TestScript.contact.telecom [ ContactPoint ], ... ; # 0..* Contact details for individual or publisher
  ], ...;
  fhir:TestScript.date [ dateTime ]; # 0..1 Date for this version of the TestScript
  fhir:TestScript.description [ markdown ]; # 0..1 Natural language description of the TestScript
  fhir:TestScript.useContext [ CodeableConcept ], ... ; # 0..* Content intends to support these contexts
  fhir:TestScript.requirements [ markdown ]; # 0..1 Scope and Usage this Test Script is for
  fhir:TestScript.copyright [ string ]; # 0..1 Use and/or publishing restrictions
  fhir:TestScript.origin [ # 0..* An abstract server representing a client or sender in a message exchange
    fhir:TestScript.origin.index [ integer ]; # 1..1 The index of the abstract origin server starting at 1
    fhir:TestScript.origin.profile [ Coding ]; # 1..1 FHIR-Client | FHIR-SDC-FormFiller
  ], ...;
  fhir:TestScript.destination [ # 0..* An abstract server representing a destination or receiver in a message exchange
    fhir:TestScript.destination.index [ integer ]; # 1..1 The index of the abstract destination server starting at 1
    fhir:TestScript.destination.profile [ Coding ]; # 1..1 FHIR-Server | FHIR-SDC-FormManager | FHIR-SDC-FormReceiver | FHIR-SDC-FormProcessor
  ], ...;
  fhir:TestScript.metadata [ # 0..1 Required capability that is assumed to function correctly on the FHIR server being tested
    fhir:TestScript.metadata.link [ # 0..* Links to the FHIR specification
      fhir:TestScript.metadata.link.url [ uri ]; # 1..1 URL to the specification
      fhir:TestScript.metadata.link.description [ string ]; # 0..1 Short description
    ], ...;
    fhir:TestScript.metadata.capability [ # 1..* Capabilities  that are assumed to function correctly on the FHIR server being tested
      fhir:TestScript.metadata.capability.required [ boolean ]; # 0..1 Are the capabilities required?
      fhir:TestScript.metadata.capability.validated [ boolean ]; # 0..1 Are the capabilities validated?
      fhir:TestScript.metadata.capability.description [ string ]; # 0..1 The expected capabilities of the server
      fhir:TestScript.metadata.capability.origin [ integer ], ... ; # 0..* Which origin server these requirements apply to
      fhir:TestScript.metadata.capability.destination [ integer ]; # 0..1 Which server these requirements apply to
      fhir:TestScript.metadata.capability.link [ uri ], ... ; # 0..* Links to the FHIR specification
      fhir:TestScript.metadata.capability.conformance [ Reference(Conformance) ]; # 1..1 Required Conformance
    ], ...;
  ];
  fhir:TestScript.fixture [ # 0..* Fixture in the test script - by reference (uri)
    fhir:TestScript.fixture.autocreate [ boolean ]; # 0..1 Whether or not to implicitly create the fixture during setup
    fhir:TestScript.fixture.autodelete [ boolean ]; # 0..1 Whether or not to implicitly delete the fixture during teardown
    fhir:TestScript.fixture.resource [ Reference(Any) ]; # 0..1 Reference of the resource
  ], ...;
  fhir:TestScript.profile [ Reference(Any) ], ... ; # 0..* Reference of the validation profile
  fhir:TestScript.variable [ # 0..* Placeholder for evaluated elements
    fhir:TestScript.variable.name [ string ]; # 1..1 Descriptive name for this variable
    fhir:TestScript.variable.defaultValue [ string ]; # 0..1 Default, hard-coded, or user-defined value for this variable
    fhir:TestScript.variable.headerField [ string ]; # 0..1 HTTP header field name for source
    fhir:TestScript.variable.path [ string ]; # 0..1 XPath or JSONPath against the fixture body
    fhir:TestScript.variable.sourceId [ id ]; # 0..1 Fixture Id of source expression or headerField within this variable
  ], ...;
  fhir:TestScript.rule [ # 0..* Assert rule used within the test script
    fhir:TestScript.rule.resource [ Reference(Any) ]; # 1..1 Assert rule resource reference
    fhir:TestScript.rule.param [ # 0..* Rule parameter template
      fhir:TestScript.rule.param.name [ string ]; # 1..1 Parameter name matching external assert rule parameter
      fhir:TestScript.rule.param.value [ string ]; # 0..1 Parameter value defined either explicitly or dynamically
    ], ...;
  ], ...;
  fhir:TestScript.ruleset [ # 0..* Assert ruleset used within the test script
    fhir:TestScript.ruleset.resource [ Reference(Any) ]; # 1..1 Assert ruleset resource reference
    fhir:TestScript.ruleset.rule [ # 1..* The referenced rule within the ruleset
      fhir:TestScript.ruleset.rule.ruleId [ id ]; # 1..1 Id of referenced rule within the ruleset
      fhir:TestScript.ruleset.rule.param [ # 0..* Ruleset rule parameter template
        fhir:TestScript.ruleset.rule.param.name [ string ]; # 1..1 Parameter name matching external assert ruleset rule parameter
        fhir:TestScript.ruleset.rule.param.value [ string ]; # 0..1 Parameter value defined either explicitly or dynamically
      ], ...;
    ], ...;
  ], ...;
  fhir:TestScript.setup [ # 0..1 A series of required setup operations before tests are executed
    fhir:TestScript.setup.action [ # 1..* A setup operation or assert to perform
      fhir:TestScript.setup.action.operation [ # 0..1 The setup operation to perform
        fhir:TestScript.setup.action.operation.type [ Coding ]; # 0..1 The operation code type that will be executed
        fhir:TestScript.setup.action.operation.resource [ code ]; # 0..1 Resource type
        fhir:TestScript.setup.action.operation.label [ string ]; # 0..1 Tracking/logging operation label
        fhir:TestScript.setup.action.operation.description [ string ]; # 0..1 Tracking/reporting operation description
        fhir:TestScript.setup.action.operation.accept [ code ]; # 0..1 xml | json | ttl | none
        fhir:TestScript.setup.action.operation.contentType [ code ]; # 0..1 xml | json | ttl | none
        fhir:TestScript.setup.action.operation.destination [ integer ]; # 0..1 Server responding to the request
        fhir:TestScript.setup.action.operation.encodeRequestUrl [ boolean ]; # 0..1 Whether or not to send the request url in encoded format
        fhir:TestScript.setup.action.operation.origin [ integer ]; # 0..1 Server initiating the request
        fhir:TestScript.setup.action.operation.params [ string ]; # 0..1 Explicitly defined path parameters
        fhir:TestScript.setup.action.operation.requestHeader [ # 0..* Each operation can have one ore more header elements
          fhir:TestScript.setup.action.operation.requestHeader.field [ string ]; # 1..1 HTTP header field name
          fhir:TestScript.setup.action.operation.requestHeader.value [ string ]; # 1..1 HTTP headerfield value
        ], ...;
        fhir:TestScript.setup.action.operation.responseId [ id ]; # 0..1 Fixture Id of mapped response
        fhir:TestScript.setup.action.operation.sourceId [ id ]; # 0..1 Fixture Id of body for PUT and POST requests
        fhir:TestScript.setup.action.operation.targetId [ id ]; # 0..1 Id of fixture used for extracting the [id],  [type], and [vid] for GET requests
        fhir:TestScript.setup.action.operation.url [ string ]; # 0..1 Request URL
      ];
      fhir:TestScript.setup.action.assert [ # 0..1 The assertion to perform
        fhir:TestScript.setup.action.assert.label [ string ]; # 0..1 Tracking/logging assertion label
        fhir:TestScript.setup.action.assert.description [ string ]; # 0..1 Tracking/reporting assertion description
        fhir:TestScript.setup.action.assert.direction [ code ]; # 0..1 response | request
        fhir:TestScript.setup.action.assert.compareToSourceId [ string ]; # 0..1 Id of fixture used to compare the "sourceId/path" evaluations to
        fhir:TestScript.setup.action.assert.compareToSourcePath [ string ]; # 0..1 XPath or JSONPath expression against fixture used to compare the "sourceId/path" evaluations to
        fhir:TestScript.setup.action.assert.contentType [ code ]; # 0..1 xml | json | ttl | none
        fhir:TestScript.setup.action.assert.headerField [ string ]; # 0..1 HTTP header field name
        fhir:TestScript.setup.action.assert.minimumId [ string ]; # 0..1 Fixture Id of minimum content resource
        fhir:TestScript.setup.action.assert.navigationLinks [ boolean ]; # 0..1 Perform validation on navigation links?
        fhir:TestScript.setup.action.assert.operator [ code ]; # 0..1 equals | notEquals | in | notIn | greaterThan | lessThan | empty | notEmpty | contains | notContains
        fhir:TestScript.setup.action.assert.path [ string ]; # 0..1 XPath or JSONPath expression
        fhir:TestScript.setup.action.assert.requestURL [ string ]; # 0..1 Request URL comparison value
        fhir:TestScript.setup.action.assert.resource [ code ]; # 0..1 Resource type
        fhir:TestScript.setup.action.assert.response [ code ]; # 0..1 okay | created | noContent | notModified | bad | forbidden | notFound | methodNotAllowed | conflict | gone | preconditionFailed | unprocessable
        fhir:TestScript.setup.action.assert.responseCode [ string ]; # 0..1 HTTP response code to test
        fhir:TestScript.setup.action.assert.rule [ # 0..1 The reference to a TestScript.rule
          fhir:TestScript.setup.action.assert.rule.ruleId [ id ]; # 1..1 Id of the TestScript.rule
          fhir:TestScript.setup.action.assert.rule.param [ # 0..* Rule parameter template
            fhir:TestScript.setup.action.assert.rule.param.name [ string ]; # 1..1 Parameter name matching external assert rule parameter
            fhir:TestScript.setup.action.assert.rule.param.value [ string ]; # 1..1 Parameter value defined either explicitly or dynamically
          ], ...;
        ];
        fhir:TestScript.setup.action.assert.ruleset [ # 0..1 The reference to a TestScript.ruleset
          fhir:TestScript.setup.action.assert.ruleset.rulesetId [ id ]; # 1..1 Id of the TestScript.ruleset
          fhir:TestScript.setup.action.assert.ruleset.rule [ # 0..* The referenced rule within the ruleset
            fhir:TestScript.setup.action.assert.ruleset.rule.ruleId [ id ]; # 1..1 Id of referenced rule within the ruleset
            fhir:TestScript.setup.action.assert.ruleset.rule.param [ # 0..* Rule parameter template
              fhir:TestScript.setup.action.assert.ruleset.rule.param.name [ string ]; # 1..1 Parameter name matching external assert ruleset rule parameter
              fhir:TestScript.setup.action.assert.ruleset.rule.param.value [ string ]; # 1..1 Parameter value defined either explicitly or dynamically
            ], ...;
          ], ...;
        ];
        fhir:TestScript.setup.action.assert.sourceId [ id ]; # 0..1 Fixture Id of source expression or headerField
        fhir:TestScript.setup.action.assert.validateProfileId [ id ]; # 0..1 Profile Id of validation profile reference
        fhir:TestScript.setup.action.assert.value [ string ]; # 0..1 The value to compare to
        fhir:TestScript.setup.action.assert.warningOnly [ boolean ]; # 0..1 Will this assert produce a warning only on error?
      ];
    ], ...;
  ];
  fhir:TestScript.test [ # 0..* A test in this script
    fhir:TestScript.test.name [ string ]; # 0..1 Tracking/logging name of this test
    fhir:TestScript.test.description [ string ]; # 0..1 Tracking/reporting short description of the test
    fhir:TestScript.test.action [ # 1..* A test operation or assert to perform
      fhir:TestScript.test.action.operation [ See TestScript.setup.action.operation ]; # 0..1 The setup operation to perform
      fhir:TestScript.test.action.assert [ See TestScript.setup.action.assert ]; # 0..1 The setup assertion to perform
    ], ...;
  ], ...;
  fhir:TestScript.teardown [ # 0..1 A series of required clean up steps
    fhir:TestScript.teardown.action [ # 1..* One or more teardown operations to perform
      fhir:TestScript.teardown.action.operation [ See TestScript.setup.action.operation ]; # 0..1 The teardown operation to perform
    ], ...;
  ];
]

Changes since DSTU2

TestScript
TestScript.description Type changed from string to markdown
TestScript.requirements Type changed from string to markdown
TestScript.origin added
TestScript.origin.index added
TestScript.origin.profile added
TestScript.destination added
TestScript.destination.index added
TestScript.destination.profile added
TestScript.metadata.capability.origin added
TestScript.fixture.autocreate Default Value "false" added
TestScript.fixture.autodelete Default Value "false" added
TestScript.variable.defaultValue added
TestScript.rule added
TestScript.rule.resource added
TestScript.rule.param added
TestScript.rule.param.name added
TestScript.rule.param.value added
TestScript.ruleset added
TestScript.ruleset.resource added
TestScript.ruleset.rule added
TestScript.ruleset.rule.ruleId added
TestScript.ruleset.rule.param added
TestScript.ruleset.rule.param.name added
TestScript.ruleset.rule.param.value added
TestScript.setup.action.operation.destination Default Value "0" removed
TestScript.setup.action.operation.origin added
TestScript.setup.action.assert.requestURL added
TestScript.setup.action.assert.rule added
TestScript.setup.action.assert.rule.ruleId added
TestScript.setup.action.assert.rule.param added
TestScript.setup.action.assert.rule.param.name added
TestScript.setup.action.assert.rule.param.value added
TestScript.setup.action.assert.ruleset added
TestScript.setup.action.assert.ruleset.rulesetId added
TestScript.setup.action.assert.ruleset.rule added
TestScript.setup.action.assert.ruleset.rule.ruleId added
TestScript.setup.action.assert.ruleset.rule.param added
TestScript.setup.action.assert.ruleset.rule.param.name added
TestScript.setup.action.assert.ruleset.rule.param.value added
TestScript.multiserver deleted
TestScript.setup.metadata deleted
TestScript.test.metadata deleted

See the Full Difference for further information

 

Alternate definitions: Master Definition (XML, JSON), XML Schema/Schematron (for ) + JSON Schema, ShEx (for Turtle)

7.14.4.1 Terminology Bindings

PathDefinitionTypeReference
TestScript.status The lifecycle status of a Value Set or Concept Map.RequiredConformanceResourceStatus
TestScript.useContext Indicates the countries, regions, disciplines and other aspects of use within which this artifact is targeted for use.ExtensibleContext of Use ValueSet
TestScript.origin.profile The type of origin profile the test system supports.ExtensibleTestScriptProfileOriginType
TestScript.destination.profile The type of destination profile the test system supports.ExtensibleTestScriptProfileDestinationType
TestScript.setup.action.operation.type The allowable operation code types.ExtensibleTestScriptOperationCode
TestScript.setup.action.operation.resource
TestScript.setup.action.assert.resource
Either a resource or a data type.Requiredhttp://hl7.org/fhir/valueset/defined-typesFHIRDefinedType
TestScript.setup.action.operation.accept
TestScript.setup.action.operation.contentType
TestScript.setup.action.assert.contentType
The content or mime type.RequiredContentType
TestScript.setup.action.assert.direction The type of direction to use for assertion.RequiredAssertionDirectionType
TestScript.setup.action.assert.operator The type of operator to use for assertion.RequiredAssertionOperatorType
TestScript.setup.action.assert.response The type of response code to use for assertion.RequiredAssertionResponseTypes

7.14.4.2 Constraints

  • inv-1: On TestScript.setup.action: Setup action SHALL contain either an operation or assert but not both. (expression on TestScript.setup.action: operation.exists() xor assert.exists())
  • inv-10: On TestScript.teardown.action.operation: Teardown operation SHALL contain either sourceId or targetId or params or url. (expression on TestScript.teardown.action.operation: sourceId.exists() or (targetId.count() + url.count() + params.count() = 1) or (type.code in ('conformance' | 'search' | 'transaction' | 'history')))
  • inv-11: On TestScript.setup.action.assert: Setup action assert shall contain both compareToSourceId and compareToSourcePath or neither. (expression on TestScript.setup.action.assert: compareToSourceId.empty() xor compareToSourcePath.exists())
  • inv-12: On TestScript.test.action.assert: Test action assert shall contain both compareToSourceId and compareToSourcePath or neither. (expression on TestScript.test.action.assert: compareToSourceId.empty() xor compareToSourcePath.exists())
  • inv-2: On TestScript.test.action: Test action SHALL contain either an operation or assert but not both. (expression on TestScript.test.action: operation.exists() xor assert.exists())
  • inv-3: On TestScript.teardown.action: Teardown action SHALL contain an operation. (expression on TestScript.teardown.action: operation.exists())
  • inv-4: On TestScript.variable: Variable cannot contain both headerField and path. (expression on TestScript.variable: headerField.empty() or path.empty())
  • inv-5: On TestScript.metadata: TestScript metadata capability SHALL contain required or validated or both. (expression on TestScript.metadata: capability.required.exists() or capability.validated.exists())
  • inv-6: On TestScript.setup.action.assert: Only a single assertion SHALL be present within setup action assert element. (expression on TestScript.setup.action.assert: contentType.count() + headerField.count() + minimumId.count() + navigationLinks.count() + path.count() + resource.count() + responseCode.count() + response.count() + rule.count() + ruleset.count() + validateProfileId.count() <=1)
  • inv-7: On TestScript.test.action.assert: Only a single assertion SHALL be present within test action assert element. (expression on TestScript.test.action.assert: contentType.count() + headerField.count() + minimumId.count() + navigationLinks.count() + path.count() + resource.count() + responseCode.count() + response.count() + rule.count() + ruleset.count() + validateProfileId.count() <=1)
  • inv-8: On TestScript.setup.action.operation: Setup operation SHALL contain either sourceId or targetId or params or url. (expression on TestScript.setup.action.operation: sourceId.exists() or (targetId.count() + url.count() + params.count() = 1) or (type.code in ('conformance' |'search' | 'transaction' | 'history')))
  • inv-9: On TestScript.test.action.operation: Test operation SHALL contain either sourceId or targetId or params or url. (expression on TestScript.test.action.operation: sourceId.exists() or (targetId.count() + url.count() + params.count() = 1) or (type.code in ('conformance' | 'search' | 'transaction' | 'history')))

7.14.5 Notes

Please refer to the Testing FHIR - How Tos for examples on working with this resource.

7.14.6 Search Parameters

Search parameters for this resource. The common parameters also apply. See Searching for more information about searching in REST, messaging, and services.

NameTypeDescriptionPaths
datedateDate for this version of the TestScriptTestScript.date
descriptionstringNatural language description of the TestScriptTestScript.description
identifiertokenExternal identifierTestScript.identifier
namestringInformal name for this TestScriptTestScript.name
publisherstringName of the publisher (Organization or individual)TestScript.publisher
testscript-capabilitystringTestScript required and validated capabilityTestScript.metadata.capability.description
urluriAbsolute URL used to reference this TestScriptTestScript.url
use-contexttokenContent intends to support these contextsTestScript.useContext