[PATCH V3] run-tests: '--time' option provide more details to Linux users
Anurag Goel
anurag.dsps at gmail.com
Thu Jun 19 14:45:57 CDT 2014
On Wed, Jun 18, 2014 at 2:07 PM, Anurag Goel <anurag.dsps at gmail.com> wrote:
> # HG changeset patch
> # User anuraggoel <anurag.dsps at gmail.com>
> # Date 1403079999 -19800
> # Wed Jun 18 13:56:39 2014 +0530
> # Node ID faa6469d11ddb4842169be76fb8f83312e5e0359
> # Parent 4951b897118e18d3081f07b98a96c0a917d71a24
> run-tests: '--time' option provide more details to Linux users
>
> As our tests execute in child processes, this patch uses os.times()
> module in replace of time.time() module to provide additional info like
> user time and system time spent by child's processes along with real
> ellapased
> time taken by a process.
>
> There is one limitation of this patch. It can work only for Linux users
> and not
> for Windows.
>
> "os.times" module returns a 5-tuple of a floaing point numbers.
> 1) User time
> 2) System time
> 3) Child's user time
> 4) Child's system time
> 5) Ellapsed real time
>
> On Windows, only the first two items are filled, the others are zero.
> Therefore, below test case does not break on Windows but instead gives the
> null value.
>
> diff -r 4951b897118e -r faa6469d11dd tests/run-tests.py
> --- a/tests/run-tests.py Wed Jun 18 02:29:14 2014 +0530
> +++ b/tests/run-tests.py Wed Jun 18 13:56:39 2014 +0530
> @@ -1070,6 +1070,7 @@
>
> self.times = []
> self._started = {}
> + self._stopped = {}
>
> def addFailure(self, test, reason):
> self.failures.append((test, reason))
> @@ -1159,17 +1160,23 @@
> def startTest(self, test):
> super(TestResult, self).startTest(test)
>
> - self._started[test.name] = time.time()
> + self._started[test.name] = os.times()
>
> def stopTest(self, test, interrupted=False):
> super(TestResult, self).stopTest(test)
>
> - self.times.append((test.name, time.time() - self._started[
> test.name]))
> + self._stopped[test.name] = os.times()
> + self.times.append((test.name, self._stopped[test.name][2] -
> + self._started[test.name][2], self._stopped[test.name][3]
> -
> + self._started[test.name][3], self._stopped[test.name][4]
> -
> + self._started[test.name][4]))
> +
> del self._started[test.name]
> + del self._stopped[test.name]
>
> if interrupted:
> self.stream.writeln('INTERRUPTED: %s (after %d seconds)' % (
> - test.name, self.times[-1][1]))
> + test.name, self.times[-1][3]))
>
> class TestSuite(unittest.TestSuite):
> """Custom unitest TestSuite that knows how to execute Mercurial
> tests."""
> @@ -1338,11 +1345,12 @@
>
> def printtimes(self, times):
> self.stream.writeln('# Producing time report')
> - times.sort(key=lambda t: (t[1], t[0]), reverse=True)
> - cols = '%7.3f %s'
> - self.stream.writeln('%-7s %s' % ('Time', 'Test'))
> - for test, timetaken in times:
> - self.stream.writeln(cols % (timetaken, test))
> + times.sort(key=lambda t: (t[3]))
> + cols = '%0.3f %7.3f %7.3f %s'
> + self.stream.writeln('%-7s %-7s %-7s %s' % ('cuser', 'csys',
> 'real',
> + 'Test'))
> + for test, cuser, csys, real in times:
> + self.stream.writeln(cols % (cuser, csys, real, test))
>
> class TestRunner(object):
> """Holds context for executing tests.
> diff -r 4951b897118e -r faa6469d11dd tests/test-run-tests.t
> --- a/tests/test-run-tests.t Wed Jun 18 02:29:14 2014 +0530
> +++ b/tests/test-run-tests.t Wed Jun 18 13:56:39 2014 +0530
> @@ -19,6 +19,16 @@
> .
> # Ran 1 tests, 0 skipped, 0 warned, 0 failed.
>
> +test for --time
> +==================
> +
> + $ $TESTDIR/run-tests.py --with-hg=`which hg` --time
> + .
> + # Ran 1 tests, 0 skipped, 0 warned, 0 failed.
> + # Producing time report
> + cuser csys real Test
> + * (glob)
>
* (glob) could be replace with the following line
[\d.\s]{23} test-success.t (re)
This one looks more precise.
+
> failing test
> ==================
>
>
I will wait to get more review on this patch before sending the next
version of this patch.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://selenic.com/pipermail/mercurial-devel/attachments/20140620/89a84bcc/attachment.html>
More information about the Mercurial-devel
mailing list