diff options
author | Victor Stinner <vstinner@redhat.com> | 2019-04-26 08:40:25 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-04-26 08:40:25 +0200 |
commit | 3cde440f20a9db75fb2c4e65e8e4d04a53216a2d (patch) | |
tree | c867159d768e27d5c92bd7dc4bef8d749255baa6 /Lib/test/libregrtest/main.py | |
parent | 87d23a041d9efb743c5680ac23305ddddf300e51 (diff) | |
download | cpython-git-3cde440f20a9db75fb2c4e65e8e4d04a53216a2d.tar.gz |
bpo-36725: Refactor regrtest multiprocessing code (GH-12961)
Rewrite run_tests_multiprocess() function as a new MultiprocessRunner
class with multiple methods to better report errors and stop
immediately when needed.
Changes:
* Worker processes are now killed immediately if tests are
interrupted or if a test does crash (CHILD_ERROR): worker
processes are killed.
* Rewrite how errors in a worker thread are reported to
the main thread. No longer ignore BaseException or parsing errors
silently.
* Remove 'finished' variable: use worker.is_alive() instead
* Always compute omitted tests. Add Regrtest.get_executed() method.
Diffstat (limited to 'Lib/test/libregrtest/main.py')
-rw-r--r-- | Lib/test/libregrtest/main.py | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/Lib/test/libregrtest/main.py b/Lib/test/libregrtest/main.py index ef1336a7e2..606dc268ae 100644 --- a/Lib/test/libregrtest/main.py +++ b/Lib/test/libregrtest/main.py @@ -79,8 +79,8 @@ class Regrtest: self.skipped = [] self.resource_denieds = [] self.environment_changed = [] - self.rerun = [] self.run_no_tests = [] + self.rerun = [] self.first_result = None self.interrupted = False @@ -105,6 +105,11 @@ class Regrtest: # used by --junit-xml self.testsuite_xml = None + def get_executed(self): + return (set(self.good) | set(self.bad) | set(self.skipped) + | set(self.resource_denieds) | set(self.environment_changed) + | set(self.run_no_tests)) + def accumulate_result(self, result): test_name = result.test_name ok = result.result @@ -311,8 +316,6 @@ class Regrtest: self.bad.remove(test_name) if ok.result == INTERRUPTED: - # print a newline separate from the ^C - print() self.interrupted = True break else: @@ -331,11 +334,11 @@ class Regrtest: print("== Tests result: %s ==" % self.get_tests_result()) if self.interrupted: - print() - # print a newline after ^C print("Test suite interrupted by signal SIGINT.") - executed = set(self.good) | set(self.bad) | set(self.skipped) - omitted = set(self.selected) - executed + + omitted = set(self.selected) - self.get_executed() + if omitted: + print() print(count(len(omitted), "test"), "omitted:") printlist(omitted) |