Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ lib/
test.py
bin/
src/robotframework_requests.egg-info/
.pytest_cache/*

# ignore virtuvalenv
venv/*
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,13 @@ Library RequestsLibrary

*** Test Cases ***

Quick Get Request
Quick Get Request Test
${response}= GET https://www.google.com

Quick Get Request With Parameters Test
${response}= GET https://www.google.com/search params=query=ciao expected_status=200

Quick Get A JSON Body
Quick Get A JSON Body Test
${response}= GET https://jsonplaceholder.typicode.com/posts/1
Should Be Equal As Strings 1 ${response.json()}[id]
```
Expand Down
17 changes: 12 additions & 5 deletions src/RequestsLibrary/RequestsKeywords.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ def _common_request(
self._capture_output()

resp = method_function(
self._get_url(session, uri),
self._merge_url(session, uri),
timeout=self._get_timeout(kwargs.pop('timeout', None)),
cookies=kwargs.pop('cookies', self.cookies),
**kwargs)
Expand All @@ -53,15 +53,22 @@ def _common_request(

return resp


@staticmethod
def _get_url(session, uri):
def _merge_url(session, uri):
"""
Helper method to get the full url
Helper method that join session url and request url.
It relies on urljoin that handles quite good join urls and multiple /
but has some counter intuitive behaviours if you join uri starting with /
It handles also override in case a full url (http://etc) is passed as uri.
"""
base = ''
if session:
base = session.url
else:
base = ''
if session and uri and not session.url.endswith('/'):
base = session.url + '/'
if session and uri and uri.startswith('/'):
uri = uri[1:]
url = urljoin(base, uri)
return url

Expand Down
4 changes: 2 additions & 2 deletions src/RequestsLibrary/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,13 @@ class RequestsLibrary(RequestsOnSessionKeywords, DeprecatedKeywords):
| Library RequestsLibrary
|
| *** Test Cases ***
| Quick Get Request
| Quick Get Request Test
| ${response}= GET https://www.google.com
|
| Quick Get Request With Parameters Test
| ${response}= GET https://www.google.com/search params=query=ciao expected_status=200
|
| Quick Get A JSON Body
| Quick Get A JSON Body Test
| ${response}= GET https://jsonplaceholder.typicode.com/posts/1
| Should Be Equal As Strings 1 ${response.json()}[id]

Expand Down
2 changes: 1 addition & 1 deletion src/RequestsLibrary/version.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
VERSION = '0.9'
VERSION = '0.9.1'
55 changes: 38 additions & 17 deletions utests/test_RequestsKeywords.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,50 +19,71 @@ def build_mocked_session_keywords(url=''):
return session, keywords


def test_get_url_with_none_session():
def test_merge_url_with_none_session():
keywords = RequestsLibrary()
url = keywords._get_url(None, 'http://thisisa.url')
url = keywords._merge_url(None, 'http://thisisa.url')
assert url == 'http://thisisa.url'


def test_get_url_with_base():
def test_merge_url_with_session_url_only():
session, keywords = build_mocked_session_keywords('http://www.domain.com')
url = keywords._get_url(session, '')
url = keywords._merge_url(session, '')
assert url == 'http://www.domain.com'


def test_get_url_with_base_endpoint():
def test_merge_url_with_session_url_and_uri_endpoint():
session, keywords = build_mocked_session_keywords('http://www.domain.com')
url = keywords._get_url(session, 'endpoint')
url = keywords._merge_url(session, 'endpoint')
assert url == 'http://www.domain.com/endpoint'


def test_get_url_with_base_slash_endpoint_pre():
def test_merge_url_with_session_url_slash_and_uri_endpoint():
session, keywords = build_mocked_session_keywords('http://www.domain.com/')
url = keywords._get_url(session, 'endpoint')
url = keywords._merge_url(session, 'endpoint')
assert url == 'http://www.domain.com/endpoint'


def test_get_url_with_base_slash_endpoint_post():
def test_merge_url_with_session_url_and_uri_slash_endpoint():
session, keywords = build_mocked_session_keywords('http://www.domain.com')
url = keywords._get_url(session, '/endpoint')
url = keywords._merge_url(session, '/endpoint')
assert url == 'http://www.domain.com/endpoint'


# breaking change with 0.8 introduced in 0.9 :( #329
def test_merge_url_with_session_url_path_and_uri_root_endpoint():
session, keywords = build_mocked_session_keywords('http://www.domain.com/path')
url = keywords._merge_url(session, '/endpoint')
assert url == 'http://www.domain.com/path/endpoint'


# breaking change with 0.8 introduced in 0.9 :( #329
def test_merge_url_with_session_url_path_and_uri_endpoint():
session, keywords = build_mocked_session_keywords('http://www.domain.com/path')
url = keywords._merge_url(session, 'endpoint')
assert url == 'http://www.domain.com/path/endpoint'


def test_merge_url_with_session_url_path_slash_and_uri_endpoint():
session, keywords = build_mocked_session_keywords('http://www.domain.com/path/')
url = keywords._merge_url(session, 'endpoint')
assert url == 'http://www.domain.com/path/endpoint'


@pytest.mark.skipif(sys.version_info < (3, 0), reason="different urljoin handling of double slash")
def test_get_url_with_base2trailing_endpoint():
def test_merge_url_with_session2trailing_and_endpoint():
session, keywords = build_mocked_session_keywords('http://www.domain.com//')
url = keywords._get_url(session, 'endpoint')
url = keywords._merge_url(session, 'endpoint')
assert url == 'http://www.domain.com/endpoint'


def test_get_url_with_base_slash_endpoint_2trailing():
@pytest.mark.skipif(sys.version_info < (3, 0), reason="different urljoin handling of double slash")
def test_merge_url_with_session_and_slash_endpoint_2trailing():
session, keywords = build_mocked_session_keywords('http://www.domain.com')
url = keywords._get_url(session, '/endpoint//')
assert url == 'http://www.domain.com/endpoint//'
url = keywords._merge_url(session, '/endpoint//')
assert url == 'http://www.domain.com/endpoint/'


def test_get_url_with_url_override_base():
def test_merge_url_with_url_override_base():
session, keywords = build_mocked_session_keywords('http://www.domain.com')
url = keywords._get_url(session, 'https://new.domain.com')
url = keywords._merge_url(session, 'https://new.domain.com')
assert url == 'https://new.domain.com'