Reputation: 21
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
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