Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 11 additions & 1 deletion CHANGELOG.MD
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,19 @@ This project adheres to [Semantic Versioning](https://semver.org/). Version numb
- **MINOR**: New features that are backward-compatible.
- **PATCH**: Bug fixes or minor changes that do not affect backward compatibility.

## [1.13.1]

_released 02-19-2025

### Added
- Added support for multiple case ids in a single test execution.

### Fixed
- Fixed an issue where TRCLI crashes with an error if there are no matching cases and plan id is specified.

## [1.13.0]

_released 12-01-2025
_released 02-06-2025

### Added
- **New Command: `parse_cucumber`** - Parse Cucumber JSON reports and upload to TestRail
Expand Down
31 changes: 27 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ trcli
```
You should get something like this:
```
TestRail CLI v1.13.0
TestRail CLI v1.13.1
Copyright 2025 Gurock Software GmbH - www.gurock.com
Supported and loaded modules:
- parse_junit: JUnit XML Files (& Similar)
Expand All @@ -51,7 +51,7 @@ CLI general reference
--------
```shell
$ trcli --help
TestRail CLI v1.13.0
TestRail CLI v1.13.1
Copyright 2025 Gurock Software GmbH - www.gurock.com
Usage: trcli [OPTIONS] COMMAND [ARGS]...

Expand Down Expand Up @@ -255,6 +255,17 @@ From an implementation perspective, you can do this in one of two ways:
</testsuites>
```

**Multiple Case IDs (name-based):**
You can map a single test to multiple TestRail case IDs using comma-separated values in brackets:
```xml
<testcase classname="tests.LoginTests" name="[C123, C456, C789] test_case_1" time="650" />
```
Or using underscore-separated format:
```xml
<testcase classname="tests.APITests" name="C200_C201_C202_test_api_endpoints" time="500" />
```
When a test with multiple case IDs executes, all mapped case IDs receive the same result status.

2. Map by setting the case ID in a test case property, using case-matcher `property`:
```xml
<testsuites name="test suites root">
Expand All @@ -267,6 +278,18 @@ From an implementation perspective, you can do this in one of two ways:
</testsuite>
</testsuites>
```

**Multiple Case IDs (property-based):**
You can map a single test to multiple TestRail case IDs using comma-separated values:
```xml
<testcase classname="tests.LoginTests" name="test_combined_scenarios" time="650">
<properties>
<property name="test_id" value="C123, C456, C789"/>
</properties>
</testcase>
```
When a test with multiple case IDs executes, all mapped case IDs receive the same result status.

> **Important usage notes:**
> - We recommend using the `-n` option to skip creating new test cases due to the potential risk of duplication

Expand Down Expand Up @@ -1486,7 +1509,7 @@ Options:
### Reference
```shell
$ trcli add_run --help
TestRail CLI v1.13.0
TestRail CLI v1.13.1
Copyright 2025 Gurock Software GmbH - www.gurock.com
Usage: trcli add_run [OPTIONS]

Expand Down Expand Up @@ -1610,7 +1633,7 @@ providing you with a solid base of test cases, which you can further expand on T
### Reference
```shell
$ trcli parse_openapi --help
TestRail CLI v1.13.0
TestRail CLI v1.13.1
Copyright 2025 Gurock Software GmbH - www.gurock.com
Usage: trcli parse_openapi [OPTIONS]

Expand Down
37 changes: 37 additions & 0 deletions tests/test_data/XML/multiple_case_ids_in_name.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
<?xml version="1.0" encoding="UTF-8"?>
<testsuites name="Multiple Case IDs - Name-Based Matching" tests="5" failures="0" errors="0" time="20.0">
<testsuite name="Combined Test Suite for Names" tests="5" failures="0" errors="0" time="20.0">

<!-- Example 1: Multiple IDs in brackets at the beginning -->
<testcase classname="com.example.LoginTest" name="[C1050389, C1050390, C1050391] test_login_flow" time="5.0">
<system-out>Combined test for login scenarios: valid credentials, invalid password, locked account</system-out>
</testcase>

<!-- Example 2: Multiple IDs in brackets at the end -->
<testcase classname="com.example.LogoutTest" name="test_logout_scenarios [C1050392, C1050393]" time="3.0">
<system-out>Combined test for logout scenarios: normal logout, session timeout</system-out>
</testcase>

<!-- Example 3: Multiple IDs using underscore-separated format -->
<testcase classname="com.example.APITest" name="C1050394_C1050395_C1050396_test_api_endpoints" time="7.0">
<failure type="AssertionError" message="API endpoint did not return expected response for one of the cases">
Expected: API endpoint should return expected response for all cases
Actual: API endpoint returned expected response for C1050394 and C1050395, but failed for C1050396
</failure>
</testcase>

<!-- Example 4: Single case ID (backwards compatibility - bracket format) -->
<testcase classname="com.example.SingleTest" name="test_registration [C1050397]" time="2.0">
<failure type="AssertionError" message="Expected error message 'Invalid credentials' was not displayed">
Expected: Registration failed with error "Invalid credentials"
Actual: Registration succeeded without error
</failure>
</testcase>

<!-- Example 5: Single case ID (backwards compatibility - underscore format) -->
<testcase classname="com.example.SingleTest" name="C1050398_test_password_reset" time="3.0">
<system-out>Single test case using underscore format</system-out>
</testcase>

</testsuite>
</testsuites>
30 changes: 30 additions & 0 deletions tests/test_data/XML/multiple_case_ids_in_property.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<testsuites name="Multiple Case IDs Test Suite" tests="3" failures="0" errors="0" time="10.0">
<testsuite name="Combined Test Suite" tests="3" failures="0" errors="0" time="10.0">
<!-- Test 1: Single case ID (backwards compatibility) -->
<testcase classname="com.example.SingleTest" name="test_single_case" time="2.0">
<properties>
<property name="test_id" value="C1050381"/>
</properties>
</testcase>

<!-- Test 2: Multiple case IDs -->
<testcase classname="com.example.CombinedTest" name="test_combined_scenarios" time="5.0">
<properties>
<property name="test_id" value="C1050382, C1050383, C1050384"/>
<property name="testrail_result_comment" value="Combined test covering multiple scenarios"/>
</properties>
</testcase>

<!-- Test 3: Multiple case IDs with various whitespace -->
<testcase classname="com.example.ParamTest" name="test_parameterized" time="3.0">
<properties>
<property name="test_id" value="C1050385,C1050386,C1050387,C1050388"/>
</properties>
<failure type="AssertionError" message="Some assertions failed in parameterized test">
Expected: Login failed
Actual: Login succeeded
</failure>
</testcase>
</testsuite>
</testsuites>
Loading