Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enable dynamic scenario naming #150

Open
wants to merge 2 commits into
base: develop
Choose a base branch
from

Conversation

radekvonboktor
Copy link

@radekvonboktor radekvonboktor commented Sep 5, 2023

This change allows us to use dynamic scenario naming.

Part of a fix for this issue #149

@Bam6ycha
Copy link
Contributor

Bam6ycha commented Sep 7, 2023

Hi, @radekvonboktor!
Thanks for your contribution!
We will review this PR as soon as we can!

@@ -210,7 +210,7 @@ module.exports = {
if (!this.isScenarioBasedStatistics) return;
}

const { name: scenarioName } = scenario;
const scenarioName = this.storage.getPickle(pickleId).name;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@radekvonboktor Hi, there!
gherkin creates ast.
And every AST node such as pickle in our case, associates with the scenario through ASTNodeID
I mean, that pickle and scenario are almost the same entities.
Screenshot 2023-09-27 at 12 18 04

And as I can see, dynamic scenario naming already works fine.
Maybe I missed something. Could you please provide an example, where the scenario naming does not contain the value of the variable?

@radekvonboktor
Copy link
Author

Hey @Bam6ycha. Will take a look at it as soon as possible. There is a huge possibility that in the context of our framework, we might be doing something different that causes the dynamic names not to work as expected, as we use a custom reporter to generate the cucumber-report.html.

So what I will do:

  • try to make the dynamic naming work
  • if that fails, I will provide more context on what fails with the cucumber html added here as well.

Thanks :)

@radekvonboktor
Copy link
Author

radekvonboktor commented Oct 12, 2023

Hey @Bam6ycha sorry for taking so long to get back to this, but you know how it is :)

So I've updated cucumber to version 9.6.0 and agent-js-cucumber to 5.2.2.

So by the looks of it, the js agent here, picks up the name from $.gherkinDocument..children[*].scenario..name variable. But our dynamic name is in the pickle object. You can see the whole object below.

{
   "gherkinDocument":{
      "feature":{
         "tags":[
            {
               "location":{
                  "line":1,
                  "column":1
               },
               "name":"@RPdebug",
               "id":"24d692eb-885a-4eaa-bc33-ecc95aa41f01"
            }
         ],
         "location":{
            "line":2,
            "column":1
         },
         "language":"en",
         "keyword":"Feature",
         "name":"Debug dynamic naming",
         "description":"",
         "children":[
            {
               "scenario":{
                  "id":"819345a2-e8a0-4fc3-9990-ea12c0a1acd5",
                  "tags":[
                     
                  ],
                  "location":{
                     "line":4,
                     "column":5
                  },
                  "keyword":"Scenario Outline",
                  "name":"[Single Market - <market>] Dynamic name",
                  "description":"",
                  "steps":[
                     {
                        "id":"164c7c6e-4234-4050-88b3-e595991b47bb",
                        "location":{
                           "line":5,
                           "column":9
                        },
                        "keyword":"Given ",
                        "keywordType":"Context",
                        "text":"wait for 2 seconds"
                     }
                  ],
                  "examples":[
                     {
                        "id":"91ab74e6-3afa-48e9-a739-28ede70c14a2",
                        "tags":[
                           
                        ],
                        "location":{
                           "line":7,
                           "column":9
                        },
                        "keyword":"Examples",
                        "name":"",
                        "description":"",
                        "tableHeader":{
                           "id":"12773396-f52c-4285-ab17-a17d6f34a571",
                           "location":{
                              "line":8,
                              "column":13
                           },
                           "cells":[
                              {
                                 "location":{
                                    "line":8,
                                    "column":15
                                 },
                                 "value":"market"
                              }
                           ]
                        },
                        "tableBody":[
                           {
                              "id":"d73b810b-0e3e-44c9-b6da-3f1c5b072729",
                              "location":{
                                 "line":9,
                                 "column":13
                              },
                              "cells":[
                                 {
                                    "location":{
                                       "line":9,
                                       "column":15
                                    },
                                    "value":"US"
                                 }
                              ]
                           }
                        ]
                     }
                  ]
               }
            }
         ]
      },
      "comments":[
         
      ],
      "uri":"features/scenarios/functionalities/baskets/RP_debug.feature"
   },
   "pickle":{
      "id":"30956257-bd48-4c62-8519-5e3abdc3ba22",
      "uri":"features/scenarios/functionalities/baskets/RP_debug.feature",
      "astNodeIds":[
         "819345a2-e8a0-4fc3-9990-ea12c0a1acd5",
         "d73b810b-0e3e-44c9-b6da-3f1c5b072729"
      ],
      "name":"[Single Market - US] Dynamic name",
      "language":"en",
      "steps":[
         {
            "id":"ecf07497-b5cb-4ee5-a8aa-deee34e3d653",
            "text":"wait for 2 seconds",
            "type":"Context",
            "astNodeIds":[
               "164c7c6e-4234-4050-88b3-e595991b47bb",
               "d73b810b-0e3e-44c9-b6da-3f1c5b072729"
            ]
         }
      ],
      "tags":[
         {
            "name":"@RPdebug",
            "astNodeId":"24d692eb-885a-4eaa-bc33-ecc95aa41f01"
         }
      ]
   },
   "testCaseStartedId":"1dca81c7-c1a2-461e-b2d3-c40524bf1d2a"
}

This is how it looks like in Report Portal:
image
image

For a bit more context, this is what the object looks like, from which the scenarioName gets declared in agent-js-cucumber:

    const { name: scenarioName } = scenario;
{
  id: '263aae5e-57f1-417a-9e33-0bf94f5afc7c',
  tags: [],
  location: { line: 4, column: 5 },
  keyword: 'Scenario Outline',
  name: '[Single Market - <market>] Dynamic name',
  description: '',
  steps: [
    {
      id: 'efa20d8e-5950-419e-aab8-d9ea2c1d4f4e',
      location: [Object],
      keyword: 'Given ',
      keywordType: 'Context',
      text: 'wait for 2 seconds',
      dataTable: undefined,
      docString: undefined
    }
  ],
  examples: [
    {
      id: 'b321ded0-64b6-497a-8b75-aa3f1a6f7507',
      tags: [],
      location: [Object],
      keyword: 'Examples',
      name: '',
      description: '',
      tableHeader: [Object],
      tableBody: [Array]
    }
  ]
}

That's why with my change, I want to pick the name of the currently executed scenario from the pickle object:

    const scenarioName = this.storage.getPickle(pickleId).name;

The pickle for that scenario looks like this:

{
  id: '1e21fa24-88c9-4b40-bdb0-f8f2fd83ee95',
  uri: 'features/scenarios/functionalities/baskets/RP_debug.feature',
  astNodeIds: [
    '382bdb9f-06c9-4180-85fc-d9ce345ef2c8',
    '9a83e3af-c184-4db8-9192-9396f6987ad9'
  ],
  name: '[Single Market - US] Dynamic name',
  language: 'en',
  steps: [
    {
      id: 'e162a895-5ac5-4261-863c-1a8fd63f10f5',
      text: 'wait for 2 seconds',
      type: 'Context',
      argument: undefined,
      astNodeIds: [Array]
    }
  ],
  tags: [
    {
      name: '@RPdebug',
      astNodeId: '6971f499-9f98-4dec-9269-3bfd385c576e'
    }
  ]
}

And here is the result in Report Portal:
image
image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants