#json #python-3.x #pytest
Вопрос:
Я использую pytest для написания своих тестов. В рамках теста мне нужно передать случайное число в запросе API и отправить запрос, который я могу. Следующим шагом является доступ к выше сгенерированным случайным числам и доступ в другой функции. Я могу получить доступ к случайным числам, сгенерированным в другой функции, когда в файле json есть только один набор запросов.
Прикрепление кода
import json import requests import pytest import string import random @pytest.fixture def order_data(): with open ("order_data.json", encoding='utf-8-sig') as order_json : return json.load(order_json) def test_api(order_data) : for payload in order_data : test_api.expected_accountID = payload[ "Payload" ][ "accountNumber" ] = ''.join ( random.choices ( string.ascii_letters string.digits, k=length ) ) test_api.expected_orderno = payload[ "Payload" ][ "orderno" ] = ''.join ( random.choices ( string.ascii_letters string.digits, k=length ) ) request_body = json.dumps(payload) # json.dumps command converts request into json format print ( "Request body:", request_body ) # send request response = requests.post ( url, request_body, headers=headers ) print("***accountID captured from request api***", test_api.expected_accountID) print("***accountID captured from request api***", test_api.expected_orderno) def test_name(order_data): for accountId in order_data: print ( "***accountID in test_name***", test_api.expected_accountID) print("***orderno in test_name***", test_api.expected_orderno) Data in order data json file [ {"Payload":{ "accountNumber": "", "ProductId": 1, "Price": 102.00, "Orderno": "", "SKU": 342 } } ]
код работает нормально, так как файл json содержит только один набор запросов/полезной нагрузки. Это не сработает, если я добавлю еще один запрос в файл json. Есть идеи, как прочитать случайные числа, если файл json содержит следующие данные ?
[ {"Payload":{ "accountNumber": "", "ProductId": 1, "Price": 102.00, "Orderno": "", "SKU": 342 } }, {"Payload":{ "accountNumber": "", "ProductId": 1, "Price": 102.00, "Orderno": "", "SKU": 2524 } } ]