In fact the start_msg and end_msg were tailored for configuration. If you use them in the build you get the stdout version and the part that go to the config.log file.
One way is to set a logger :
bld = self.generator.bld
bld.logger = Logs.make_logger(path_to_some_log_file, 'mylogger')
bld.start_msg("Running test")
# do something
bld.end_msg("Test ok")
bld.logger = None
Instead of WAF Logs.make_logger, you can use a standard python logger with a NullHandler.