# How to pass API request test case

**URL:** <https://forum.robotframework.org/t/how-to-pass-api-request-test-case/5556>\
**Category:** RequestsLibrary\
**Created:** [10 April 2023 08:49 UTC](https://forum.robotframework.org/t/how-to-pass-api-request-test-case/5556 "2023-04-10T08:49:17Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![KGhonim](https://dub1.discourse-cdn.com/flex005/user_avatar/forum.robotframework.org/kghonim/32/2442_2.png) [@KGhonim](https://forum.robotframework.org/u/KGhonim)\
**Post date:** [10 April 2023 08:49 UTC](https://forum.robotframework.org/t/how-to-pass-api-request-test-case/5556/1 "2023-04-10T08:49:17Z")

</div>

i am trying to add negative test cases for login api request , where request status code 409 and that is as expected and design

at robot framework i have designed below code but during execution test case status fail and that is not correct .

what i am need is away to make these test cases pass as long as status code 409

\*\*\* Settings \*\*\*  
Library RequestsLibrary  
Test Template Login

\*\*\* Test Cases \*\*\* Username Password  
Login with invalid username should fail invalid ${VALID\_PASSWORD}  
Login with invalid password should fail ${VALID\_USER} invalid  
Login with invalid username and password should fail invalid invalid  
Login with empty username should fail ${EMPTY} ${VALID\_PASSWORD}  
Login with empty password should fail ${VALID\_USER} ${EMPTY}  
Login with empty username and password should fail ${EMPTY} ${EMPTY}

\*\*\* Keywords \*\*\*

Login  
[Arguments] ${USERNAME} ${PASSWORD}  
${data}= Evaluate {‘Username’: (None, ‘${USERNAME}’), ‘Password’: (None, ‘${PASSWORD}’)}  
${response}= POST ${Server\_url}${Login} files=${data}

# Log To Console ${response.content}

##### assertions

Should Be Equal As Strings ${response.status\_code} 409  
${json\_dict}= Evaluate json.loads(‘’‘${response.content}’‘’) modules=json  
Should not Be Equal As Strings None ${json\_dict[‘errorCode’]}  
Should not Be Equal As Strings None ${json\_dict[‘errorMessage’]}  
Should not Be Equal As Strings Authentication failed ${json\_dict[‘errorMessage’]}  
Should Be Equal As Strings failed ${json\_dict[‘status’]}  
Should Be Equal As Strings None ${json\_dict[‘data’]}

---

<div class="post-metadata">

**Author:** ![KGhonim](https://dub1.discourse-cdn.com/flex005/user_avatar/forum.robotframework.org/kghonim/32/2442_2.png) [@KGhonim](https://forum.robotframework.org/u/KGhonim)\
**Post date:** [10 April 2023 09:00 UTC](https://forum.robotframework.org/t/how-to-pass-api-request-test-case/5556/3 "2023-04-10T09:00:37Z")

</div>

below is execution error , you will notice that execution stopped at post line and keywords after that not run which contain assertions

TEST Login with invalid username should fail

| Full Name: | AP Login with invalid username should fail |
| --- | --- |
| Start / End / Elapsed: | 20230410 11:28:49.213 / 20230410 11:28:49.294 / 00:00:00.081 |
| Status: | FAIL |
| Message: | HTTPError: 409 Client Error: Conflict for url: {serverurl} |

00:00:00.074KEYWORD Login invalid, ${INVALID\_PASSWORD}

Start / End / Elapsed: 20230410 11:28:49.219 / 20230410 11:28:49.293 / 00:00:00.074

00:00:00.000KEYWORD ${data} = BuiltIn . Evaluate {‘Username’: (None, ‘${USERNAME}’), ‘Password’: (None, ‘${PASSWORD}’)}

00:00:00.071KEYWORD ${response} = RequestsLibrary . POST ${Server\_url}${AdminLogin}, files=${data}

| Documentation: | Sends a POST request. |
| --- | --- |
| Start / End / Elapsed: | 20230410 11:28:49.220 / 20230410 11:28:49.291 / 00:00:00.071 |

11:28:49.286 INFO POST Request : url={serverurl} path\_url={login endpoint} headers={‘User-Agent’: ‘python-requests/2.28.2’, ‘Accept-Encoding’: ‘gzip, deflate’, ‘Accept’: ‘_/_’, ‘Connection’: ‘keep-alive’, ‘Content-Length’: ‘230’, ‘Content-Type’: ‘multipart/form-data; boundary=e16badfce03cd6e03ba679560f63acc5’} body=b’–e16badfce03cd6e03ba679560f63acc5\r\nContent-Disposition: form-data; name=“Username”\r\n\r\ninvalid\r\n–e16badfce03cd6e03ba679560f63acc5\r\nContent-Disposition: form-data; name=“Password”\r\n\r\valid\r\n–e16badfce03cd6e03ba679560f63acc5–\r\n’

11:28:49.286 INFO POST Response : url={server}/{endpoint} status=409, reason=Conflict headers={‘Cache-Control’: ‘no-cache’, ‘Pragma’: ‘no-cache’, ‘Content-Length’: ‘151’, ‘Content-Type’: ‘application/json; charset=utf-8’, ‘Expires’: ‘-1’, ‘Server’: ‘Microsoft-IIS/8.5’, ‘X-AspNet-Version’: ‘4.0.30319’, ‘X-Powered-By’: ‘[ASP.NET](http://asp.net/)’, ‘Access-Control-Allow-Origin’: ‘_', ‘Access-Control-Allow-Headers’: '_’, ‘Access-Control-Allow-Methods’: ‘GET, POST, PUT, DELETE, OPTIONS’, ‘Date’: ‘Mon, 10 Apr 2023 08:29:50 GMT’} body={“data”:null,“status”:“failed”,“errorCode”:“GWUM\_UL\_001”,“errorMessage”:{“EN”:“Failed to find the user. Authentication failed”,“AR”:“”,“Details”:null}}

FAIL HTTPError: 409 Client Error: Conflict for url: {server}/{endpoint}  
KEYWORD BuiltIn . Should Be Equal As Strings ${response.status\_code}, 409

00:00:00.000KEYWORD ${json\_dict} = BuiltIn . Evaluate json.loads(‘’‘${response.content}’‘’), modules=json

00:00:00.000KEYWORD BuiltIn . Should Not Be Equal As Strings None, ${json\_dict[‘errorCode’]}

00:00:00.000KEYWORD BuiltIn . Should Not Be Equal As Strings None, ${json\_dict[‘errorMessage’]}

00:00:00.000KEYWORD BuiltIn . Should Be Equal As Strings failed, ${json\_dict[‘status’]}

00:00:00.000KEYWORD BuiltIn . Should Be Equal As Strings None, ${json\_dict[‘data’]}

---

<div class="post-metadata">

**Author:** ![damies13](https://dub1.discourse-cdn.com/flex005/user_avatar/forum.robotframework.org/damies13/32/623_2.png) [@damies13](https://forum.robotframework.org/u/damies13)\
**Post date:** [10 April 2023 09:02 UTC](https://forum.robotframework.org/t/how-to-pass-api-request-test-case/5556/4 "2023-04-10T09:02:51Z")

</div>

Hi Khalid,

In the documentation for [POST](https://marketsquare.github.io/robotframework-requests/doc/RequestsLibrary.html#POST), you’ll see `expected_status` perhaps this is what you’re after?

There’s more detail about `expected_status` in the documentation for [Status Should Be](https://marketsquare.github.io/robotframework-requests/doc/RequestsLibrary.html#Status%20Should%20Be)

Pay particular attention to this paragraph:

> New requests keywords like [GET](https://marketsquare.github.io/robotframework-requests/doc/RequestsLibrary.html#GET) or [GET On Session](https://marketsquare.github.io/robotframework-requests/doc/RequestsLibrary.html#GET%20On%20Session) (starting from 0.8 version) already have an implicit assert mechanism that, by default, verifies the response status code. [Status Should Be](https://marketsquare.github.io/robotframework-requests/doc/RequestsLibrary.html#Status%20Should%20Be) keyword can be useful when you disable implicit assert using `expected_status=anything`.

It caught me out at first when version 0.8 came out.

Dave.
