---
title: "Exporting a Test"
canonical: "https://docs.getxporter.app/space/XPORTER/1412429/Exporting%20a%20Test"
format: markdown
---
> Macro (rw-ui-expands-macro)
> 
> > Macro (rw-expand)
> 
> > Macro (toc)

## Introduction

Xporter for Jira allows you to get the data below from an Xray Test.

## Data

### Test Status

To get the status of the Test printed on the report, use this placeholder in your template: `${TestRunStatus}`

### Test Repository path

To get the path of the Test from the Test Repository Board printed, use this placeholder in your template: `${TestRepositoryPath}`

## Iterating over Test Steps

### Manual Test Steps

**Definition: **`${TestSteps[n].Field}`

*n* is the index of the Test Step, starting from 0. The *TestStepsCount* field was created to give the total number of Test Steps. The fields available for Test Steps are:

- StepNumber.
- Action.
- Data.
- ExpectedResult.

```
#{for teststeps}
    ${TestSteps[n].StepNumber}
    ${TestSteps[n].Action}
    ${TestSteps[n].Data}
    ${TestSteps[n].ExpectedResult}
#{end}
```

### Manual Test Steps Attachments

Xporter for Jira allows rendering all Attachments of Manual Test Steps of a Test.

**Definition: **`${TestSteps[n].Attachments[m].Field}`

*n* is the index of the Test Step and *m* is the index of the Attachment. The *AttachmentsCount* field was created to give the total number of Attachments. The fields available for Test Step Attachments are:

- ID.
- Name.
- Author.
- AuthorFullName.
- Created.
- Size.
- HumanReadableSize.
- MimeType.
- FileURL.

```
#{for teststeps}
	#{for m=TestSteps[n].AttachmentsCount}
		${TestSteps[n].Attachments[m].ID}
		${TestSteps[n].Attachments[m].Name}
		${TestSteps[n].Attachments[m].Author}
		${TestSteps[n].Attachments[m].AuthorFullName}
		${TestSteps[n].Attachments[m].Created}
		${TestSteps[n].Attachments[m].Size}
		${TestSteps[n].Attachments[m].HumanReadableSize}
		${TestSteps[n].Attachments[m].MimeType}
		${TestSteps[n].Attachments[m].FileURL}		
	#{end}
#{end}
```

### Manual Test Steps Custom Fields

To export Test Steps Custom Fields, define the placeholder with the name of your custom field.

Example: you have a custom field called "Run CF". To get the value printed on your report, you have to use the following placeholder:

```
#Iterating over Test Runs
#{for teststeps}
	Run CF: ${TestSteps[n].Run CF}
#{end}
```

> ℹ️ If your custom field type is a Number, Data, or Date Time, you can use [formatting functions](https://docs.getxray.app/display/XRAY/Helper+Functions).

## Pre-Conditions Associated with a Test

Xporter for Jira allows rendering of all the Pre-Conditions associated with a Test. 

**Definition: **`$ {PreConditions[n].Field}`

*n* is the index of the Pre-Condition, starting from 0. The *PreConditionsCount or PreconditionsCount* field was created to give the total number of Pre-Conditions.

Since Pre-Condition is a Jira Issue, you can render all the normal [mappings](https://docs.getxporter.app/space/XPORTER/1413922) that you are used to.

**Example**

```
#{for preconditions}
	${PreConditions[n].Key}
	${PreConditions[n].Summary}
	${PreConditions[n].Description}
	${PreConditions[n].Pre-Condition Type}
	${PreConditions[n].Conditions}
#{end}
```

or

```
#{for j=PreConditionsCount}
	${PreConditions[j].Key}
	${PreConditions[j].Summary}
	${PreConditions[j].Description}
	${PreConditions[j].Pre-Condition Type}
	${PreConditions[j].Conditions}
#{end}
```

## Requirements Associated with a Test

You can print  all the Requirements associated with a Test using an [Xray Enhanced querying JQL Function](https://confluence.xpand-addons.com/display/XRAY/Enhanced+querying+with+JQL), where you input the given Test Key:

[**JQL Function**](https://docs.getxporter.app/space/XPORTER/1413910)**: **`testRequirements('${Key}')`

To give the total of Requirements associated with a given Test, you can use the following JQL count statement, where you input the given Test Key: `${jqlcount:testRequirements('``${Key}``')}`

*n* is the index of the Pre-Condition, starting from 0. The *PreConditionsCount* field was created to give the total number of Pre-Conditions.

Since a Requirement is a Jira Issue, you can render all the normal mappings that you are used to.

**Example**

```
#{for k=JQLIssuesCount|clause=key in testRequirements('${Key}')}
   ${JQLIssues[k].Key}
   ${JQLIssues[k].Summary}
   ${JQLIssues[k].Description}
#{end}
```

You can also iterate over all the Requirements associated with a Test while iterating over all Tests of a Test Set.

```
#{for tests}
	${Tests[n].Key}
	${Tests[n].Summary}
	#{for k=JQLIssuesCount|clause=key in testRequirements('Tests[n].Key')}
		${Tests[n].JQLIssues[k].Key}
		${Tests[n].JQLIssues[k].Summary}
		${Tests[n].JQLIssues[k].Description}
	#{end}
#{end}
```

## Test Plans Associated with a Test

**Definition: **`${TestPlans[n].Field}`

*n* is the index of the Test Plan, starting from 0. The *TestPlansCount* field was created to give the total number of Test Plans.

Since a Test Plan is a Jira Issue, you can render all the normal mappings that you are used to.

**Example**

```
#{for testPlans}
	${TestPlans[n].Key}
	${TestPlans[n].Summary}
	${TestPlans[n].Description}
#{end}
```

## Test Runs Associated with a Test

**Definition: **`${TestRuns[n].Field}`

*n* is the index of the Test Run, starting from 0. The *TestRunsCount* field was created to give the total number of Test Runs.

**Example**

```
#Iterating over Test Runs
#{for testruns}
    Execution Status: ${TestRuns[n].Execution Status}
    AssigneeID: ${AssigneeId}
	Rank: ${TestRuns[n].Rank}
    Executed By: ${TestRuns[n].Executed By}
    Started On: ${TestRuns[n].Started On}
    Finished On: ${TestRuns[n].Finished On}
    Comment: ${wiki:TestRuns[n].Comment}
    Execution Defects Count: ${TestRuns[n].ExecutionDefectsCount}
    TestSteps Defects Count: ${TestRuns[n].TestStepsDefectsCount}
    Evidences Count: ${TestRuns[n].ExecutionEvidencesCount}
#{end}
```

### Test Execution from a Test Run Associated with a Test

<span style="color: #172B4D">You can access Test Execution information by iterating over tests and their Test Runs. The notation is: </span>

```
#{for tests}
	${Tests[n].Key}
	#{for c=Tests[n].TestRunsCount}
		${Tests[n].TestRuns[c].Executed By}
		${Tests[n].TestRuns[c].PreCondition.Key}

		${Tests[n].TestRuns[c].TestExecution.Key}
		${Tests[n].TestRuns[c].TestExecution.Summary}
		${Tests[n].TestRuns[c].TestExecution.Description}
		.......
	#{end}
#{end}
```

### Exporting Test Runs Custom Fields

To export Test Runs Custom Fields, define the placeholder with the name of your custom field.

Example: imagine that you have a custom field called "Run CF". To get the value printed on you report, use this placeholder:

```
#{for testruns}
The Run CF value is: ${TestRuns[n].Run CF}
#{end}
```

> ℹ️ If your custom field type is a Number, Data, or Date Time you can use [formatting functions](https://docs.getxray.app/display/XRAY/Helper+Functions).

### Exporting Parameterized Tests from a Test Run

<span style="color: #172B4D">To export all this data, you first need to execute the test run. If you change any data, you need to return to the Execution Page and merge it with the new data.</span>

| **Fields** | **Description** |
| --- | --- |
| IsDataDriven | Returns "true" if the current test run is data-driven; otherwise, it returns "false" |
| Iterations Overall Execution Status.STATUS.Percentage | The percentage of STATUS in the test run iterations |
| IterationsOverallExecutionStatus | List of all the statuses in the current test run iteration and their percentages |
| IterationsOverallExecutionStatus.STATUS.Count | The number of STATUS in the test run iterations |
| Parameters | List of the parameters from each test run iteration |
| ParametersCount | Total of Parameters declared in Dataset |

> ℹ️ **Data-driven**
> ℹ️ 
> ℹ️ <span style="color: #333333">The field IsDataDriven is going to return TRUE only if the test run has more than one iteration.</span>

### Exporting Test Runs Parameters from a Test

For each Test Run parameter, you can export these fields:

- Key.
- Value.

Below you can find an example of how to iterate over the list of **Test Run ****Parameters** associated with a **Test.**

```
// Iterating each test run
#{for testruns}
    // Iterating over parameters for each test run
    Parameters Total: ${TestRuns[n].ParametersCount}
    #{for m=TestRuns[n].ParametersCount}
        Key: ${TestRuns[n].Parameters[m].Key}
        Value: ${TestRuns[n].Parameters[m].Value}
    #{end}
#{end}
```

### Exporting Test Runs Iterations from a Test

For each Test Run iteration you can export these fields:

- Overall Execution Status.
- Data from Test Run Iterations.
- Parameters from Test Run Iterations.
- PreConditions from Test Run Iterations.
- Test steps from Test Run Iterations.

Below you can find an example of how to iterate over the list of **Test Run Iterations** associated with a **Test**.

```
// Iterating each test run
#{for testruns}
    IsDataDriven: ${TestRuns[n].IsDataDriven}  
     
    // Iterations Overall Execution Status (percentage + total of testes per status)
    List of Statuses: ${TestRuns[n].Iterations Overall Execution Status}
    TO DO: ${TestRuns[n].Iterations Overall Execution Status.TODO}% - ${TestRuns[n].Iterations Overall Execution Status.TODO.Count}
    EXECUTING: ${TestRuns[n].Iterations Overall Execution Status.EXECUTING}% - ${TestRuns[n].Iterations Overall Execution Status.EXECUTING.Count}
    PASSED: ${TestRuns[n].Iterations Overall Execution Status.PASS}% - ${TestRuns[n].Iterations Overall Execution Status.PASS.Count}
    FAILED: ${TestRuns[n].Iterations Overall Execution Status.FAIL}% - ${TestRuns[n].Iterations Overall Execution Status.FAIL.Count}
    ABORTED: ${TestRuns[n].Iterations Overall Execution Status.ABORTED}% - ${TestRuns[n].Iterations Overall Execution Status.ABORTED.Count}
 
    // Iterating over test runs iterations
    Total of Iterations from a Test Run: ${TestRuns[n].IterationsCount}
    #{for m=TestRuns[n].IterationsCount}
        Name: ${TestRuns[n].Iterations[m].Name}
        Status: ${TestRuns[n].Iterations[m].Status}
        Parameters: ${TestRuns[n].Iterations[m].Parameters}
 
        // Iterating over parameters for each test run iteration
        Parameters Total: ${TestRuns[n].Iterations[m].ParametersCount}
        #{for l=TestRuns[n].Iterations[m].ParametersCount}
            Key: ${TestRuns[n].Iterations[m].Parameters[l].Key}
            Value: ${TestRuns[n].Iterations[m].Parameters[l].Value}
        #{end}
 
        // Iterating over preconditions for each test run iteration
        Preconditions Total: ${TestRuns[n].Iterations[m].PreConditionsCount}
        #{for l=TestRuns[n].Iterations[m].PreConditionsCount}
			Key: ${TestRuns[n].Iterations[m].PreConditions[l].Key}
			Summary: ${TestRuns[n].Iterations[m].PreConditions[l].Summary}
            Definition: ${TestRuns[n].Iterations[m].PreConditions[l].Conditions}
            Type: ${TestRuns[n].Iterations[m].PreConditions[l].Pre-Condition Type}
        #{end}
 
        //Iterating over test steps for each test run iteration
        #{for i=TestRuns[n].Iterations[m].TestStepsCount}
            Step Number: ${TestRuns[n].Iterations[m].TestSteps[i].StepNumber}
            Action: ${TestRuns[n].Iterations[m].TestSteps[i].Action}
            Data: ${TestRuns[n].Iterations[m].TestSteps[i].Data}
            Expected Result: ${TestRuns[n].Iterations[m].TestSteps[i].ExpectedResult}
            Status: ${TestRuns[n].Iterations[m].TestSteps[i].Status}
            Comment: ${TestRuns[n].Iterations[m].TestSteps[i].Comment}
            Actual Result: ${TestRuns[n].Iterations[m].TestSteps[i].ActualResult}
            // Replace the placeholder text to export any custom field associated with the test step.
            Step Custom Field:${TestRuns[n].Iterations[m].TestSteps[i].<Step Custom Field>}
             
            // Iteration Test Step Attachments
            #{for l=TestRuns[n].Iterations[m].TestSteps[i].AttachmentsCount}
                Id: ${TestRuns[n].Iterations[m].TestSteps[i].Attachments[l].Id}
                Name: ${TestRuns[n].Iterations[m].TestSteps[i].Attachments[l].Name}
                Image: ${TestRuns[n].Iterations[m].TestSteps[i].Attachments[l].Attachment}
                FileURL: ${TestRuns[n].Iterations[m].TestSteps[i].Attachments[l].FileURL}
            #{end}
            // Iteration Test Step Evidences
            #{for l=TestRuns[n].Iterations[m].TestSteps[i].EvidencesCount}
                Id: ${TestRuns[n].Iterations[m].TestSteps[i].Evidences[l].Id}
                Name: ${TestRuns[n].Iterations[m].TestSteps[i].Evidences[l].Name}
                Evidence: ${TestRuns[n].Iterations[m].TestSteps[i].Evidences[l].Evidence}
            #{end}
            // Iteration Test Step Defects
            #{for l=TestRuns[n].Iterations[m].TestSteps[i].DefectsCount}
                Description: ${TestRuns[n].Iterations[m].TestSteps[i].Defects[l].Description}
                Id: ${TestRuns[n].Iterations[m].TestSteps[i].Defects[l].Id}
                Key: ${TestRuns[n].Iterations[m].TestSteps[i].Defects[l].Key}
                Summary: ${TestRuns[n].Iterations[m].TestSteps[i].Defects[l].Summary}
            #{end}
        #{end}
    #{end}
#{end}
```

<details>
<summary>Support/Troubleshooting</summary>

If you have questions or technical issues, please [contact the Support team via the Customer Portal (Jira service management)](https://jira.getxray.app/servicedesk/customer/portal/2/user/login?destination=portal%2F2%2Fcreate%2F28) or [send us a message using the in-app chat](https://docs.getxporter.app/space/XPORTER/23102936).
</details>