Store Response from test_component_approval_request and Use in Another Test Case
Description:
We need to store the component_id from the response of the test_component_approval_request test case and use it as an input in another test case within our Pytest framework.
Project/
│
├── test_cases/
│ │── test.component_approval.py
│ ├── conftest.py
Files:
- conftest.py:
import os
import pytest
import random
import string
import json
import fossidsdk
class Inputs:
Input parameters ...
component_id = ""
- test.component_approval.py:
import pytest
from . import custom_assertions
GROUP = 'component_approval'
def test_component_approval_request(api, test_inputs):
code, res = api.component_approval.test_component_approval_request(test_inputs.parameters)
print("Response:", res)
assert code == 200
assert isinstance(res, dict)
print(res)
assert res["status"] == '1'
component_id = res["data"][0]
print(f"Component ID set to: {component_id}")
Response from test_component_approval_request:
{
'operation': 'test_component_approval_request',
'status': '1',
'data': [1531],
'message': '1 approval requests have been created'
}
- second test case:
def test_approve_request(api, test_inputs):
code, res = api.component_approval.approve_request(test_inputs.paramaetes, component_id)
assert code == 200
assert isinstance(res, dict)
print(res)
assert res["status"] == '1'
Requirement:
- Store the component_id from the response of test_component_approval_request.
- Retrieve and use this component_id as an input in another test case (test_approve_request).
1
It’s generally a bad idea to mutate global state, as then your second test will fail if the first test has not been run.
I would use a module or session scope fixture to create a suitable pre-condition for the two tests – that there is a valid response from test_component_approval_request
– and have the first test simply assert what it does about the format of that response, whereas the second does something with the response.
This is ok for automating idempotent integration tests, but for more complicated scenarios you want to script more of the set-up and tear-down in each test.
conftest
@pytest.fixture(scope="session")
def component_approval_request(api, test_inputs):
return api.component_approval.test_component_approval_request(
test_inputs.parameters
)
first test case
def test_component_approval_request(component_approval_request):
code, res = component_approval_request
print("Response:", res)
assert code == 200
assert isinstance(res, dict)
print(res)
assert res["status"] == "1"
component_id = res["data"][0]
print(f"Component ID set to: {component_id}")
second test case
def test_approve_request(api, test_inputs, component_approval_request):
code, res = component_approval_request
component_id = res["data"][0]
code, res = api.component_approval.approve_request(
test_inputs.parameters, component_id
)
assert code == 200
assert isinstance(res, dict)
print(res)
assert res["status"] == "1"