diff --git a/redfish/dmtf_tools/test_redfishtool.robot b/redfish/dmtf_tools/test_redfishtool.robot
index 01354ac..ff05c18 100644
--- a/redfish/dmtf_tools/test_redfishtool.robot
+++ b/redfish/dmtf_tools/test_redfishtool.robot
@@ -1,35 +1,29 @@
 *** Settings ***
+
+
 Documentation    Verify Redfish tool functionality.
 
-# The following tests are performed:
-#
-# sensors list
-# health check
-#
-# directory PATH in $PATH.
-#
-# Test Parameters:
-# OPENBMC_HOST          The BMC host name or IP address.
-# OPENBMC_USERNAME      The username to login to the BMC.
-# OPENBMC_PASSWORD      Password for OPENBMC_USERNAME.
-#
-# We use DMTF redfishtool for writing openbmc automation test cases.
-# DMTF redfishtool is a commandline tool that implements the client
-# side of the Redfish RESTful API for Data Center Hardware Management.
+Library           OperatingSystem
+Library           String
+Library           Collections
 
-Library                 String
-Library                 OperatingSystem
+Resource          ../../lib/resource.robot
+Resource          ../../lib/bmc_redfish_resource.robot
+Resource          ../../lib/openbmc_ffdc.robot
 
-Suite Setup             Suite Setup Execution
+
+Suite Setup       Suite Setup Execution
+
 
 *** Variables ***
 
-${root_cmd_args}        redfishtool raw -r ${OPENBMC_HOST} -u ${OPENBMC_USERNAME} -p ${OPENBMC_PASSWORD} -S Always
-${HTTTP_ERROR}          Error
-${min_number_sensors}   ${15}
+
+${root_cmd_args}       redfishtool raw -r ${OPENBMC_HOST} -u ${OPENBMC_USERNAME} -p ${OPENBMC_PASSWORD} -S Always
+${min_number_sensors}  ${15}
 
 *** Test Cases ***
 
+
 Verify Redfishtool Sensor Commands
     [Documentation]  Verify redfishtool's sensor commands.
     [Tags]  Verify_Redfishtool_Sensor_Commands
@@ -39,6 +33,7 @@
     Should Be True  ${json_object["Members@odata.count"]} > ${min_number_sensors}
     ...  msg=There should be at least ${min_number_sensors} sensors.
 
+
 Verify Redfishtool Health Check Commands
     [Documentation]  Verify redfishtool's health check command.
     [Tags]  Verify_Redfishtool_Health_Check_Commands
@@ -49,19 +44,184 @@
     Should Be Equal  OK  ${status["Health"]}
     ...  msg=Health status should be OK.
 
+
+Verify Redfishtool Create Users
+    [Documentation]  Create user via Redfishtool and verify.
+    [Tags]  Verify_Redfishtool_Create_Users
+    [Teardown]  Redfishtool Delete User  "UserT100"
+
+    Redfishtool Create User  "UserT100"  "TestPwd123"  "Operator"  true
+    Redfishtool Verify User  "UserT100"  "Operator"
+
+
+Verify Redfishtool Modify Users
+    [Documentation]  Modify user via Redfishtool and verify.
+    [Tags]  Verify_Redfishtool_Modify_Users
+    [Teardown]  Redfishtool Delete User  "UserT100"
+
+    Redfishtool Create User  "UserT100"  "TestPwd123"  "Operator"  true
+    Redfishtool Update User Role  "UserT100"  "Administrator"
+    Redfishtool Verify User  "UserT100"  "Administrator"
+
+
+Verify Redfishtool Delete Users
+    [Documentation]  Delete user via Redfishtool and verify.
+    [Tags]  Verify_Redfishtool_Delete_Users
+
+    Redfishtool Create User  "UserT100"  "TestPwd123"  "Operator"  true
+    Redfishtool Delete User  "UserT100"
+    ${status}=  Redfishtool Verify User Name Exists  "UserT100"
+    Should Be True  ${status} == False
+
+
 *** Keywords ***
 
-Redfishtool Get
-    [Documentation]  Return the output of redfishtool for GET operation.
-    [Arguments]  ${uri}  ${cmd_args}=${root_cmd_args}
+
+Is HTTP error Expected
+    [Documentation]  Check if the HTTP error is expected.
+    [Arguments]  ${cmd_output}  ${error_expected}
 
     # Description of argument(s):
-    # uri  URI for GET operation.
-    # cmd_args redfishtool command arguments.
+    # cmd_output      Output of an HTTP operation.
+    # error_expected  Expected error.
 
-    ${cmd_output}=  Run  ${cmd_args} GET ${uri}
+    ${error_expected}=  Evaluate  "${error_expected}" in """${cmd_output}"""
+    Should Be True  ${error_expected} == True
+
+
+Redfishtool Create User
+    [Documentation]  Create new user.
+    [Arguments]  ${user_name}  ${password}  ${roleID}  ${enable}  ${expected_error}=""
+
+    # Description of argument(s):
+    # user_name      The user name (e.g. "test", "robert", etc.).
+    # password       The user password (e.g. "0penBmc", "0penBmc1", etc.).
+    # roleID         The role of user (e.g. "Administrator", "Operator", etc.).
+    # enable         Enabled attribute of (e.g. true or false).
+    # expected_error Expected error optionally provided in testcase (e.g. 401 /
+    #                authentication error, etc. )
+
+    ${data}=  Set Variable  '{"UserName":${user_name},"Password":${password},"RoleId":${roleId},"Enabled":${enable}}'
+    Redfishtool Post  ${data}  /redfish/v1/AccountService/Accounts  ${root_cmd_args}
+    ...  ${expected_error}
+
+Redfishtool Update User Role
+    [Documentation]  Update user role.
+    [Arguments]  ${user_name}  ${newRole}  ${login_user}=""  ${login_pasword}=""
+    ...  ${expected_error}=""
+
+    # Description of argument(s):
+    # user_name      The user name (e.g. "test", "robert", etc.).
+    # newRole        The new role of user (e.g. "Administrator", "Operator", etc.).
+    # login_user     The login user name used other than default root user.
+    # login_pasword  The login password.
+    # expected_error Expected error optionally provided in testcase (e.g. 401 /
+    #                authentication error, etc. )
+
+    Redfishtool Patch  '{"RoleId":${newRole}}'  /redfish/v1/AccountService/Accounts/${user_name}
+    ...  ${root_cmd_args}  ${expected_error}
+
+Redfishtool Delete User
+    [Documentation]  Delete an user.
+    [Arguments]  ${user_name}  ${expected_error}=""
+
+    # Description of argument(s):
+    # user_name       The user name (e.g. "test", "robert", etc.).
+    # expected_error  Expected error optionally provided in testcase (e.g. 401 /
+    #                 authentication error, etc. ).
+
+    Redfishtool Delete  /redfish/v1/AccountService/Accounts/${user_name}
+    ...  ${root_cmd_args}  ${expected_error}
+
+
+Redfishtool Verify User
+    [Documentation]  Verify role of the user.
+    [Arguments]  ${user_name}  ${role}
+
+    # Description of argument(s):
+    # user_name  The user name (e.g. "test", "robert", etc.).
+    # role       The new role of user (e.g. "Administrator", "Operator", etc.).
+
+    ${user_account}=  Redfishtool Get  /redfish/v1/AccountService/Accounts/${user_name}
+    ${json_obj}=   Evaluate  json.loads('''${user_account}''')  json
+    Should Be equal  "${json_obj["RoleId"]}"  ${role}
+
+
+Redfishtool Verify User Name Exists
+    [Documentation]  Verify user name exists.
+    [Arguments]  ${user_name}
+
+    # Description of argument(s):
+    # user_name  The user name (e.g. "test", "robert", etc.).
+
+    ${status}=  Run Keyword And Return Status  redfishtool Get
+    ...  /redfish/v1/AccountService/Accounts/${user_name}
+    [return]  ${status}
+
+
+Redfishtool Get
+    [Documentation]  Execute redfishtool for GET operation.
+    [Arguments]  ${uri}  ${cmd_args}=${root_cmd_args}  ${expected_error}=""
+
+    # Description of argument(s):
+    # uri             URI for GET operation (e.g. /redfish/v1/AccountService/Accounts/).
+    # cmd_args        Commandline arguments.
+    # expected_error  Expected error optionally provided in testcase (e.g. 401 /
+    #                 authentication error, etc. ).
+
+    ${rc}  ${cmd_output}=  Run and Return RC and Output  ${cmd_args} GET ${uri}
+    Run Keyword If  ${rc} != 0  Is HTTP error Expected  ${cmd_output}  ${expected_error}
     [Return]  ${cmd_output}
 
+
+Redfishtool Post
+    [Documentation]  Execute redfishtool for  Post operation.
+    [Arguments]  ${payload}  ${uri}  ${cmd_args}=${root_cmd_args}  ${expected_error}=""
+
+    # Description of argument(s):
+    # payload         Payload with POST operation (e.g. data for user name, password, role,
+    #                 enabled attribute)
+    # uri             URI for POST operation (e.g. /redfish/v1/AccountService/Accounts/).
+    # cmd_args        Commandline arguments.
+    # expected_error  Expected error optionally provided in testcase (e.g. 401 /
+    #                 authentication error, etc. ).
+
+    ${rc}  ${cmd_output}=  Run and Return RC and Output  ${cmd_args} POST ${uri} --data=${payload}
+    Run Keyword If  ${rc} != 0  Is HTTP error Expected  ${cmd_output}  ${expected_error}
+    [Return]  ${cmd_output}
+
+
+Redfishtool Patch
+    [Documentation]  Execute redfishtool for  Patch operation.
+    [Arguments]  ${payload}  ${uri}  ${cmd_args}=${root_cmd_args}  ${expected_error}=""
+
+    # Description of argument(s):
+    # payload         Payload with POST operation (e.g. data for user name, role, etc. ).
+    # uri             URI for PATCH operation (e.g. /redfish/v1/AccountService/Accounts/ ).
+    # cmd_args        Commandline arguments.
+    # expected_error  Expected error optionally provided in testcase (e.g. 401 /
+    #                 authentication error, etc. ).
+
+    ${rc}  ${cmd_output}=  Run and Return RC and Output  ${cmd_args} PATCH ${uri} --data=${payload}
+    Run Keyword If  ${rc} != 0  Is HTTP error Expected  ${cmd_output}  ${expected_error}
+    [Return]  ${cmd_output}
+
+
+Redfishtool Delete
+    [Documentation]  Execute redfishtool for  Post operation.
+    [Arguments]  ${uri}  ${cmd_args}=${root_cmd_args}  ${expected_error}=""
+
+    # Description of argument(s):
+    # uri             URI for DELETE operation.
+    # cmd_args        Commandline arguments.
+    # expected_error  Expected error optionally provided in testcase (e.g. 401 /
+    #                 authentication error, etc. ).
+
+    ${rc}  ${cmd_output}=  Run and Return RC and Output  ${cmd_args} DELETE ${uri}
+    Run Keyword If  ${rc} != 0  Is HTTP error Expected  ${cmd_output}  ${expected_error}
+    [Return]  ${cmd_output}
+
+
 Suite Setup Execution
     [Documentation]  Do suite setup execution.
 
