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

assert inline multiline response #50

Open
staabm opened this issue Dec 6, 2019 · 2 comments
Open

assert inline multiline response #50

staabm opened this issue Dec 6, 2019 · 2 comments

Comments

@staabm
Copy link

staabm commented Dec 6, 2019

the docs at https://blackfire.io/docs/player/index#visiting-a-page-with-visit mention a request notation using a long inline string:

scenario
    visit url('/login')
        method 'POST'
        body
        """
        {
            "user": "john",
            "password": "doe"
        }
        """

we tried using the very same notation for asserting the response body, but were not able to get a result without a syntax error within the config file.

could you describe a small example on how to expect body() using a long multiline response body string?

we tried things like

scenario
    visit url('/login')
        method 'POST'
        body
        """
        {
            "user": "john",
            "password": "doe"
        }
        """
        expect status_code() == 200
        expect body
        """
        {
            "status": "success"
        }
        """

and also tried

scenario
    visit url('/login')
        method 'POST'
        body
        """
        {
            "user": "john",
            "password": "doe"
        }
        """
        expect status_code() == 200
        expect body()
        """
        {
            "status": "success"
        }
        """

.. both dont work

@staabm
Copy link
Author

staabm commented Dec 6, 2019

it seems

scenario
    visit url('/login')
        method 'POST'
        body
        """
        {
            "user": "john",
            "password": "doe"
        }
        """
        expect status_code() == 200
        expect body() matches
        """
        <?xml version="1.0"?>
		<response>
			<success>true</success>
		</response>
        """

does work.. maybe this should be noted in a example somewhere.

my actual use-case is to assert the wohle response against a string 1:1.
the player tells me that the repsonse doesnt match, but since in my example I have a much longer string to test against its pretty unclear where the diff is.

DX wise something like a unified diff would be helpfull

@staabm
Copy link
Author

staabm commented Dec 6, 2019

for the full picture please see:

name "A build made of scenario"

# Default endpoint
# Can be override with option "--endpoint=http://newendpoint.com"
endpoint "https://example.com"

scenario
    name "Scenario Name"

    visit url('/my/url/')
        method 'POST'
        header "Content-Type: text/xml; charset=utf-8"
        header "Accept: application/xml"
        body
        """
        <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <uni_request>
            <currency>SEK</currency>
            <customer>
                <business_party_id>30111</business_party_id>
                <business_party_type>DEALER</business_party_type>
            </customer>
            <articles>
                <article>
                    <article_name>8009</article_name>
                    <quantity_total>30</quantity_total>
                    <skus>
                        <sku>
                            <!-- 8009 - black - S -->
                            <skuid>102818</skuid>
                            <quantity>10</quantity>
                        </sku>
                        <sku>
                            <!-- 8009 - brown - M -->
                            <skuid>102829</skuid>
                            <quantity>10</quantity>
                        </sku>
                        <sku>
                            <!-- 8009 - cobalt - XL -->
                            <skuid>102841</skuid>
                            <quantity>10</quantity>
                        </sku>
                    </skus>
                </article>
                <article>
                    <article_name>8010</article_name>
                    <quantity_total>150</quantity_total>
                    <skus>
                        <sku>
                            <!-- 8010 - black-heather - XL -->
                            <skuid>102941</skuid>
                            <quantity>50</quantity>
                        </sku>
                        <sku>
                            <!-- 8010 - fern-green - M -->
                            <skuid>102964</skuid>
                            <quantity>70</quantity>
                        </sku>
                        <sku>
                            <!-- 8010 - light-yellow - S -->
                            <skuid>102988</skuid>
                            <quantity>30</quantity>
                        </sku>
                    </skus>
                </article>
            </articles>
        </uni_request>
        """
        expect status_code() == 200
        expect body() ==
        """
        <?xml version="1.0"?>
        <response>
         <currency>SEK</currency>
         <articles>
          <article xmlns="">
           <article_name xmlns="">8009</article_name>
           <quantity_total xmlns="">30</quantity_total>
           <skus xmlns="">
            <sku xmlns="">
             <skuid xmlns="">102818</skuid>
             <quantity xmlns="">10</quantity>
             <preis xmlns="">57.20</preis>
             <preis_eur xmlns="">5.20</preis_eur>
            </sku>
            <sku xmlns="">
             <skuid xmlns="">102829</skuid>
             <quantity xmlns="">10</quantity>
             <preis xmlns="">57.20</preis>
             <preis_eur xmlns="">5.20</preis_eur>
            </sku>
            <sku xmlns="">
             <skuid xmlns="">102841</skuid>
             <quantity xmlns="">10</quantity>
             <preis xmlns="">57.20</preis>
             <preis_eur xmlns="">5.20</preis_eur>
            </sku>
           </skus>
          </article>
          <article xmlns="">
           <article_name xmlns="">8010</article_name>
           <quantity_total xmlns="">150</quantity_total>
           <skus xmlns="">
            <sku xmlns="">
             <skuid xmlns="">102941</skuid>
             <quantity xmlns="">50</quantity>
             <preis xmlns="">57.20</preis>
             <preis_eur xmlns="">5.20</preis_eur>
            </sku>
            <sku xmlns="">
             <skuid xmlns="">102964</skuid>
             <quantity xmlns="">70</quantity>
             <preis xmlns="">57.20</preis>
             <preis_eur xmlns="">5.20</preis_eur>
            </sku>
            <sku xmlns="">
             <skuid xmlns="">102988</skuid>
             <quantity xmlns="">30</quantity>
             <preis xmlns="">57.20</preis>
             <preis_eur xmlns="">5.20</preis_eur>
            </sku>
           </skus>
          </article>
         </articles>
         <timestamp>1575621303</timestamp>
         <success>true</success>
        </response>
        """

and the blackfire run results in

tests/rest$ blackfire-player run scenario.bkf --ssl-no-verify --json
Blackfire Player

Scenario  "Scenario Name"
  Failure on step defined in scenario.bkf at line  10
  └ Expectation "body() == '<?xml version="1.0"?>\n<response>\n <currency>SEK</currency>\n <articles>\n  <article xmlns="">\n   <article_name xmlns="">8009</article_name>\n   <quantity_total xmlns="">30</quantity_total>\n   <skus xmlns="">\n    <sku xmlns="">\n     <skuid xmlns="">102818</skuid>\n     <quantity xmlns="">10</quantity>\n     <preis xmlns="">57.20</preis>\n     <preis_eur xmlns="">5.20</preis_eur>\n    </sku>\n    <sku xmlns="">\n     <skuid xmlns="">102829</skuid>\n     <quantity xmlns="">10</quantity>\n     <preis xmlns="">57.20</preis>\n     <preis_eur xmlns="">5.20</preis_eur>\n    </sku>\n    <sku xmlns="">\n     <skuid xmlns="">102841</skuid>\n     <quantity xmlns="">10</quantity>\n     <preis xmlns="">57.20</preis>\n     <preis_eur xmlns="">5.20</preis_eur>\n    </sku>\n   </skus>\n  </article>\n  <article xmlns="">\n   <article_name xmlns="">8010</article_name>\n   <quantity_total xmlns="">150</quantity_total>\n   <skus xmlns="">\n    <sku xmlns="">\n     <skuid xmlns="">102941</skuid>\n     <quantity xmlns="">50</quantity>\n     <preis xmlns="">57.20</preis>\n     <preis_eur xmlns="">5.20</preis_eur>\n    </sku>\n    <sku xmlns="">\n     <skuid xmlns="">102964</skuid>\n     <quantity xmlns="">70</quantity>\n     <preis xmlns="">57.20</preis>\n     <preis_eur xmlns="">5.20</preis_eur>\n    </sku>\n    <sku xmlns="">\n     <skuid xmlns="">102988</skuid>\n     <quantity xmlns="">30</quantity>\n     <preis xmlns="">57.20</preis>\n     <preis_eur xmlns="">5.20</preis_eur>\n    </sku>\n   </skus>\n  </article>\n </articles>\n <timestamp>1575621303</timestamp>\n true\n</response>'" failed.
    └ body() = "<?xml version=\"1.0\"?>
<response>
 <currency>SEK</currency>
 <articles>
  <article xmlns=\"\">
   <article_name xmlns=\"\">8009</article_name>
   <quantity_total xmlns=\"\">30</quantity_total>
   <skus xmlns=\"\">
    <sku xmlns=\"\">
     <skuid xmlns=\"\">102818</skuid>
     <quantity xmlns=\"\">10</quantity>
     <preis xmlns=\"\">57.20</preis>
     <preis_eur xmlns=\"\">5.20</preis_eur>
    </sku>
    <sku xmlns=\"\">
     <skuid xmlns=\"\">102829</skuid>
     <quantity xmlns=\"\">10</quantity>
     <preis xmlns=\"\">57.20</preis>
     <preis_eur xmlns=\"\">5.20</preis_eur>
    </sku>
    <sku xmlns=\"\">
     <skuid xmlns=\"\">102841</skuid>
     <quantity xmlns=\"\">10</quantity>
     <preis xmlns=\"\">57.20</preis>
     <preis_eur xmlns=\"\">5.20</preis_eur>
    </sku>
   </skus>
  </article>
  <article xmlns=\"\">
   <article_name xmlns=\"\">8010</article_name>
   <quantity_total xmlns=\"\">150</quantity_total>
   <skus xmlns=\"\">
    <sku xmlns=\"\">
     <skuid xmlns=\"\">102941</skuid>
     <quantity xmlns=\"\">50</quantity>
     <preis xmlns=\"\">57.20</preis>
     <preis_eur xmlns=\"\">5.20</preis_eur>
    </sku>
    <sku xmlns=\"\">
     <skuid xmlns=\"\">102964</skuid>
     <quantity xmlns=\"\">70</quantity>
     <preis xmlns=\"\">57.20</preis>
     <preis_eur xmlns=\"\">5.20</preis_eur>
    </sku>
    <sku xmlns=\"\">
     <skuid xmlns=\"\">102988</skuid>
     <quantity xmlns=\"\">30</quantity>
     <preis xmlns=\"\">57.20</preis>
     <preis_eur xmlns=\"\">5.20</preis_eur>
    </sku>
   </skus>
  </article>
 </articles>
 <timestamp>1575623832</timestamp>
 true
</response>
"

 KO  Scenarios  1  - Steps  1  - Failures  1
{
    "name": "\"A build made of scenario\"",
    "results": [
        {
            "scenario": "\"Scenario Name\"",
            "values": [],
            "error": {
                "message": "Expectation \"body() == '<?xml version=\"1.0\"?>\\n<response>\\n <currency>SEK</currency>\\n <articles>\\n  <article xmlns=\"\">\\n   <article_name xmlns=\"\">8009</article_name>\\n   <quantity_total xmlns=\"\">30</quantity_total>\\n   <skus xmlns=\"\">\\n    <sku xmlns=\"\">\\n     <skuid xmlns=\"\">102818</skuid>\\n     <quantity xmlns=\"\">10</quantity>\\n     <preis xmlns=\"\">57.20</preis>\\n     <preis_eur xmlns=\"\">5.20</preis_eur>\\n    </sku>\\n    <sku xmlns=\"\">\\n     <skuid xmlns=\"\">102829</skuid>\\n     <quantity xmlns=\"\">10</quantity>\\n     <preis xmlns=\"\">57.20</preis>\\n     <preis_eur xmlns=\"\">5.20</preis_eur>\\n    </sku>\\n    <sku xmlns=\"\">\\n     <skuid xmlns=\"\">102841</skuid>\\n     <quantity xmlns=\"\">10</quantity>\\n     <preis xmlns=\"\">57.20</preis>\\n     <preis_eur xmlns=\"\">5.20</preis_eur>\\n    </sku>\\n   </skus>\\n  </article>\\n  <article xmlns=\"\">\\n   <article_name xmlns=\"\">8010</article_name>\\n   <quantity_total xmlns=\"\">150</quantity_total>\\n   <skus xmlns=\"\">\\n    <sku xmlns=\"\">\\n     <skuid xmlns=\"\">102941</skuid>\\n     <quantity xmlns=\"\">50</quantity>\\n     <preis xmlns=\"\">57.20</preis>\\n     <preis_eur xmlns=\"\">5.20</preis_eur>\\n    </sku>\\n    <sku xmlns=\"\">\\n     <skuid xmlns=\"\">102964</skuid>\\n     <quantity xmlns=\"\">70</quantity>\\n     <preis xmlns=\"\">57.20</preis>\\n     <preis_eur xmlns=\"\">5.20</preis_eur>\\n    </sku>\\n    <sku xmlns=\"\">\\n     <skuid xmlns=\"\">102988</skuid>\\n     <quantity xmlns=\"\">30</quantity>\\n     <preis xmlns=\"\">57.20</preis>\\n     <preis_eur xmlns=\"\">5.20</preis_eur>\\n    </sku>\\n   </skus>\\n  </article>\\n </articles>\\n <timestamp>1575621303</timestamp>\\n true\\n</response>'\" failed.",
                "code": 0
            }
        }
    ],
    "message": "Some expectation failed",
    "code": 64,
    "success": true,
    "input": {
        "path": "scenario.bkf",
        "content": "name \"A build made of scenario\"\n\n# Default endpoint\n# Can be override with option \"--endpoint=http://newendpoint.com\"\nendpoint \"https://example.com/\"\n\nscenario\n    name \"Scenario Name\"\n\n    visit url('/uni/post/')\n        method 'POST'\n        header \"Content-Type: text/xml; charset=utf-8\"\n        header \"Accept: application/xml\"\n        body\n        \"\"\"\n        <?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n        <uni_request>\n            <currency>SEK</currency>\n            <customer>\n                <business_party_id>30111</business_party_id>\n                <business_party_type>DEALER</business_party_type>\n            </customer>\n            <articles>\n                <article>\n                    <article_name>8009</article_name>\n                    <quantity_total>30</quantity_total>\n                    <skus>\n                        <sku>\n                            <!-- 8009 - black - S -->\n                            <skuid>102818</skuid>\n                            <quantity>10</quantity>\n                        </sku>\n                        <sku>\n                            <!-- 8009 - brown - M -->\n                            <skuid>102829</skuid>\n                            <quantity>10</quantity>\n                        </sku>\n                        <sku>\n                            <!-- 8009 - cobalt - XL -->\n                            <skuid>102841</skuid>\n                            <quantity>10</quantity>\n                        </sku>\n                    </skus>\n                </article>\n                <article>\n                    <article_name>8010</article_name>\n                    <quantity_total>150</quantity_total>\n                    <skus>\n                        <sku>\n                            <!-- 8010 - black-heather - XL -->\n                            <skuid>102941</skuid>\n                            <quantity>50</quantity>\n                        </sku>\n                        <sku>\n                            <!-- 8010 - fern-green - M -->\n                            <skuid>102964</skuid>\n                            <quantity>70</quantity>\n                        </sku>\n                        <sku>\n                            <!-- 8010 - light-yellow - S -->\n                            <skuid>102988</skuid>\n                            <quantity>30</quantity>\n                        </sku>\n                    </skus>\n                </article>\n            </articles>\n        </uni_request>\n        \"\"\"\n        expect status_code() == 200\n        expect body() ==\n        \"\"\"\n        <?xml version=\"1.0\"?>\n        <response>\n         <currency>SEK</currency>\n         <articles>\n          <article xmlns=\"\">\n           <article_name xmlns=\"\">8009</article_name>\n           <quantity_total xmlns=\"\">30</quantity_total>\n           <skus xmlns=\"\">\n            <sku xmlns=\"\">\n             <skuid xmlns=\"\">102818</skuid>\n             <quantity xmlns=\"\">10</quantity>\n             <preis xmlns=\"\">57.20</preis>\n             <preis_eur xmlns=\"\">5.20</preis_eur>\n            </sku>\n            <sku xmlns=\"\">\n             <skuid xmlns=\"\">102829</skuid>\n             <quantity xmlns=\"\">10</quantity>\n             <preis xmlns=\"\">57.20</preis>\n             <preis_eur xmlns=\"\">5.20</preis_eur>\n            </sku>\n            <sku xmlns=\"\">\n             <skuid xmlns=\"\">102841</skuid>\n             <quantity xmlns=\"\">10</quantity>\n             <preis xmlns=\"\">57.20</preis>\n             <preis_eur xmlns=\"\">5.20</preis_eur>\n            </sku>\n           </skus>\n          </article>\n          <article xmlns=\"\">\n           <article_name xmlns=\"\">8010</article_name>\n           <quantity_total xmlns=\"\">150</quantity_total>\n           <skus xmlns=\"\">\n            <sku xmlns=\"\">\n             <skuid xmlns=\"\">102941</skuid>\n             <quantity xmlns=\"\">50</quantity>\n             <preis xmlns=\"\">57.20</preis>\n             <preis_eur xmlns=\"\">5.20</preis_eur>\n            </sku>\n            <sku xmlns=\"\">\n             <skuid xmlns=\"\">102964</skuid>\n             <quantity xmlns=\"\">70</quantity>\n             <preis xmlns=\"\">57.20</preis>\n             <preis_eur xmlns=\"\">5.20</preis_eur>\n            </sku>\n            <sku xmlns=\"\">\n             <skuid xmlns=\"\">102988</skuid>\n             <quantity xmlns=\"\">30</quantity>\n             <preis xmlns=\"\">57.20</preis>\n             <preis_eur xmlns=\"\">5.20</preis_eur>\n            </sku>\n           </skus>\n          </article>\n         </articles>\n         <timestamp>1575621303</timestamp>\n         true\n        </response>\n        \"\"\"\n"
    }
}

it feels pretty hard to tell where the difference between expected and actual response is and also how to properly read the overall output, because of the huge payloads contained.

also it seems there might be a problem regarding escaping newlines and/or escaping of double quotes, maybe also indent spacing. we cannot tell for sure, because we can't figured it out based on our tests or the testoutput.

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

No branches or pull requests

1 participant