Cucumber Messages
January 25, 2026 ยท View on GitHub
All relationships where an entity is referenced by id.
Notes:
- The left side cardinality of the relationship is always rendered as one-or-more, but may also be exactly-one. This can't be extracted from the json schema easily.
- Worker is not actually an entity in the message protocol, but is referenced by id.
AstNodeis not actually an entity in the message protocol, but does reference an element in theGherkinDocument.- Github uses an older version of MermaidJS. For a better viewing experience copy the diagrams into https://mermaid.live/.
---
title: Entity relationships - by id
config:
layout: elk
---
erDiagram
Attachment }|..o| TestCaseStarted: testCaseStartedId
Attachment }|..o| TestStep: testStepId
Attachment }|..o| TestRunStarted: testRunStartedId
Attachment }|..o| TestRunHookStarted: testRunHookStartedId
ExternalAttachment }|..o| TestCaseStarted: testCaseStartedId
ExternalAttachment }|..o| TestStep: testStepId
ExternalAttachment }|..o| TestRunHookStarted: testRunHookStartedId
Pickle }|..|{ AstNode: astNodeIds
PickleStep }|..|{ AstNode: astNodeIds
PickleTag }|..|| AstNode: astNodeId
Suggestion }|..|| PickleStep: pickleStepId
TestCase }|..|| Pickle: pickleId
TestCase }|..o| TestRunStarted: testRunStartedId
TestStep }|..o| Hook: hookId
TestStep }|..o| PickleStep: pickleStepId
TestStep }|..o{ StepDefinition: stepDefinitionIds
TestCaseFinished }|..|| TestCaseStarted: testCaseStartedId
TestCaseStarted }|..|| TestCase: testCaseId
TestCaseStarted }|..o| Worker: workerId
TestRunFinished }|..o| TestRunStarted: testRunStartedId
TestRunHookFinished }|..|| TestRunHookStarted: testRunHookStartedId
TestRunHookStarted }|..|| TestRunStarted: testRunStartedId
TestRunHookStarted }|..|| Hook: hookId
TestRunHookStarted }|..o| Worker: workerId
TestStepFinished }|..|| TestCaseStarted: testCaseStartedId
TestStepFinished }|..|| TestStep: testStepId
TestStepStarted }|..|| TestCaseStarted: testCaseStartedId
TestStepStarted }|..|| TestStep: testStepId
And all has-a relationships, excluding Envelope:
---
title: Entity relationships - has a
config:
layout: elk
---
erDiagram
Attachment ||..o| Source: "has a"
Attachment ||..o| Timestamp: "has a"
ExternalAttachment ||..o| Timestamp: "has a"
GherkinDocument ||..o| Feature: "has a"
GherkinDocument ||..|{ Comment: "has"
Background ||..|| Location: "has a"
Background ||..|{ Step: "has"
Comment ||..|| Location: "has a"
DataTable ||..|| Location: "has a"
DataTable ||..|{ TableRow: "has"
DocString ||..|| Location: "has a"
Examples ||..|| Location: "has a"
Examples ||..|{ Tag: "has"
Examples ||..o| TableRow: "has a"
Examples ||..|{ TableRow: "has"
Feature ||..|| Location: "has a"
Feature ||..|{ Tag: "has"
Feature ||..|{ FeatureChild: "has"
FeatureChild ||..o| Rule: "has a"
FeatureChild ||..o| Background: "has a"
FeatureChild ||..o| Scenario: "has a"
Rule ||..|| Location: "has a"
Rule ||..|{ Tag: "has"
Rule ||..|{ RuleChild: "has"
RuleChild ||..o| Background: "has a"
RuleChild ||..o| Scenario: "has a"
Scenario ||..|| Location: "has a"
Scenario ||..|{ Tag: "has"
Scenario ||..|{ Step: "has"
Scenario ||..|{ Examples: "has"
Step ||..|| Location: "has a"
Step ||..o| DocString: "has a"
Step ||..o| DataTable: "has a"
TableCell ||..|| Location: "has a"
TableRow ||..|| Location: "has a"
TableRow ||..|{ TableCell: "has"
Tag ||..|| Location: "has a"
Hook ||..|| SourceReference: "has a"
Meta ||..|| Product: "has a"
Meta ||..|| Product: "has a"
Meta ||..|| Product: "has a"
Meta ||..|| Product: "has a"
Meta ||..o| Ci: "has a"
Ci ||..o| Git: "has a"
ParameterType ||..o| SourceReference: "has a"
ParseError ||..|| SourceReference: "has a"
Pickle ||..o| Location: "has a"
Pickle ||..|{ PickleStep: "has"
Pickle ||..|{ PickleTag: "has"
PickleStep ||..o| PickleStepArgument: "has a"
PickleStepArgument ||..o| PickleDocString: "has a"
PickleStepArgument ||..o| PickleTable: "has a"
PickleTable ||..|{ PickleTableRow: "has"
PickleTableRow ||..|{ PickleTableCell: "has"
SourceReference ||..o| JavaMethod: "has a"
SourceReference ||..o| JavaStackTraceElement: "has a"
SourceReference ||..o| Location: "has a"
StepDefinition ||..|| StepDefinitionPattern: "has a"
StepDefinition ||..|| SourceReference: "has a"
Suggestion ||..|{ Snippet: "has"
TestCase ||..|{ TestStep: "has"
Group ||..o{ Group: "has"
StepMatchArgument ||..|| Group: "has a"
StepMatchArgumentsList ||..|{ StepMatchArgument: "has"
TestStep ||..o{ StepMatchArgumentsList: "has"
TestCaseFinished ||..|| Timestamp: "has a"
TestCaseStarted ||..|| Timestamp: "has a"
TestRunFinished ||..|| Timestamp: "has a"
TestRunFinished ||..o| Exception: "has a"
TestRunHookFinished ||..|| TestStepResult: "has a"
TestRunHookFinished ||..|| Timestamp: "has a"
TestRunHookStarted ||..|| Timestamp: "has a"
TestRunStarted ||..|| Timestamp: "has a"
TestStepFinished ||..|| TestStepResult: "has a"
TestStepFinished ||..|| Timestamp: "has a"
TestStepResult ||..|| Duration: "has a"
TestStepResult ||..o| Exception: "has a"
TestStepStarted ||..|| Timestamp: "has a"