Buffer in JS file isn't recognized (API tests automation with Karate Framework)

后端 未结 2 519
野趣味
野趣味 2021-01-25 18:46

We\'re automating our test with karate framework. In one of our features we need to decode a token and get a scope in the response. Everything works well, except this code in js

2条回答
  •  忘了有多久
    2021-01-25 19:16

    I was able to successfully base64Decode a JWT token payload to JSON using the following code without the need for a Java method:

      Background:
        * def parseJwt =
      """
      function(token) {
          var base64Url = token.split('.')[1];
          var base64Str = base64Url.replace(/-/g, '+').replace(/_/g, '/');
          var Base64 = Java.type('java.util.Base64');
          var decoded = Base64.getDecoder().decode(base64Str);
          var String = Java.type('java.lang.String')
          return new String(decoded)
      };
      """
    
      Scenario: JWT Token
        Given path  'jwt/authenticate'
        And header x-goog-authenticated-user-email = 'email'
        And request {}
        When method get
        Then status 200
        * json result = parseJwt(responseHeaders['Set-Cookie'][0])
        * match result == {permissions: [1,2,3], iss: "us", exp: "#number", email: "email"}
    

    Note: It does seem to be required to use json rather than def as Karate does better if it parses the string to json itself. Also, you may obtain the token from a header rather than a cookie as in this example if so, just change the responseHeader that you are looking for.

提交回复
热议问题