Actually the text is identical, only the substitutions change.  There's no need to repeat yourself three times if the differences is so small and easily abstracted.  It  makes the code cleaner and easier to maintain.  How about something like:

    class kill_base(subtest.SubSubtest)
        ...
        not_handled_msg = ("Not all signals were handled inside container after "
                           "quick series of kill commands. "
                           "Expected output (unordered):\n  %s\nActual container "
                           "output:\n  %s\nFirst missing line:\n  %s")
        ...
        def make_not_handled_msg(self, expected_list, actual_list, first_missing):
            expected_str = "\n  ".join(expected_list)
            actual_str  = "\n  ".join(actual_list)
            return self.not_handled_msg % (expected_str, actual_str, first_missing)
        ...
        expected_list = [_check % sig for sig in stopped_log]
        actual_list = container_out.get(_idx)
        msg = self.make_not_handled_msg(expected_list, actual_list, line)
    ...
    class parallel_stress(kill_base):
        ...
        expected_list = [_check % sig for sig in signals_set]
        actual_list = container_cmd.stdout.splitlines()
        msg = self.make_not_handled_msg(expected_list, actual_list, line)
    ...
    class stress(kill_base):
        ...
        expected_list = [_check % sig for sig in signals_set]
        actual_list = container_cmd.stdout.splitlines()
        msg = self.make_not_handled_msg(expected_list, actual_list, line)