# Testing multiple packages

> Prerequisites and steps for testing multiple packages using the UiPath CLI.

## Prerequisites

* Create multiple packages or test sets.
* Run the CLI `exe` (for Windows) or `dll` (for Linux) file.
* Add the required Orchestrator [API access application scopes](https://docs.uipath.com/cicd-integrations/standalone/2024.10/user-guide/executing-uipath-cli-tasks).

To test multiple packages, take the following steps:

1. Run the `test` task, using `uipcli test`. You can notice a list of the available sub-tasks.
2. Specify the required parameters and run the `parallel` sub-task.
   The following table describes the required parameters:

 <colgroup>
  <col/>
  <col/>
 </colgroup>
 
  
     Parameter  
     Description  
  
 
 
  
    <code>--testsConfigurationFilePath</code> 
     Required. Path to file with test projects configurations.  This configuration outlines the list of projects that you want to package and then execute in parallel, with certain execution options.  Each project can be configured with the following options: <code>ProjectPath</code> : The path to the project on the agent running the task. This can be a relative or absolute path. <code>AttachRobotLogs</code> : If set to <code>true</code> , the robot logs will be included in the test report file. <code>ContinueOnError</code> : Determines if the pipeline task should fail in the event of associated test failures. <code>RetryCount</code> : The number of retry attempts per test project. <code>Timeout</code> : Timeout per test project in seconds (default is 7200). <code>ParametersFilePath</code> : The path to a JSON file that contains input parameters for the test. This is similar to the parameters file used for the UiPathTest task.  Test package metadata: <code>ReleaseNotes</code><code>RepositoryUrl</code><code>RepositoryCommit</code><code>RepositoryBranch</code><code>RepositoryType</code><code>ProjectUrl</code> This configuration can also be formatted in JSON or CSV.  JSON schema example: 
<pre><code class="language-json">[
  &#123;
    "ProjectPath": "path/to/project",
    "AttachRobotLogs": true,
    "ContinueOnError": false,
    "RetryCount": 3,
    "Timeout": 7200,
    "ParametersFilePath": "path/to/parameters.json",
    "ReleaseNotes": "release notes for the test project",
    "RepositoryUrl": "http://repositoryurl.com",
    "RepositoryCommit": "commit hash",
    "RepositoryBranch": "branch name",
    "RepositoryType": "git",
    "ProjectUrl": "http://projecturl.com"
  &#125;,
  &#123;
    "ProjectPath": "path/to/project2"
  &#125;,
  &#123;
    "ProjectPath": "path/to/project3",
    "ParametersFilePath": "path/to/parameters3.json"
  &#125;
]</code></pre>
 CSV example: 
<pre><code class="language-csv">ProjectPath,AttachRobotLogs,ContinueOnError,RetryCount,Timeout,ParametersFilePath,ReleaseNotes,RepositoryUrl,RepositoryCommit,RepositoryBranch,RepositoryType,ProjectUrl
path/to/project,true,false,3,7200,path/to/parameters.json,release notes for the test project,http://repositoryurl.com,commit hash,branch name,git,http://projecturl.com
path/to/project2,,,,,,,,,,,
path/to/project3,,,,,path/to/parameters3.json,,,,,,</code></pre> 
  
  
    <code>--projectsRootDirectoryPath</code> 
    Path to the root directory of projects to be tested. Required when <code>projectPaths</code> from the <code>testsConfigurationFile</code> are relative. 
  
  
    <code style={{whiteSpace: "nowrap"}}>--executionArtifactsDirectoryPath</code> 
     Directory path where to publish test execution artifacts.  
  
  
    <code>--cliDirectoryPath</code> 
    Path to the CLI directory or <code>uipcli.dll</code> . Required if executing CLI through the <code>dotnet</code> executable, optional when executing <code>uipcli.exe</code> . 
  
  
    <code>--out</code> 
     Required. Type of the result file \&lt;junit|uipath\&gt;.  
  
  
    <code>--disableBuiltInNugetFeeds</code> 
     Disable built in nuget feeds used at test projects packing.  
  
  
    <code>-u, --username</code> 
     Required. The Orchestrator username used for authentication. Must be used together with the password.  
  
  
    <code>-p, --password</code> 
     Required. The Orchestrator password used for authentication. Must be used together with the username.  
  
  
    <code>-t, --token</code> 
     Required. The Orchestrator refresh token used for authentication. Must be used together with the account name and client id.  
  
  
    <code>-a, --accountName</code> 
     Required. The Orchestrator organization name. Must be used together with the refresh token and client id.  
  
  
    <code>-A, --accountForApp</code> 
     The Orchestrator organization name. Must be used together with id, secret and scope(s) for external application.  
  
  
    <code>-I, --applicationId</code> 
     Required. The external application id. Must be used together with organization name, secret and scope(s) for external application.  
  
  
    <code>-S, --applicationSecret</code> 
     Required. The external application secret. Must be used together with organization name, id and scope(s) for external application.  
  
  
    <code>--applicationScope</code> 
     Required. The space-separated list of application scopes. Must be used together with organization name, id and secret for external application.  
  
  
    <code>-o, --organizationUnit</code> 
     The Orchestrator folder name.  
  
  
    <code>-l, --language</code> 
     Language for the translated logs.  
  
  
    <code>--traceLevel</code> 
     Specifies what types of log messages to output One of the following values: None, Critical, Error, Warning, Information, Verbose. (default is Information).  
  
  
    <code>--identityUrl</code> ( Required for PaaS or MSI deployments ) 
     URL of your identity server.  
  
  
    <code>Orchestrator URL</code> (pos. 0) 
     Required. The URL of the Orchestrator instance.  
  
  
    <code>Orchestrator Tenant</code> (pos. 1) 
     The tenant of the Orchestrator instance.  
  
 

## Usage

```
./uipcli.exe test parallel <orchestrator_url> <orchestrator_tenant> [--testsConfigurationFilePath <tests_config_file_path>] [--projectsRootDirectoryPath <test_projects_root_directory_path>] [--executionArtifactsDirectoryPath <execution_artifacts_directory_path>] [--cliDirectoryPath <uipcli_dll_path>] [-u <orchestrator_user> -p <orchestrator_pass>] [-t <auth_token> -a <account_name>] [-A <organization_name> -I <application_id> -S <application_secret> --applicationScope <application_scope>] [-o <folder_name>] [-l <language>] [--out <junit|uipath>] [--disableBuiltInNugetFeeds] [--traceLevel <None|Critical|Error|Warning|Information|Verbose>] [--identityUrl <identityUrl>]
```

## Examples

* `./uipcli.exe test parallel "https://orch-23-10-paas.cloudapp.azure.com/" "TenantName" -u "orchestratorUsername" -p "********"
  -o "FolderName" --traceLevel Information --testsConfigurationFilePath "C:\userprofile\pipeline-repo-folder\test-configuration.json"
  --projectsRootDirectoryPath "C:\userprofile\test-projects-repo-folder" --executionArtifactsDirectoryPath "C:\userprofile\pipeline-execution-folder"
  --cliDirectoryPath "C:\userprofile\cli-download-path\UiPath.CLI.Windows\tools\uipcli.dll" --out "junit"`
* `./uipcli.exe test parallel "https://orch-23-10-paas.cloudapp.azure.com/" "TenantName" -I "76000552-3e4f-4590-9317-cdb420001f1d"
  -S "********" --applicationScope "OR.Folders OR.BackgroundTasks OR.TestSets OR.TestSetExecutions OR.TestSetSchedules OR.Settings.Read
  OR.Robots.Read OR.Machines.Read OR.Execution OR.Assets OR.Users.Read OR.Jobs OR.Monitoring" --identityUrl "https://orch-23-10-paas.cloudapp.azure.com/identity"
  -o "FolderName" --traceLevel Information -P "C:\userprofile\AutomationProjectWithTestCases\project.json" --testsConfigurationFilePath
  "C:\userprofile\pipeline-repo-folder\test-configuration.json" --projectsRootDirectoryPath "C:\userprofile\test-projects-repo-folder"
  --executionArtifactsDirectoryPath "C:\userprofile\pipeline-execution-folder" --cliDirectoryPath "C:\userprofile\cli-download-path\UiPath.CLI.Windows\tools\uipcli.dll"
  --out "junit" "C:\userprofile\AutomationProjectWithTestCases\project.json"`
* `./uipcli.exe test parallel "https://automation-suite.base.url.com/" "TenantName" -A "organizationName" -I "3f6239b9-e0e8-465e-a429-d9ffd1d9e57a"
  -S "********" --applicationScope "OR.Folders OR.BackgroundTasks OR.TestSets OR.TestSetExecutions OR.TestSetSchedules OR.Settings.Read
  OR.Robots.Read OR.Machines.Read OR.Execution OR.Assets OR.Users.Read OR.Jobs OR.Monitoring" -o "FolderName" --traceLevel Information
  --testsConfigurationFilePath "C:\userprofile\pipeline-repo-folder\test-configuration.json" --projectsRootDirectoryPath "C:\userprofile\test-projects-repo-folder"
  --executionArtifactsDirectoryPath "C:\userprofile\pipeline-execution-folder" --cliDirectoryPath "C:\userprofile\cli-download-path\UiPath.CLI.Windows\tools\uipcli.dll"
  --out "junit"`
* `./uipcli.exe test parallel "https://cloud.uipath.com/" "TenantName" -A "organizationName" -I "becc663c-8f1e-409a-a75f-c00330d80bc8"
  -S "********" --applicationScope "OR.Folders OR.BackgroundTasks OR.TestSets OR.TestSetExecutions OR.TestSetSchedules OR.Settings.Read
  OR.Robots.Read OR.Machines.Read OR.Execution OR.Assets OR.Users.Read OR.Jobs OR.Monitoring" -o "FolderName" --traceLevel Information
  --testsConfigurationFilePath "C:\userprofile\pipeline-repo-folder\test-configuration.json" --projectsRootDirectoryPath "C:\userprofile\test-projects-repo-folder"
  --executionArtifactsDirectoryPath "C:\userprofile\pipeline-execution-folder" --cliDirectoryPath "C:\userprofile\cli-download-path\UiPath.CLI.Windows\tools\uipcli.dll"
  --out "junit"`
