-
Notifications
You must be signed in to change notification settings - Fork 2.5k
Description
I have a question about memory usage of Robot Framework. I have some test cases that create many variables using VAR with a lot of text in them and I notice memory usage that I wouldn't expect. When the first testcase runs the memory usage increases and when the second testcase starts the memory usage increases again with the same amount where I would expect that the memory usage drops after the first test stops since the created variables don't exist anymore.
Hard to explain using words, so I've added an image of running 4 of sunch testcases in one run. You see that the memory just keeps increasing till the last testcase has run. (TC001A and TC004 through 7)
Extra info... When I move the creation of the variables to a keyword, the memory does not increase at all {or hardly increases) during the whole run. (TC001 in the suite)
*** Settings ***
Documentation Test memory usage in case many strings are used
Library DateTime
Library String
Test Tags strings
*** Variables ***
${ITERATIONS} 200
*** Test Cases ***
TC001 Using A Keyword
[Documentation] The keyword cleans the variables up as expected
${random_str} Generate Start String
Log Timestamp
FOR ${i} IN RANGE ${ITERATIONS}
Build String ${random_str} ${i}
END
Sleep 5 seconds
Log To Console ${\n}Number of iterations was ${i}
TC001A Using A Keyword And Capturing Return Value
[Documentation] Memoray stays allocated till the end of the testrun
${random_str} Generate Start String
Log Timestamp
FOR ${i} IN RANGE ${ITERATIONS}
${random_str${i}} Build String ${random_str} ${i}
END
Sleep 5 seconds
Log To Console ${\n}Number of iterations was ${i}
TC002 Use Instant Clean-up
[Documentation] Instant clean up, no memory usage visible
${random_str} Generate Start String
Log Timestamp
FOR ${i} IN RANGE ${ITERATIONS}
# Change content of variable in each iteration
VAR ${result} ${i} ${random_str} separator=${SPACE}
# Create a new variable in each iteration
VAR ${result${i}} ${i} ${random_str} separator=${SPACE}
${padded} Evaluate f"{int(${i}):05d}"
${ts} Get Time format=%Y-%m-%d %H:%M:%S.%f
Log To Console ${padded}: ${ts}
VAR ${result${i}} ${EMPTY}
END
Sleep 5 seconds
Log To Console ${\n}Number of iterations was ${i}
TC003 Use clean-up In For Loop
[Documentation] Clean up at the end, memory is released
${random_str} Generate Start String
Log Timestamp
FOR ${i} IN RANGE ${ITERATIONS}
# Change content of variable in each iteration
VAR ${result} ${i} ${random_str} separator=${SPACE}
# Create a new variable in each iteration
VAR ${result${i}} ${i} ${random_str} separator=${SPACE}
${padded} Evaluate f"{int(${i}):05d}"
${ts} Get Time format=%Y-%m-%d %H:%M:%S.%f
Log To Console ${padded}: ${ts}
END
Sleep 5 seconds
FOR ${i} IN RANGE ${ITERATIONS}
VAR ${result${i}} ${EMPTY}
END
Log To Console ${\n}Number of iterations was ${i}
TC004 No Clean-up Part 1
[Documentation] Memoray stays allocated till the end of the testrun
[Tags] memory
${random_str} Generate Start String
Log Timestamp
FOR ${i} IN RANGE ${ITERATIONS}
# Change content of variable in each iteration
VAR ${tc4_result} ${i} ${random_str} separator=${SPACE}
# Create a new variable in each iteration
VAR ${tc4_result${i}} ${i} ${random_str} separator=${SPACE}
${padded} Evaluate f"{int(${i}):05d}"
${ts} Get Time format=%Y-%m-%d %H:%M:%S.%f
Log To Console ${padded}: ${ts}
END
Sleep 5 seconds
Log To Console ${\n}Number of iterations was ${i}
TC005 No Clean-up Part 2
[Documentation] Memoray stays allocated till the end of the testrun
[Tags] memory
${random_str} Generate Start String
Log Timestamp
FOR ${i} IN RANGE ${ITERATIONS}
# Change content of variable in each iteration
VAR ${tc5_result} ${i} ${random_str} separator=${SPACE}
# Create a new variable in each iteration
VAR ${tc5_result${i}} ${i} ${random_str} separator=${SPACE}
${padded} Evaluate f"{int(${i}):05d}"
${ts} Get Time format=%Y-%m-%d %H:%M:%S.%f
Log To Console ${padded}: ${ts}
END
Sleep 5 seconds
Log To Console ${\n}Number of iterations was ${i}
TC006 No Clean-up Part 3
[Documentation] Memoray stays allocated till the end of the testrun
[Tags] memory
${random_str} Generate Start String
Log Timestamp
FOR ${i} IN RANGE ${ITERATIONS}
# Change content of variable in each iteration
VAR ${tc6_result} ${i} ${random_str} separator=${SPACE}
# Create a new variable in each iteration
VAR ${tc6_result${i}} ${i} ${random_str} separator=${SPACE}
${padded} Evaluate f"{int(${i}):05d}"
${ts} Get Time format=%Y-%m-%d %H:%M:%S.%f
Log To Console ${padded}: ${ts}
END
Sleep 5 seconds
Log To Console ${\n}Number of iterations was ${i}
TC007
[Documentation] Memoray stays allocated till the end of the testrun
[Tags] memory
${random_str} Generate Start String
Log Timestamp
FOR ${i} IN RANGE ${ITERATIONS}
# Change content of variable in each iteration
VAR ${tc6_result} ${i} ${random_str} separator=${SPACE}
# Create a new variable in each iteration
VAR ${tc6_result${i}} ${i} ${random_str} separator=${SPACE}
${padded} Evaluate f"{int(${i}):05d}"
${ts} Get Time format=%Y-%m-%d %H:%M:%S.%f
Log To Console ${padded}: ${ts}
END
Sleep 5 seconds
Log To Console ${\n}Number of iterations was ${i}
*** Keywords ***
Build String
[Documentation] Contains de content of the for loop
[Arguments] ${random_str} ${i}
# Change content of variable in each iteration
VAR ${result} ${i} ${random_str} separator=${SPACE}
# Create a new variable in each iteration
VAR ${result${i}} ${i} ${random_str} separator=${SPACE}
${padded} Evaluate f"{int(${i}):05d}"
${ts} Get Time format=%Y-%m-%d %H:%M:%S.%f
Log To Console ${padded}: ${ts}
RETURN ${result${i}}
Generate Start String
[Documentation] Create a start string for the testcases
${number_of_bytes} Evaluate 1024 * 1024 * 25
${mb} Evaluate ${number_of_bytes} / (1024 * 1024)
Log To Console Start generating random string of ${mb} MB
${random_str} Generate Random String ${number_of_bytes} [LETTERS][NUMBERS][PUNCTUATION]
Log To Console Finished generating random string of ${mb} MB
RETURN ${random_str}
Log Timestamp
[Documentation] Log Timestamp
${ts} Get Time format=%Y-%m-%d %H:%M:%S.%f
Log To Console ${ts}