HAMZA SAAFI
HAMZA SAAFI

Reputation: 21

Test output of function that have For loop using robot-framework

I have function that have For loop and return for each iteration True or False

def testcase(x,testType=""):
        parameter_list = open("Parameter_List.csv")
        Parameters = csv.reader(parameter_list)
        if x =='compagne' :
            for row in Parameters :
                param = row[0].split(";")
                if param == ["Name","Format","Arraysize","MinVal","MaxVal","Default Val"] :
                    pass
                else :
                    parameter = Parameter(param[0], param[1], param[2], param[3], param[4], param[5])
                    return parameter.robotALLtest()
    
        elif x == 'one test' and testType in ["Min Value", "Max Value", "Lower Min", "Greater Max", "Persistence ON", "Persistence OFF", "Rset"] :
            for row in Parameters:
                param = row[0].split(";")
                if param == ["Name", "Format", "Arraysize", "MinVal", "MaxVal", "Default Val"]:
                    pass
                else:
                    parameter = Parameter(
                    param[0], param[1], param[2], param[3], param[4], param[5])
                    return parameter.robotTestParameter(testType)
        else :
            for row in Parameters:
                param = row[0].split(";")
                if x == param[0] :
                    parameter = Parameter(param[0], param[1], param[2], param[3], param[4], param[5])
                    break
            return parameter.robotTestParameter(testType)

I used RobotFreamwork to test the output

*** Settings ***
Library  test_cases.py

*** Test Cases ***
Test Parameter
    
    ${value}  test_cases.testcase   ${'one test'}   ${'Lower Min'}
    SHOULD BE EQUAL     ${value}    ${True}

But i have just the result for the first iteration. What can i do to get all the results?

Upvotes: 0

Views: 254

Answers (1)

rasjani
rasjani

Reputation: 7970

In the example you gave:

        elif x == 'one test' and testType in ["Min Value", "Max Value", "Lower Min", "Greater Max", "Persistence ON", "Persistence OFF", "Rset"] :
            for row in Parameters:
                param = row[0].split(";")
                if param == ["Name", "Format", "Arraysize", "MinVal", "MaxVal", "Default Val"]:
                    pass
                else:
                    parameter = Parameter(
                    param[0], param[1], param[2], param[3], param[4], param[5])
                    return parameter.robotTestParameter(testType)

your code looks like "lets read this csv file, if the row looks like a header, lets skip that but if its actual test data, it goes to the else branch.

And that else branch will return parameter.robotTestParameter(testType) from the testcase(), thus, you only loop 2 rows from the Parameters and first non-header row is the only that is applied.

So, essentially, your code works exactly how you wrote it.

On python side, you could do something like

result = True
for row in Parameters:
   param = row[0].split(";")
   if param == ["Name", "Format", "Arraysize", "MinVal", "MaxVal", "Default Val"]:
       pass
   else:
       parameter = Parameter(
       param[0], param[1], param[2], param[3], param[4], param[5])
       if parameter.robotTestParameter(testType) == False:
           result = False
return result

BUT this is not very good approach to solve the situation .. I'd start looking and learning on how to use Datadriver library / https://github.com/Snooz82/robotframework-datadriver

Upvotes: 1

Related Questions