def _make_request_data(self, teststep_dict, entry_json): """ parse HAR entry request data, and make teststep request data Args: entry_json (dict): { "request": { "method": "POST", "postData": { "mimeType": "application/x-www-form-urlencoded; charset=utf-8", "params": [ {"name": "a", "value": 1}, {"name": "b", "value": "2"} } }, }, "response": {...} } Returns: { "request": { "method": "POST", "data": {"v": "1", "w": "2"} } } """ method = entry_json["request"].get("method") if method in ["POST", "PUT", "PATCH"]: postData = entry_json["request"].get("postData", {}) mimeType = postData.get("mimeType") # Note that text and params fields are mutually exclusive. if "text" in postData: post_data = postData.get("text") else: params = postData.get("params", []) post_data = utils.convert_list_to_dict(params) request_data_key = "data" if not mimeType: pass elif mimeType.startswith("application/json"): try: post_data = json.loads(post_data) request_data_key = "json" except JSONDecodeError: pass elif mimeType.startswith("application/x-www-form-urlencoded"): post_data = utils.convert_x_www_form_urlencoded_to_dict( post_data) else: # TODO: make compatible with more mimeType pass teststep_dict["request"][request_data_key] = post_data
def test_convert_x_www_form_urlencoded_to_dict(self): origin_str = "a=1&b=2" converted_dict = utils.convert_x_www_form_urlencoded_to_dict(origin_str) self.assertIsInstance(converted_dict, dict) self.assertEqual(converted_dict["a"], "1") self.assertEqual(converted_dict["b"], "2")