Search code examples
pythonrallypyral

TestCase defined under TestFolder on Rally not getting updated by pyral


I'm not able to update the testCase defined on Rally using pyral

Below is the code snippet I am using:

# Get the testcase that needs to be updated
query_criteria = 'FormattedID = "%s"' % tc
rally_response = rally_obj.get('TestCase', fetch=True, query=query_criteria)

target_project = rally.getProject()
testcase_fields = {
         "Project"     : target_project.ref,
         "Workspace"   : "workspace/59461540411",
         "Name"        : "test",
         "Method"      : "Automated",
         "Type"        : "Acceptance",
         "Notes"       : "netsim testing",
         "Description" : "description changing",
         #"TestCase"    : "testcase/360978196712"
        }

testcase_response = rally.put('TestCase', testcase_fields)

The status code of the testcase_response is "200" , but the Test Case is not updated.

What is wrong?


Solution

  • You are mixing 2 functions:

    • rally.put: to create a new WorkItem
    • rally.update: to modify an existing WorkItem

    When you modify an item, you need the reference, FormattedID, or Object ID of the Workitem.

    Your code should look like something like that:

    # Get the testcase that needs to be updated
    
    import logging
    
    logging.basicConfig(format="%(levelname)s:%(module)s:%(lineno)d:%(msg)s")
    
    
    def get_test_case(tcid):
        """Retrieve Test Case from its ID, or None if no such TestCase id"""
        query_criteria = "FormattedID = %s" % tcid
        try:
            response = rally_obj.get('TestCase', fetch=True, query=query_criteria)
            return response.next()
        except StopIteration:
            logging.error("Test Case '%s' not found" % tcid)
            return None
    
    
    target_project = rally.getProject()
    test_case = get_test_case("TC1234")
    if test_case:
        testcase_fields = {
                 "FormattedID" : test_case.FormattedID 
                 "Project"     : target_project.ref,
                 "Workspace"   : "workspace/59461540411",  # might not be necessary if you don't change it
                 "Name"        : "test",
                 "Method"      : "Automated",
                 "Type"        : "Acceptance",
                 "Notes"       : "netsim testing",
                 "Description" : "description changed",
                }
    
        testcase_response = rally.update('TestCase', testcase_fields)
        print(testcase_response)
    

    NOTE: you don't have to have double quotes " in the query.