我有一个为测试API存储大的有效负载的问题。我找不到任何合理的方法来存储它们和覆盖值。有效载荷有200-300行。
有些值在这些有效载荷中是相同的(例如一个有效载荷中的5-7次),有些是恒定的,有些我必须在每次测试运行时更改。
目前我有payloads.py文件的变量如下
scenario_1={
"request1":{200-300 lines payload},
"request2":{200-300 lines payload}
scenario_2={
"request1":{200-300 lines payload},
"request2":{200-300 lines payload},
"request3":{200-300 lines payload}
etc
那么我就有了这样的函数:
def find_paths_with_value_and_replace(self, json, value_to_replace, replace_with):
if isinstance(json, dict):
for key, val in json.items():
if val == value_to_replace:
json[key] = replace_with
elif isinstance(val, (dict, list)):
self.find_paths_with_value_and_replace(val, value_to_replace, replace_with)
elif isinstance(json, list):
for item in json:
self.find_paths_with_value_and_replace(item, value_to_replace, replace_with)
return json
然后在测试中,我有prepare_test_data,其中我有值要替换,如{operation_id}
(payloads.py中的同名),并使用faker生成的id填充它们,并返回准备好的json用于测试。
我敢打赌有更好的方法来做到这一点,更容易,但是我找不到任何合理的方法来存储这些有效负载并用值更改一些键。
我最终在repo中拥有模板json文件,然后编辑我必须编辑的准备方法中的所有键,而不使用该函数。
prepare方法如下:
def prepare_something(val1,val2,val3):
path = os.path.join(str(Path(__file__).parent), 'payloads/something.json')
payload = helper.load_file_as_json(path))
payload['some_key'][0]['some_ke2y'] = val1
payload["some_key1"]["some_key2"] = val2
payload['some_key2'] = val3
payload['some_key3'] = helper.datetime_now('iso')
payload["some_key4"]["some_key2"] = val1
payload['some_key'][0]['some_key66'][0]['some_key']['some_key'] = val1
payload['some_key'][0]['some_key66'][0]['some_key']['some_key'] = val1
return payload