code cleanup for pylint
This commit is contained in:
parent
c6a87dff12
commit
a727c58cf3
15
README.md
15
README.md
@ -1,27 +1,35 @@
|
||||
# pytest-api
|
||||
|
||||
This is a proof-of-concept project, showing how PyTest could be used in combination with a custom API client, to quickly and easily build api tests for a data-delivery service that is deployed and active on an existing environment.
|
||||
This is a proof-of-concept project, showing how PyTest could be used in combination with a custom API client, to quickly
|
||||
and easily build api tests for a data-delivery service that is deployed and active on an existing environment.
|
||||
|
||||
## Instructions
|
||||
|
||||
1. Add a `.env` file to your local copy of the repo. By default, this demo project will look for `.env.qa` in the root of the project. You can find a template to base this on, in `apiclient/env_template`. Info on how to set the values in that file can be found by asking Greg.
|
||||
1. Add a `.env` file to your local copy of the repo. By default, this demo project will look for `.env.qa` in the root
|
||||
of the project. You can find a template to base this on, in `apiclient/env_template`. Info on how to set the values
|
||||
in that file can be found by asking Greg.
|
||||
|
||||
|
||||
2. Create your virtual env:
|
||||
|
||||
```shell
|
||||
python3 -m venv venv
|
||||
```
|
||||
|
||||
3. Activate the environment:
|
||||
|
||||
```shell
|
||||
source venv/bin/activate
|
||||
```
|
||||
|
||||
On Windows:
|
||||
|
||||
```shell
|
||||
.\venv\Scripts\activate
|
||||
```
|
||||
|
||||
4. Install requirements (pip will come from your venv)
|
||||
|
||||
```shell
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
@ -70,7 +78,8 @@ PASSED tests/test_datadelivery.py::test_datadelivery_redaction_type_get
|
||||
================================================================================================== 5 passed, 5 warnings in 17.20s ===================================================================================================
|
||||
```
|
||||
|
||||
PyTest is configured to show the top 25 test durations, as well as the pass/fail status of all the tests. The tests have been marked with various tags, to allow for granular test selection. To see all the available markers:
|
||||
PyTest is configured to show the top 25 test durations, as well as the pass/fail status of all the tests. The tests have
|
||||
been marked with various tags, to allow for granular test selection. To see all the available markers:
|
||||
|
||||
```
|
||||
(.venv) PS C:\Users\GregGauthier\Projects\local\pytest-api> pytest --markers
|
||||
|
@ -6,7 +6,6 @@ from requests_oauthlib import OAuth2Session
|
||||
|
||||
|
||||
def api_client(call_dict, verify_cert=False, oauth=False):
|
||||
|
||||
method = call_dict["method"]
|
||||
url = call_dict["url"]
|
||||
headers = call_dict["headers"]
|
||||
@ -35,10 +34,9 @@ def api_client(call_dict, verify_cert=False, oauth=False):
|
||||
except RequestException as e:
|
||||
print(f"Request failed. Method: {method}, URL: {url}", file=sys.stderr)
|
||||
print(f"Error details: {str(e)}", file=sys.stderr)
|
||||
exit(e.response.status_code)
|
||||
sys.exit(e.response.status_code)
|
||||
|
||||
if response.status_code == 200:
|
||||
return response.json()
|
||||
else:
|
||||
return response.status_code, response.reason
|
||||
|
||||
return response.status_code, response.reason
|
||||
|
@ -1,7 +1,7 @@
|
||||
import os
|
||||
from dotenv import dotenv_values
|
||||
from types import MappingProxyType
|
||||
|
||||
from dotenv import dotenv_values
|
||||
|
||||
PROJECT_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
|
||||
|
@ -1,8 +1,8 @@
|
||||
import json
|
||||
from apiclient.config import get_cfg
|
||||
from apiclient.client import api_client
|
||||
from apiclient.oauth_helper import get_legacy_token
|
||||
|
||||
from apiclient.client import api_client
|
||||
from apiclient.config import get_cfg
|
||||
from apiclient.oauth_helper import get_legacy_token
|
||||
|
||||
ENV = 'qa'
|
||||
cfg = get_cfg(ENV)
|
||||
|
@ -1,7 +1,9 @@
|
||||
import sys
|
||||
|
||||
from oauthlib.oauth2 import LegacyApplicationClient, OAuth2Error
|
||||
from requests_oauthlib import OAuth2Session
|
||||
|
||||
from apiclient.config import get_cfg
|
||||
import sys
|
||||
|
||||
|
||||
def get_legacy_token(env):
|
||||
@ -22,6 +24,6 @@ def get_legacy_token(env):
|
||||
)
|
||||
except OAuth2Error as e:
|
||||
print("OAuth2 Error: ", str(e), file=sys.stderr)
|
||||
exit(e.status_code)
|
||||
sys.exit(e.status_code)
|
||||
|
||||
return token
|
||||
|
@ -3,3 +3,4 @@ requests~=2.32.3
|
||||
requests-oauthlib~=2.0.0
|
||||
python-dotenv~=1.0.1
|
||||
pytest~=8.2.2
|
||||
pylint~=3.2.6
|
@ -17,4 +17,3 @@ def reset_oauth_session():
|
||||
oauth_session.cookies.clear()
|
||||
yield oauth_session
|
||||
oauth_session.close()
|
||||
|
||||
|
@ -1,15 +1,13 @@
|
||||
import os
|
||||
import json
|
||||
|
||||
import os
|
||||
|
||||
CWD = os.path.dirname(os.path.realpath(__file__))
|
||||
|
||||
|
||||
####
|
||||
# HELPERS
|
||||
####
|
||||
def get_expected_response(test_name):
|
||||
def get_expected_response(pkg, test_name):
|
||||
expected_response_file = test_name + ".json"
|
||||
with open(os.path.join(CWD, 'expected_responses', expected_response_file), 'r') as file:
|
||||
with open(
|
||||
os.path.join(CWD, pkg, 'expected_responses', expected_response_file),
|
||||
'r', encoding="utf8") as file:
|
||||
expected_response = json.load(file)
|
||||
return expected_response
|
@ -1,8 +1,9 @@
|
||||
# pylint: disable=line-too-long,unused-argument
|
||||
import pytest
|
||||
|
||||
from apiclient.config import get_cfg
|
||||
from apiclient.oauth_helper import get_legacy_token
|
||||
|
||||
|
||||
ENV = 'qa'
|
||||
CFG = get_cfg(ENV, force_refresh=True)
|
||||
application_json = {'Content-Type': 'application/json'}
|
||||
|
@ -1,8 +1,12 @@
|
||||
import json
|
||||
import pytest
|
||||
from apiclient.client import api_client
|
||||
from tests.oauth_service.helpers import get_expected_response
|
||||
|
||||
import pytest
|
||||
|
||||
from apiclient.client import api_client
|
||||
from tests.helpers import get_expected_response
|
||||
|
||||
|
||||
pkg_name = __package__.split('.')[1]
|
||||
|
||||
####
|
||||
# NOTE:
|
||||
@ -13,7 +17,7 @@ from tests.oauth_service.helpers import get_expected_response
|
||||
@pytest.mark.get
|
||||
@pytest.mark.role
|
||||
def test_datadelivery_role_get(request, role_get_call):
|
||||
expected_response = get_expected_response(request.node.name)
|
||||
expected_response = get_expected_response(pkg_name, request.node.name)
|
||||
actual_response = api_client(role_get_call, oauth=True)
|
||||
assert json.dumps(actual_response, indent=4) == json.dumps(expected_response, indent=4)
|
||||
|
||||
@ -21,7 +25,7 @@ def test_datadelivery_role_get(request, role_get_call):
|
||||
@pytest.mark.get
|
||||
@pytest.mark.redaction
|
||||
def test_datadelivery_acms_redaction_get(request, acms_redaction_get_call):
|
||||
expected_response = get_expected_response(request.node.name)
|
||||
expected_response = get_expected_response(pkg_name,request.node.name)
|
||||
actual_response = api_client(acms_redaction_get_call, oauth=True)
|
||||
assert json.dumps(actual_response, indent=4) == json.dumps(expected_response, indent=4)
|
||||
|
||||
@ -29,7 +33,7 @@ def test_datadelivery_acms_redaction_get(request, acms_redaction_get_call):
|
||||
@pytest.mark.get
|
||||
@pytest.mark.client_application
|
||||
def test_datadelivery_client_applications_get(request, client_applications_get_call):
|
||||
expected_response = get_expected_response(request.node.name)
|
||||
expected_response = get_expected_response(pkg_name, request.node.name)
|
||||
actual_response = api_client(client_applications_get_call, oauth=True)
|
||||
assert json.dumps(actual_response, indent=4) == json.dumps(expected_response, indent=4)
|
||||
|
||||
@ -37,7 +41,7 @@ def test_datadelivery_client_applications_get(request, client_applications_get_c
|
||||
@pytest.mark.get
|
||||
@pytest.mark.endpoint
|
||||
def test_datadelivery_endpoint_get(request, endpoint_get_call):
|
||||
expected_response = get_expected_response(request.node.name)
|
||||
expected_response = get_expected_response(pkg_name, request.node.name)
|
||||
actual_response = api_client(endpoint_get_call, oauth=True)
|
||||
assert json.dumps(actual_response, indent=4) == json.dumps(expected_response, indent=4)
|
||||
|
||||
@ -45,6 +49,6 @@ def test_datadelivery_endpoint_get(request, endpoint_get_call):
|
||||
@pytest.mark.get
|
||||
@pytest.mark.redaction
|
||||
def test_datadelivery_redaction_type_get(request, redaction_type_get_call):
|
||||
expected_response = get_expected_response(request.node.name)
|
||||
expected_response = get_expected_response(pkg_name, request.node.name)
|
||||
actual_response = api_client(redaction_type_get_call, oauth=True)
|
||||
assert json.dumps(actual_response, indent=4) == json.dumps(expected_response, indent=4)
|
@ -1,6 +1,7 @@
|
||||
# pylint: disable=line-too-long,unused-argument
|
||||
import pytest
|
||||
from apiclient.config import get_cfg
|
||||
|
||||
from apiclient.config import get_cfg
|
||||
|
||||
CFG = get_cfg('gw', force_refresh=True)
|
||||
|
||||
|
@ -1,15 +0,0 @@
|
||||
import os
|
||||
import json
|
||||
|
||||
|
||||
CWD = os.path.dirname(os.path.realpath(__file__))
|
||||
|
||||
|
||||
####
|
||||
# HELPERS
|
||||
####
|
||||
def get_expected_response(test_name):
|
||||
expected_response_file = test_name + ".json"
|
||||
with open(os.path.join(CWD, 'expected_responses', expected_response_file), 'r') as file:
|
||||
expected_response = json.load(file)
|
||||
return expected_response
|
@ -1,19 +1,22 @@
|
||||
import json
|
||||
|
||||
import pytest
|
||||
|
||||
from apiclient.client import api_client
|
||||
from tests.open_service.helpers import get_expected_response
|
||||
from tests.helpers import get_expected_response
|
||||
|
||||
pkg_name = __package__.split('.')[1]
|
||||
|
||||
|
||||
@pytest.mark.rules
|
||||
def test_get_creatures(request, get_creatures_call):
|
||||
expected_response = get_expected_response(request.node.name)
|
||||
expected_response = get_expected_response(pkg_name, request.node.name)
|
||||
actual_response = api_client(get_creatures_call, oauth=False)
|
||||
assert json.dumps(actual_response, indent=4) == json.dumps(expected_response, indent=4)
|
||||
|
||||
|
||||
@pytest.mark.rules
|
||||
def test_get_creature(request, get_creature_call):
|
||||
expected_response = get_expected_response(request.node.name)
|
||||
expected_response = get_expected_response(pkg_name, request.node.name)
|
||||
actual_response = api_client(get_creature_call, oauth=False)
|
||||
assert json.dumps(actual_response, indent=4) == json.dumps(expected_response, indent=4)
|
Loading…
Reference in New Issue
Block a user