Regular Expression Fun with The Grinder

Using regular expressions in Grinder can be tricky, to the point of being infuriating. For example, this works:

pattern = re.compile('-rf')

... but this doesn't:


pattern = re.compile('-rf.?*')

This code is in the runTestSuite() method, which is called by TestRunner.__call__. This is executed by every Grinder worker thread. It fails with the following error message:

23/11/11 10:03:34 (thread 0 run 0): Aborted run due to Jython exception: <type 'exceptions.ValueError'>: ('unsupported operand type', 'any') [calling TestRunner]

The reason for this is that each thread must import the re module separately. One way to get around the error is to compile the regular expression in a helper method outside any Grinder worker thread, and invoke the helper method from worker threads:

# compile regular expression
def getRfRe():
    import re
    return re.compile(r"-rf.*?\s")

# use it from within runTestSuite() or any other worker thread
match = getRfRe().search(req)
if match:
    value = match.group(0)



Here is a link to the section in the Grinder FAQ that describes this in more detail: http://grinder.sourceforge.net/faq.html#re-problems