Best Python code snippet using tavern
response.py
Source:response.py  
...50        try:51            log_dict_block(response.json(), "Body")52        except ValueError:53            pass54        redirect_query_params = self._get_redirect_query_params(response)55        if redirect_query_params:56            parsed_url = urlparse(response.headers["location"])57            to_path = "{0}://{1}{2}".format(*parsed_url)58            logger.debug("Redirect location: %s", to_path)59            log_dict_block(redirect_query_params, "Redirect URL query parameters")60    def _get_redirect_query_params(self, response):61        """If there was a redirect header, get any query parameters from it"""62        try:63            redirect_url = response.headers["location"]64        except KeyError as e:65            if "redirect_query_params" in self.expected.get("save", {}):66                self._adderr(67                    "Wanted to save %s, but there was no redirect url in response",68                    self.expected["save"]["redirect_query_params"],69                    e=e,70                )71            redirect_query_params = {}72        else:73            parsed = urlparse(redirect_url)74            qp = parsed.query75            redirect_query_params = {i: j[0] for i, j in parse_qs(qp).items()}76        return redirect_query_params77    def _check_status_code(self, status_code, body):78        expected_code = self.expected["status_code"]79        if (isinstance(expected_code, int) and status_code == expected_code) or (80            isinstance(expected_code, list) and (status_code in expected_code)81        ):82            logger.debug(83                "Status code '%s' matched expected '%s'", status_code, expected_code84            )85            return86        else:87            if 400 <= status_code < 500:88                # special case if there was a bad request. This assumes that the89                # response would contain some kind of information as to why this90                # request was rejected.91                self._adderr(92                    "Status code was %s, expected %s:\n%s",93                    status_code,94                    expected_code,95                    indent_err_text(json.dumps(body)),96                )97            else:98                self._adderr(99                    "Status code was %s, expected %s", status_code, expected_code100                )101    def verify(self, response):102        """Verify response against expected values and returns any values that103        we wanted to save for use in future requests104        There are various ways to 'validate' a block - a specific function, just105        matching values, validating a schema, etc...106        Args:107            response (requests.Response): response object108        Returns:109            dict: Any saved values110        Raises:111            TestFailError: Something went wrong with validating the response112        """113        self._verbose_log_response(response)114        call_hook(115            self.test_block_config,116            "pytest_tavern_beta_after_every_response",117            expected=self.expected,118            response=response,119        )120        self.response = response121        self.status_code = response.status_code122        # Get things to use from the response123        try:124            body = response.json()125        except ValueError:126            body = None127        redirect_query_params = self._get_redirect_query_params(response)128        # Run validation on response129        self._check_status_code(response.status_code, body)130        self._validate_block("json", body)131        self._validate_block("headers", response.headers)132        self._validate_block("redirect_query_params", redirect_query_params)133        attach_yaml(134            {135                "status_code": response.status_code,136                "headers": dict(response.headers),137                "body": body,138                "redirect_query_params": redirect_query_params,139            },140            name="rest_response",141        )...Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
