diff --git a/lib/jobs_processing.py b/lib/jobs_processing.py
index ea9bc67..3368bd7 100644
--- a/lib/jobs_processing.py
+++ b/lib/jobs_processing.py
@@ -9,6 +9,7 @@
 from robot.libraries.BuiltIn import BuiltIn
 from multiprocessing import Process, Manager
 import os
+import datetime
 import gen_print as gp
 
 
@@ -58,3 +59,60 @@
 
     # Return function return codes.
     return return_dict
+
+
+def execute_keyword_args(keyword_name, args, return_dict):
+    r"""
+    Execute a robot keyword with arguments.
+    In addition to running the caller's keyword, this function will:
+    - Add an entry to the return_dict
+    Description of argument(s):
+    keyword_name    Keyword name to be executed.
+    args            Arguments to keyword.
+    return_dict     A dictionary consisting of pid/process status for the
+                    keys/values. This function will append a new entry to
+                    this dictionary.
+    """
+
+    execution_time = datetime.datetime.now()
+
+    status = BuiltIn().run_keyword_and_return_status(keyword_name, *args)
+
+    # Build execution time:<status> dictionary.
+    return_dict[str(execution_time)] = str(status)
+
+
+def execute_process_multi_keyword(number_args, *keyword_names):
+    r"""
+    Execute multiple robot keywords with arguments via multiprocessing process.
+
+    Description of argument(s):
+    number_args       Number of argument in keywords.
+    keyword_names     Keyword name to be executed.
+    """
+
+    manager = Manager()
+    return_dict = manager.dict()
+    process_list = []
+    # Append each keyword with its arguments in a process to execute.
+    for keywords_data in keyword_names:
+        keyword_args = tuple(keywords_data.split(" ")[-number_args:])
+        keyword_name = " ".join(keywords_data.split(" ")[:-number_args])
+        task = Process(target=execute_keyword_args,
+                       args=(keyword_name, keyword_args, return_dict))
+        process_list.append(task)
+        task.start()
+
+    # Wait for process to complete.
+    for task in process_list:
+        task.join()
+    return return_dict
+
+
+def get_current_date_time():
+    r"""
+    Gets current time.
+    """
+
+    current_time = datetime.datetime.now().strftime("%H:%M:%S.%f")
+    return current_time
diff --git a/openpower/ext_interfaces/test_vmicert_management.robot b/openpower/ext_interfaces/test_vmicert_management.robot
index 88129be..ab4280a 100644
--- a/openpower/ext_interfaces/test_vmicert_management.robot
+++ b/openpower/ext_interfaces/test_vmicert_management.robot
@@ -2,6 +2,7 @@
 
 Documentation    VMI certificate exchange tests.
 
+Library          ../../lib/jobs_processing.py
 Resource         ../../lib/resource.robot
 Resource         ../../lib/bmc_redfish_resource.robot
 Resource         ../../lib/openbmc_ffdc.robot
@@ -23,8 +24,7 @@
 &{USERS}          Administrator=${ADMIN}  Operator=${OPERATOR}  ReadOnly=${ReadOnly}
 ...               NoAccess=${NoAccess}
 ${VMI_BASE_URI}   /ibm/v1/
-${CSR_FILE}       csr_server.csr
-${CSR_KEY}        csr_server.key
+
 
 *** Test Cases ***
 
@@ -140,12 +140,58 @@
     # Request root certificate from NoAccess user.
     noaccess_user         TestPwd123           ${False}      ${True}    ${HTTP_FORBIDDEN}
 
+Get Concurrent Root Certificate Requests From Multiple Admin Users
+    [Documentation]  Get multiple concurrent root certificate requests from multiple admins
+    ...  and verify no errors.
+    [Tags]  Get_Concurrent_Root_Certificate_Requests_From_Multiple_Admin_Users
+
+    FOR  ${i}  IN RANGE  ${5}
+        ${dict}=  Execute Process Multi Keyword  ${5}
+        ...  Get Root Certificate ${OPENBMC_USERNAME} ${OPENBMC_PASSWORD} ${True} ${True} ${HTTP_OK}
+        ...  Get Root Certificate ${OPENBMC_USERNAME} ${OPENBMC_PASSWORD} ${True} ${True} ${HTTP_OK}
+        ...  Get Root Certificate ${OPENBMC_USERNAME} ${OPENBMC_PASSWORD} ${True} ${True} ${HTTP_OK}
+        Dictionary Should Not Contain Value  ${dict}  False
+        ...  msg=One or more operations has failed.
+    END
+
+Get Concurrent CSR Requests From Multiple Admin Users
+    [Documentation]  Get multiple concurrent csr requests from multiple admins and verify no errors.
+    [Tags]  Get_Concurrent_CSR_Requests_From_Multiple_Admin_Users
+
+    FOR  ${i}  IN RANGE  ${5}
+        ${dict}=  Execute Process Multi Keyword  ${5}
+        ...  Get Certificate Signed By VMI ${OPENBMC_USERNAME} ${OPENBMC_PASSWORD} ${True} ${True} ${HTTP_OK}
+        ...  Get Certificate Signed By VMI ${OPENBMC_USERNAME} ${OPENBMC_PASSWORD} ${True} ${True} ${HTTP_OK}
+        ...  Get Certificate Signed By VMI ${OPENBMC_USERNAME} ${OPENBMC_PASSWORD} ${True} ${True} ${HTTP_OK}
+        ...  Get Certificate Signed By VMI ${OPENBMC_USERNAME} ${OPENBMC_PASSWORD} ${True} ${True} ${HTTP_OK}
+        Dictionary Should Not Contain Value  ${dict}  False
+        ...  msg=One or more operations has failed.
+    END
+
+Get Concurrent Corrupted CSR Requests From Multiple Admin Users
+    [Documentation]  Get multiple concurrent corrupted csr requests from multiple admins and verify no errors.
+    [Tags]  Get_Concurrent_Corrupted_CSR_Requests_From_Multiple_Admin_Users
+
+    FOR  ${i}  IN RANGE  ${5}
+        ${dict}=  Execute Process Multi Keyword  ${5}
+        ...  Get Certificate Signed By VMI ${OPENBMC_USERNAME} ${OPENBMC_PASSWORD} ${True} ${False} ${HTTP_INTERNAL_SERVER_ERROR}
+        ...  Get Certificate Signed By VMI ${OPENBMC_USERNAME} ${OPENBMC_PASSWORD} ${True} ${False} ${HTTP_INTERNAL_SERVER_ERROR}
+        ...  Get Certificate Signed By VMI ${OPENBMC_USERNAME} ${OPENBMC_PASSWORD} ${True} ${False} ${HTTP_INTERNAL_SERVER_ERROR}
+        Dictionary Should Not Contain Value  ${dict}  False
+        ...  msg=One or more operations has failed.
+    END
+
 *** Keywords ***
 
 Generate CSR String
     [Documentation]  Generate a csr string.
 
     # Note: Generates and returns csr string.
+    ${csr_gen_time} =  Get Current Date Time
+    ${CSR_FILE}=  Catenate  SEPARATOR=_  ${csr_gen_time}  csr_server.csr
+    ${CSR_KEY}=   Catenate  SEPARATOR=_  ${csr_gen_time}  csr_server.key
+    Set Test Variable  ${CSR_FILE}
+    Set Test Variable  ${CSR_KEY}
     ${ssl_cmd}=  Set Variable  openssl req -new -newkey rsa:2048 -nodes -keyout ${CSR_KEY} -out ${CSR_FILE}
     ${ssl_sub}=  Set Variable
     ...  -subj "/C=XY/ST=Abcd/L=Efgh/O=ABC/OU=Systems/CN=abc.com/emailAddress=xyz@xx.ABC.com"
@@ -181,6 +227,7 @@
     Set To Dictionary  ${data}  data  ${csr_data}
 
     ${resp}=  Post Request  openbmc  ${cert_uri}  &{data}  headers=${headers}
+    Log to console  ${resp.content}
 
     [Return]  ${resp}
 
@@ -285,10 +332,12 @@
 
     # create a crt file with certificate string
     ${signed_cert}=  Set Variable  ${cert["Certificate"]}
+    ${testcert_gen_time} =  Get Current Date Time
+    ${test_cert_file}=   Catenate  SEPARATOR=_  ${testcert_gen_time}  test_certificate.cert
 
-    Create File  test_certificate.crt  ${signed_cert}
-    ${subject_signed_csr}=  Get Subject  test_certificate.crt  False
-    ${pubKey_signed_csr}=  Get Public Key  test_certificate.crt  False
+    Create File  ${test_cert_file}  ${signed_cert}
+    ${subject_signed_csr}=  Get Subject   ${test_cert_file}  False
+    ${pubKey_signed_csr}=  Get Public Key  ${test_cert_file}  False
 
     Should be equal as strings    ${subject_signed_csr}    ${subject_csr}
     Should be equal as strings    ${pubKey_signed_csr}     ${pubKey_csr}
@@ -297,14 +346,17 @@
 Suite Setup Execution
     [Documentation]  Suite setup execution.
 
+    Remove Files  *.csr  *.key  *.cert
     # Create different user accounts.
     Redfish.Login
+    Redfish Power On
     Create Users With Different Roles  users=${USERS}  force=${True}
 
 
 Suite Teardown Execution
     [Documentation]  Suite teardown execution.
 
+    Remove Files  *.csr  *.key  *.cert
     Delete BMC Users Via Redfish  users=${USERS}
     Delete All Sessions
     Redfish.Logout
