Skip to content
Novus Examples
ndjson27.3 KB

Cucumber Messages — Passing Checkout Run (NDJSON)

The machine twin of checkout.feature: the cucumber-messages envelope stream a runner emits, with meta, source, gherkinDocument, one pickle per expanded scenario, and paired testStepStarted/testStepFinished envelopes carrying nanosecond durations. Written as NDJSON because that is the format's actual wire shape — one envelope per line, not a JSON array.

Preview — first 50 linesndjson
{"meta": {"protocolVersion": "24.0.0", "implementation": {"name": "cucumber-js", "version": "11.0.1"}, "runtime": {"name": "node.js", "version": "22.6.0"}, "os": {"name": "linux", "version": "6.8.0"}, "cpu": {"name": "x86_64"}, "ci": {"name": "Novus Sample CI", "url": "https://ci.example.com/builds/4821", "buildNumber": "4821"}}}
{"source": {"uri": "features/checkout.feature", "data": "# language: en\n@checkout @smoke\nFeature: Checkout totals\n  As a shopper\n  I want the cart total to include tax and discounts\n  So that I am never surprised at the payment step\n\n  Background:\n    Given the catalogue contains:\n      | sku     | name             | price |\n      | NX-1042 | Sample desk lamp | 12.99 |\n      | NX-2087 | Sample notebook  |  4.50 |\n    And the tax rate is 20 percent\n\n  @pricing\n  Scenario: A single-item cart shows tax separately\n    Given my cart is empty\n    When I add 1 of \"NX-1042\"\n    Then the subtotal is \"12.99\"\n    And the tax is \"2.60\"\n    And the total is \"15.59\"\n\n  @pricing @outline\n  Scenario Outline: Quantity multiplies the subtotal\n    Given my cart is empty\n    When I add <quantity> of \"<sku>\"\n    Then the subtotal is \"<subtotal>\"\n\n    Examples: whole units\n      | sku     | quantity | subtotal |\n      | NX-1042 |        1 |    12.99 |\n      | NX-1042 |        3 |    38.97 |\n      | NX-2087 |        2 |     9.00 |\n\n    @edge\n    Examples: boundary quantities\n      | sku     | quantity | subtotal |\n      | NX-1042 |        0 |     0.00 |\n\n  @receipt\n  Scenario: The receipt renders as plain text\n    Given my cart contains 1 of \"NX-1042\"\n    When I request the receipt\n    Then the receipt reads:\n      \"\"\"\n      Novus Checkout SAMPLE receipt\n      1 x Sample desk lamp        12.99\n      Tax (20 percent)             2.60\n      Total                       15.59\n      \"\"\"\n", "mediaType": "text/x.cucumber.gherkin+plain"}}
{"gherkinDocument": {"uri": "features/checkout.feature", "feature": {"location": {"line": 3, "column": 1}, "language": "en", "keyword": "Feature", "name": "Checkout totals", "description": "  As a shopper\n  I want the cart total to include tax and discounts\n  So that I am never surprised at the payment step", "tags": [{"location": {"line": 2, "column": 1}, "name": "@checkout", "id": "t-1"}, {"location": {"line": 2, "column": 11}, "name": "@smoke", "id": "t-2"}], "children": [{"background": {"location": {"line": 8, "column": 3}, "keyword": "Background", "name": "", "id": "bg-1", "steps": [{"id": "s-bg-1", "keyword": "Given ", "keywordType": "Context", "text": "the catalogue contains:", "location": {"line": 9, "column": 5}}, {"id": "s-bg-2", "keyword": "And ", "keywordType": "Conjunction", "text": "the tax rate is 20 percent", "location": {"line": 13, "column": 5}}]}}, {"scenario": {"id": "sc-1", "keyword": "Scenario", "name": "A single-item cart shows tax separately", "location": {"line": 16, "column": 3}, "tags": [{"name": "@pricing", "id": "t-3", "location": {"line": 15, "column": 3}}], "steps": [], "examples": []}}, {"scenario": {"id": "sc-2", "keyword": "Scenario Outline", "name": "Quantity multiplies the subtotal", "location": {"line": 24, "column": 3}, "tags": [{"name": "@pricing", "id": "t-4", "location": {"line": 23, "column": 3}}, {"name": "@outline", "id": "t-5", "location": {"line": 23, "column": 12}}], "steps": [], "examples": [{"id": "ex-1", "keyword": "Examples", "name": "whole units", "location": {"line": 29, "column": 5}, "tags": []}, {"id": "ex-2", "keyword": "Examples", "name": "boundary quantities", "location": {"line": 36, "column": 5}, "tags": [{"name": "@edge", "id": "t-6", "location": {"line": 35, "column": 5}}]}]}}, {"scenario": {"id": "sc-3", "keyword": "Scenario", "name": "The receipt renders as plain text", "location": {"line": 41, "column": 3}, "tags": [{"name": "@receipt", "id": "t-7", "location": {"line": 40, "column": 3}}], "steps": [], "examples": []}}]}}}
{"pickle": {"id": "pk-1", "uri": "features/checkout.feature", "name": "A single-item cart shows tax separately", "language": "en", "astNodeIds": ["sc-1"], "tags": [{"name": "@checkout", "astNodeId": "t-1"}, {"name": "@smoke", "astNodeId": "t-2"}, {"name": "@pricing", "astNodeId": "t-3"}], "steps": [{"id": "pk-1-s-1", "type": "Context", "text": "step 1 of A single-item cart shows tax separately", "astNodeIds": ["s-1-1"]}, {"id": "pk-1-s-2", "type": "Context", "text": "step 2 of A single-item cart shows tax separately", "astNodeIds": ["s-1-2"]}, {"id": "pk-1-s-3", "type": "Action", "text": "step 3 of A single-item cart shows tax separately", "astNodeIds": ["s-1-3"]}, {"id": "pk-1-s-4", "type": "Action", "text": "step 4 of A single-item cart shows tax separately", "astNodeIds": ["s-1-4"]}, {"id": "pk-1-s-5", "type": "Action", "text": "step 5 of A single-item cart shows tax separately", "astNodeIds": ["s-1-5"]}, {"id": "pk-1-s-6", "type": "Action", "text": "step 6 of A single-item cart shows tax separately", "astNodeIds": ["s-1-6"]}, {"id": "pk-1-s-7", "type": "Action", "text": "step 7 of A single-item cart shows tax separately", "astNodeIds": ["s-1-7"]}]}}
{"pickle": {"id": "pk-2", "uri": "features/checkout.feature", "name": "Quantity multiplies the subtotal", "language": "en", "astNodeIds": ["sc-2"], "tags": [{"name": "@checkout", "astNodeId": "t-1"}, {"name": "@smoke", "astNodeId": "t-2"}, {"name": "@pricing", "astNodeId": "t-3"}, {"name": "@outline", "astNodeId": "t-4"}], "steps": [{"id": "pk-2-s-1", "type": "Context", "text": "step 1 of Quantity multiplies the subtotal", "astNodeIds": ["s-2-1"]}, {"id": "pk-2-s-2", "type": "Context", "text": "step 2 of Quantity multiplies the subtotal", "astNodeIds": ["s-2-2"]}, {"id": "pk-2-s-3", "type": "Action", "text": "step 3 of Quantity multiplies the subtotal", "astNodeIds": ["s-2-3"]}, {"id": "pk-2-s-4", "type": "Action", "text": "step 4 of Quantity multiplies the subtotal", "astNodeIds": ["s-2-4"]}, {"id": "pk-2-s-5", "type": "Action", "text": "step 5 of Quantity multiplies the subtotal", "astNodeIds": ["s-2-5"]}]}}
{"pickle": {"id": "pk-3", "uri": "features/checkout.feature", "name": "Quantity multiplies the subtotal", "language": "en", "astNodeIds": ["sc-3"], "tags": [{"name": "@checkout", "astNodeId": "t-1"}, {"name": "@smoke", "astNodeId": "t-2"}, {"name": "@pricing", "astNodeId": "t-3"}, {"name": "@outline", "astNodeId": "t-4"}], "steps": [{"id": "pk-3-s-1", "type": "Context", "text": "step 1 of Quantity multiplies the subtotal", "astNodeIds": ["s-3-1"]}, {"id": "pk-3-s-2", "type": "Context", "text": "step 2 of Quantity multiplies the subtotal", "astNodeIds": ["s-3-2"]}, {"id": "pk-3-s-3", "type": "Action", "text": "step 3 of Quantity multiplies the subtotal", "astNodeIds": ["s-3-3"]}, {"id": "pk-3-s-4", "type": "Action", "text": "step 4 of Quantity multiplies the subtotal", "astNodeIds": ["s-3-4"]}, {"id": "pk-3-s-5", "type": "Action", "text": "step 5 of Quantity multiplies the subtotal", "astNodeIds": ["s-3-5"]}]}}
{"pickle": {"id": "pk-4", "uri": "features/checkout.feature", "name": "Quantity multiplies the subtotal", "language": "en", "astNodeIds": ["sc-3"], "tags": [{"name": "@checkout", "astNodeId": "t-1"}, {"name": "@smoke", "astNodeId": "t-2"}, {"name": "@pricing", "astNodeId": "t-3"}, {"name": "@outline", "astNodeId": "t-4"}], "steps": [{"id": "pk-4-s-1", "type": "Context", "text": "step 1 of Quantity multiplies the subtotal", "astNodeIds": ["s-4-1"]}, {"id": "pk-4-s-2", "type": "Context", "text": "step 2 of Quantity multiplies the subtotal", "astNodeIds": ["s-4-2"]}, {"id": "pk-4-s-3", "type": "Action", "text": "step 3 of Quantity multiplies the subtotal", "astNodeIds": ["s-4-3"]}, {"id": "pk-4-s-4", "type": "Action", "text": "step 4 of Quantity multiplies the subtotal", "astNodeIds": ["s-4-4"]}, {"id": "pk-4-s-5", "type": "Action", "text": "step 5 of Quantity multiplies the subtotal", "astNodeIds": ["s-4-5"]}]}}
{"pickle": {"id": "pk-5", "uri": "features/checkout.feature", "name": "Quantity multiplies the subtotal", "language": "en", "astNodeIds": ["sc-3"], "tags": [{"name": "@checkout", "astNodeId": "t-1"}, {"name": "@smoke", "astNodeId": "t-2"}, {"name": "@pricing", "astNodeId": "t-3"}, {"name": "@outline", "astNodeId": "t-4"}, {"name": "@edge", "astNodeId": "t-5"}], "steps": [{"id": "pk-5-s-1", "type": "Context", "text": "step 1 of Quantity multiplies the subtotal", "astNodeIds": ["s-5-1"]}, {"id": "pk-5-s-2", "type": "Context", "text": "step 2 of Quantity multiplies the subtotal", "astNodeIds": ["s-5-2"]}, {"id": "pk-5-s-3", "type": "Action", "text": "step 3 of Quantity multiplies the subtotal", "astNodeIds": ["s-5-3"]}, {"id": "pk-5-s-4", "type": "Action", "text": "step 4 of Quantity multiplies the subtotal", "astNodeIds": ["s-5-4"]}, {"id": "pk-5-s-5", "type": "Action", "text": "step 5 of Quantity multiplies the subtotal", "astNodeIds": ["s-5-5"]}]}}
{"pickle": {"id": "pk-6", "uri": "features/checkout.feature", "name": "The receipt renders as plain text", "language": "en", "astNodeIds": ["sc-3"], "tags": [{"name": "@checkout", "astNodeId": "t-1"}, {"name": "@smoke", "astNodeId": "t-2"}, {"name": "@receipt", "astNodeId": "t-3"}], "steps": [{"id": "pk-6-s-1", "type": "Context", "text": "step 1 of The receipt renders as plain text", "astNodeIds": ["s-6-1"]}, {"id": "pk-6-s-2", "type": "Context", "text": "step 2 of The receipt renders as plain text", "astNodeIds": ["s-6-2"]}, {"id": "pk-6-s-3", "type": "Action", "text": "step 3 of The receipt renders as plain text", "astNodeIds": ["s-6-3"]}, {"id": "pk-6-s-4", "type": "Action", "text": "step 4 of The receipt renders as plain text", "astNodeIds": ["s-6-4"]}, {"id": "pk-6-s-5", "type": "Action", "text": "step 5 of The receipt renders as plain text", "astNodeIds": ["s-6-5"]}]}}
{"testRunStarted": {"timestamp": {"seconds": 1786000401, "nanos": 0}, "id": "run-1"}}
{"testCase": {"id": "tc-1", "pickleId": "pk-1", "testRunStartedId": "run-1", "testSteps": [{"id": "tc-1-ts-1", "pickleStepId": "pk-1-s-1", "stepDefinitionIds": ["sd-1"], "stepMatchArgumentsLists": [{"stepMatchArguments": []}]}, {"id": "tc-1-ts-2", "pickleStepId": "pk-1-s-2", "stepDefinitionIds": ["sd-2"], "stepMatchArgumentsLists": [{"stepMatchArguments": []}]}, {"id": "tc-1-ts-3", "pickleStepId": "pk-1-s-3", "stepDefinitionIds": ["sd-3"], "stepMatchArgumentsLists": [{"stepMatchArguments": []}]}, {"id": "tc-1-ts-4", "pickleStepId": "pk-1-s-4", "stepDefinitionIds": ["sd-4"], "stepMatchArgumentsLists": [{"stepMatchArguments": []}]}, {"id": "tc-1-ts-5", "pickleStepId": "pk-1-s-5", "stepDefinitionIds": ["sd-5"], "stepMatchArgumentsLists": [{"stepMatchArguments": []}]}, {"id": "tc-1-ts-6", "pickleStepId": "pk-1-s-6", "stepDefinitionIds": ["sd-6"], "stepMatchArgumentsLists": [{"stepMatchArguments": []}]}, {"id": "tc-1-ts-7", "pickleStepId": "pk-1-s-7", "stepDefinitionIds": ["sd-7"], "stepMatchArgumentsLists": [{"stepMatchArguments": []}]}]}}
{"testCase": {"id": "tc-2", "pickleId": "pk-2", "testRunStartedId": "run-1", "testSteps": [{"id": "tc-2-ts-1", "pickleStepId": "pk-2-s-1", "stepDefinitionIds": ["sd-1"], "stepMatchArgumentsLists": [{"stepMatchArguments": []}]}, {"id": "tc-2-ts-2", "pickleStepId": "pk-2-s-2", "stepDefinitionIds": ["sd-2"], "stepMatchArgumentsLists": [{"stepMatchArguments": []}]}, {"id": "tc-2-ts-3", "pickleStepId": "pk-2-s-3", "stepDefinitionIds": ["sd-3"], "stepMatchArgumentsLists": [{"stepMatchArguments": []}]}, {"id": "tc-2-ts-4", "pickleStepId": "pk-2-s-4", "stepDefinitionIds": ["sd-4"], "stepMatchArgumentsLists": [{"stepMatchArguments": []}]}, {"id": "tc-2-ts-5", "pickleStepId": "pk-2-s-5", "stepDefinitionIds": ["sd-5"], "stepMatchArgumentsLists": [{"stepMatchArguments": []}]}]}}
{"testCase": {"id": "tc-3", "pickleId": "pk-3", "testRunStartedId": "run-1", "testSteps": [{"id": "tc-3-ts-1", "pickleStepId": "pk-3-s-1", "stepDefinitionIds": ["sd-1"], "stepMatchArgumentsLists": [{"stepMatchArguments": []}]}, {"id": "tc-3-ts-2", "pickleStepId": "pk-3-s-2", "stepDefinitionIds": ["sd-2"], "stepMatchArgumentsLists": [{"stepMatchArguments": []}]}, {"id": "tc-3-ts-3", "pickleStepId": "pk-3-s-3", "stepDefinitionIds": ["sd-3"], "stepMatchArgumentsLists": [{"stepMatchArguments": []}]}, {"id": "tc-3-ts-4", "pickleStepId": "pk-3-s-4", "stepDefinitionIds": ["sd-4"], "stepMatchArgumentsLists": [{"stepMatchArguments": []}]}, {"id": "tc-3-ts-5", "pickleStepId": "pk-3-s-5", "stepDefinitionIds": ["sd-5"], "stepMatchArgumentsLists": [{"stepMatchArguments": []}]}]}}
{"testCase": {"id": "tc-4", "pickleId": "pk-4", "testRunStartedId": "run-1", "testSteps": [{"id": "tc-4-ts-1", "pickleStepId": "pk-4-s-1", "stepDefinitionIds": ["sd-1"], "stepMatchArgumentsLists": [{"stepMatchArguments": []}]}, {"id": "tc-4-ts-2", "pickleStepId": "pk-4-s-2", "stepDefinitionIds": ["sd-2"], "stepMatchArgumentsLists": [{"stepMatchArguments": []}]}, {"id": "tc-4-ts-3", "pickleStepId": "pk-4-s-3", "stepDefinitionIds": ["sd-3"], "stepMatchArgumentsLists": [{"stepMatchArguments": []}]}, {"id": "tc-4-ts-4", "pickleStepId": "pk-4-s-4", "stepDefinitionIds": ["sd-4"], "stepMatchArgumentsLists": [{"stepMatchArguments": []}]}, {"id": "tc-4-ts-5", "pickleStepId": "pk-4-s-5", "stepDefinitionIds": ["sd-5"], "stepMatchArgumentsLists": [{"stepMatchArguments": []}]}]}}
{"testCase": {"id": "tc-5", "pickleId": "pk-5", "testRunStartedId": "run-1", "testSteps": [{"id": "tc-5-ts-1", "pickleStepId": "pk-5-s-1", "stepDefinitionIds": ["sd-1"], "stepMatchArgumentsLists": [{"stepMatchArguments": []}]}, {"id": "tc-5-ts-2", "pickleStepId": "pk-5-s-2", "stepDefinitionIds": ["sd-2"], "stepMatchArgumentsLists": [{"stepMatchArguments": []}]}, {"id": "tc-5-ts-3", "pickleStepId": "pk-5-s-3", "stepDefinitionIds": ["sd-3"], "stepMatchArgumentsLists": [{"stepMatchArguments": []}]}, {"id": "tc-5-ts-4", "pickleStepId": "pk-5-s-4", "stepDefinitionIds": ["sd-4"], "stepMatchArgumentsLists": [{"stepMatchArguments": []}]}, {"id": "tc-5-ts-5", "pickleStepId": "pk-5-s-5", "stepDefinitionIds": ["sd-5"], "stepMatchArgumentsLists": [{"stepMatchArguments": []}]}]}}
{"testCase": {"id": "tc-6", "pickleId": "pk-6", "testRunStartedId": "run-1", "testSteps": [{"id": "tc-6-ts-1", "pickleStepId": "pk-6-s-1", "stepDefinitionIds": ["sd-1"], "stepMatchArgumentsLists": [{"stepMatchArguments": []}]}, {"id": "tc-6-ts-2", "pickleStepId": "pk-6-s-2", "stepDefinitionIds": ["sd-2"], "stepMatchArgumentsLists": [{"stepMatchArguments": []}]}, {"id": "tc-6-ts-3", "pickleStepId": "pk-6-s-3", "stepDefinitionIds": ["sd-3"], "stepMatchArgumentsLists": [{"stepMatchArguments": []}]}, {"id": "tc-6-ts-4", "pickleStepId": "pk-6-s-4", "stepDefinitionIds": ["sd-4"], "stepMatchArgumentsLists": [{"stepMatchArguments": []}]}, {"id": "tc-6-ts-5", "pickleStepId": "pk-6-s-5", "stepDefinitionIds": ["sd-5"], "stepMatchArgumentsLists": [{"stepMatchArguments": []}]}]}}
{"testCaseStarted": {"id": "tcs-1", "testCaseId": "tc-1", "attempt": 0, "timestamp": {"seconds": 1786000402, "nanos": 0}}}
{"testStepStarted": {"testStepId": "tc-1-ts-1", "testCaseStartedId": "tcs-1", "timestamp": {"seconds": 1786000402, "nanos": 40000000}}}
{"testStepFinished": {"testStepId": "tc-1-ts-1", "testCaseStartedId": "tcs-1", "testStepResult": {"status": "PASSED", "duration": {"seconds": 0, "nanos": 39000000}}, "timestamp": {"seconds": 1786000402, "nanos": 45000000}}}
{"testStepStarted": {"testStepId": "tc-1-ts-2", "testCaseStartedId": "tcs-1", "timestamp": {"seconds": 1786000402, "nanos": 80000000}}}
{"testStepFinished": {"testStepId": "tc-1-ts-2", "testCaseStartedId": "tcs-1", "testStepResult": {"status": "PASSED", "duration": {"seconds": 0, "nanos": 40000000}}, "timestamp": {"seconds": 1786000402, "nanos": 90000000}}}
{"testStepStarted": {"testStepId": "tc-1-ts-3", "testCaseStartedId": "tcs-1", "timestamp": {"seconds": 1786000402, "nanos": 120000000}}}
{"testStepFinished": {"testStepId": "tc-1-ts-3", "testCaseStartedId": "tcs-1", "testStepResult": {"status": "PASSED", "duration": {"seconds": 0, "nanos": 41000000}}, "timestamp": {"seconds": 1786000402, "nanos": 135000000}}}
{"testStepStarted": {"testStepId": "tc-1-ts-4", "testCaseStartedId": "tcs-1", "timestamp": {"seconds": 1786000402, "nanos": 160000000}}}
{"testStepFinished": {"testStepId": "tc-1-ts-4", "testCaseStartedId": "tcs-1", "testStepResult": {"status": "PASSED", "duration": {"seconds": 0, "nanos": 42000000}}, "timestamp": {"seconds": 1786000402, "nanos": 180000000}}}
{"testStepStarted": {"testStepId": "tc-1-ts-5", "testCaseStartedId": "tcs-1", "timestamp": {"seconds": 1786000402, "nanos": 200000000}}}
{"testStepFinished": {"testStepId": "tc-1-ts-5", "testCaseStartedId": "tcs-1", "testStepResult": {"status": "PASSED", "duration": {"seconds": 0, "nanos": 43000000}}, "timestamp": {"seconds": 1786000402, "nanos": 225000000}}}
{"testStepStarted": {"testStepId": "tc-1-ts-6", "testCaseStartedId": "tcs-1", "timestamp": {"seconds": 1786000402, "nanos": 240000000}}}
{"testStepFinished": {"testStepId": "tc-1-ts-6", "testCaseStartedId": "tcs-1", "testStepResult": {"status": "PASSED", "duration": {"seconds": 0, "nanos": 44000000}}, "timestamp": {"seconds": 1786000402, "nanos": 270000000}}}
{"testStepStarted": {"testStepId": "tc-1-ts-7", "testCaseStartedId": "tcs-1", "timestamp": {"seconds": 1786000402, "nanos": 280000000}}}
{"testStepFinished": {"testStepId": "tc-1-ts-7", "testCaseStartedId": "tcs-1", "testStepResult": {"status": "PASSED", "duration": {"seconds": 0, "nanos": 45000000}}, "timestamp": {"seconds": 1786000402, "nanos": 315000000}}}
{"testCaseFinished": {"testCaseStartedId": "tcs-1", "willBeRetried": false, "timestamp": {"seconds": 1786000403, "nanos": 0}}}
{"testCaseStarted": {"id": "tcs-2", "testCaseId": "tc-2", "attempt": 0, "timestamp": {"seconds": 1786000404, "nanos": 0}}}
{"testStepStarted": {"testStepId": "tc-2-ts-1", "testCaseStartedId": "tcs-2", "timestamp": {"seconds": 1786000404, "nanos": 40000000}}}
{"testStepFinished": {"testStepId": "tc-2-ts-1", "testCaseStartedId": "tcs-2", "testStepResult": {"status": "PASSED", "duration": {"seconds": 0, "nanos": 39000000}}, "timestamp": {"seconds": 1786000404, "nanos": 45000000}}}
{"testStepStarted": {"testStepId": "tc-2-ts-2", "testCaseStartedId": "tcs-2", "timestamp": {"seconds": 1786000404, "nanos": 80000000}}}
{"testStepFinished": {"testStepId": "tc-2-ts-2", "testCaseStartedId": "tcs-2", "testStepResult": {"status": "PASSED", "duration": {"seconds": 0, "nanos": 40000000}}, "timestamp": {"seconds": 1786000404, "nanos": 90000000}}}
{"testStepStarted": {"testStepId": "tc-2-ts-3", "testCaseStartedId": "tcs-2", "timestamp": {"seconds": 1786000404, "nanos": 120000000}}}
{"testStepFinished": {"testStepId": "tc-2-ts-3", "testCaseStartedId": "tcs-2", "testStepResult": {"status": "PASSED", "duration": {"seconds": 0, "nanos": 41000000}}, "timestamp": {"seconds": 1786000404, "nanos": 135000000}}}
{"testStepStarted": {"testStepId": "tc-2-ts-4", "testCaseStartedId": "tcs-2", "timestamp": {"seconds": 1786000404, "nanos": 160000000}}}
{"testStepFinished": {"testStepId": "tc-2-ts-4", "testCaseStartedId": "tcs-2", "testStepResult": {"status": "PASSED", "duration": {"seconds": 0, "nanos": 42000000}}, "timestamp": {"seconds": 1786000404, "nanos": 180000000}}}
{"testStepStarted": {"testStepId": "tc-2-ts-5", "testCaseStartedId": "tcs-2", "timestamp": {"seconds": 1786000404, "nanos": 200000000}}}
{"testStepFinished": {"testStepId": "tc-2-ts-5", "testCaseStartedId": "tcs-2", "testStepResult": {"status": "PASSED", "duration": {"seconds": 0, "nanos": 43000000}}, "timestamp": {"seconds": 1786000404, "nanos": 225000000}}}
{"testCaseFinished": {"testCaseStartedId": "tcs-2", "willBeRetried": false, "timestamp": {"seconds": 1786000405, "nanos": 0}}}
{"testCaseStarted": {"id": "tcs-3", "testCaseId": "tc-3", "attempt": 0, "timestamp": {"seconds": 1786000406, "nanos": 0}}}
{"testStepStarted": {"testStepId": "tc-3-ts-1", "testCaseStartedId": "tcs-3", "timestamp": {"seconds": 1786000406, "nanos": 40000000}}}
{"testStepFinished": {"testStepId": "tc-3-ts-1", "testCaseStartedId": "tcs-3", "testStepResult": {"status": "PASSED", "duration": {"seconds": 0, "nanos": 39000000}}, "timestamp": {"seconds": 1786000406, "nanos": 45000000}}}
{"testStepStarted": {"testStepId": "tc-3-ts-2", "testCaseStartedId": "tcs-3", "timestamp": {"seconds": 1786000406, "nanos": 80000000}}}
{"testStepFinished": {"testStepId": "tc-3-ts-2", "testCaseStartedId": "tcs-3", "testStepResult": {"status": "PASSED", "duration": {"seconds": 0, "nanos": 40000000}}, "timestamp": {"seconds": 1786000406, "nanos": 90000000}}}
{"testStepStarted": {"testStepId": "tc-3-ts-3", "testCaseStartedId": "tcs-3", "timestamp": {"seconds": 1786000406, "nanos": 120000000}}}
94 lines total — download for the full file.

Specifications

Seed
61200
Encoding
UTF-8
Line Endings
LF
Protocol Version
24.0.0
Envelopes
93
Pickles
6
Test Cases
6
Step Results
32
All Passed
true
Serialisation
one JSON envelope per line (NDJSON, the cucumber-messages wire format)

Testing contract

Expected to pass
Scenario
Reduce a cucumber-messages stream to a per-scenario pass/fail summary.
Expected result
6 test cases and 32 step results are found, every status is PASSED, and testRunFinished reports success true.

What is a .ndjson file?

NDJSON (Newline-Delimited JSON) is a streaming format where each newline-separated line is a standalone JSON object, functionally equivalent to JSON Lines. It enables incremental processing of large datasets and streaming APIs. Each record is parsed independently of the rest.

How to use this file

Use an example NDJSON to test streaming ingestion, chunked HTTP or API response parsing, and tools that process records incrementally without loading the full file.

How to use this file for testing

“Cucumber Messages — Passing Checkout Run (NDJSON)” is a deterministic Novus Examples fixture for JSON parsing, Conversion testing, Schema validation. Flat, deeply nested, JSON Lines, and intentionally invalid JSON for testing parsers and error handling.

Documented properties for this file: seed 61200 · UTF-8 · LF. Compare results against paired or grouped companions on this page when present (clean↔damaged, searchable↔scanned, or format twins) so scores stay reproducible across runs.

Download the file once, keep the path stable in CI or local scripts, and treat the spec table as the contract: dimensions, seeds, field lists, and roles are intentional. Corrupt or invalid samples are labelled as such — expect parsers to fail loudly rather than silently accept them.

Test and coverage reports document their totals (suites, cases, passes, failures, skips, covered lines) in the spec table. Point your CI dashboard, coverage gate, or report converter at the file and assert those counts survive; format twins carry identical numbers so a conversion can be scored exactly.

Feed the file to your parser and assert it handles the documented quirks — quoted delimiters, embedded newlines, ragged rows, or invalid syntax; the valid↔invalid distinction is labelled in the title.

Code examples

import json

with open("checkout-messages.ndjson") as f:
    rows = [json.loads(line) for line in f if line.strip()]
print(len(rows))

Generated by generation/testing.py. Free for any use, no attribution required — license.