Skip to content

unittest: display time used by each test case #48330

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
pprokop mannequin opened this issue Oct 8, 2008 · 18 comments
Closed

unittest: display time used by each test case #48330

pprokop mannequin opened this issue Oct 8, 2008 · 18 comments
Labels
3.12 only security fixes stdlib Python modules in the Lib dir tests Tests in the Lib/test dir type-feature A feature request or enhancement

Comments

@pprokop
Copy link
Mannequin

pprokop mannequin commented Oct 8, 2008

BPO 4080
Nosy @rhettinger, @giampaolo, @ezio-melotti, @merwok, @voidspace
PRs
  • bpo-4080: unittest durations #12271
  • Files
  • pyunit_time.patch: display time of each unit test - patch
  • unittest_runTime.patch: test case run time measure patch
  • Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.

    Show more details

    GitHub fields:

    assignee = None
    closed_at = None
    created_at = <Date 2008-10-08.20:28:15.274>
    labels = ['tests', 'type-feature', 'library', '3.9']
    title = 'unittest: display time used by each test case'
    updated_at = <Date 2020-02-16.12:49:33.700>
    user = 'https://bugs.python.org/pprokop'

    bugs.python.org fields:

    activity = <Date 2020-02-16.12:49:33.700>
    actor = 'giampaolo.rodola'
    assignee = 'none'
    closed = False
    closed_date = None
    closer = None
    components = ['Library (Lib)', 'Tests']
    creation = <Date 2008-10-08.20:28:15.274>
    creator = 'pprokop'
    dependencies = []
    files = ['11751', '15332']
    hgrepos = []
    issue_num = 4080
    keywords = ['patch']
    message_count = 17.0
    messages = ['74545', '87989', '95253', '109448', '110692', '110800', '110883', '154650', '154678', '154687', '154769', '154771', '154776', '155721', '176157', '337648', '362067']
    nosy_count = 8.0
    nosy_names = ['rhettinger', 'techtonik', 'giampaolo.rodola', 'ezio.melotti', 'eric.araujo', 'pprokop', 'michael.foord', 'piotr.dobrogost']
    pr_nums = ['12271']
    priority = 'normal'
    resolution = None
    stage = 'patch review'
    status = 'open'
    superseder = None
    type = 'enhancement'
    url = 'https://bugs.python.org/issue4080'
    versions = ['Python 3.9']

    Linked PRs

    @pprokop
    Copy link
    Mannequin Author

    pprokop mannequin commented Oct 8, 2008

    I've needed to measure each unit test running time
    to measure the performance changing of each functionality
    that every test case tests.
    Latest version of pyunit has only displayed summary running time of the
    suite, so I've implemented small enhancement to unittest.py that
    (in verbose mode) shows time of each test case run.
    Maybe that would be usefull for anybody else?

    @pprokop pprokop mannequin added the type-feature A feature request or enhancement label Oct 8, 2008
    @devdanzin devdanzin mannequin added stdlib Python modules in the Lib dir tests Tests in the Lib/test dir labels May 17, 2009
    @voidspace
    Copy link
    Contributor

    Needs test and documentation. Otherwise looks good.

    @pprokop
    Copy link
    Mannequin Author

    pprokop mannequin commented Nov 14, 2009

    Repack of unittest was good idea. It is a patch against trunk, one test
    case is provided and documentation update.

    @ezio-melotti
    Copy link
    Member

    The idea is interesting, but I would prefer to have a way to enable/disable this feature (and maybe even specify its format, e.g. the number of decimals). Moving the logic to an external function (possibly used as a decorator) might avoid some code duplication, but OTOH it would probably slow down the execution and the timing a little (I'm not sure that matters though).

    @BreamoreBoy
    Copy link
    Mannequin

    BreamoreBoy mannequin commented Jul 18, 2010

    Pawel, could you please provide an update wrt Ezio's comment on msg109448, thanks.

    @pprokop
    Copy link
    Mannequin Author

    pprokop mannequin commented Jul 19, 2010

    I think that a delay time of calling a decorator is not important, because this should be constant in each test execution, so no matter.
    I shall be able to provide a patch in few days.
    Thanks

    @voidspace
    Copy link
    Contributor

    I am in the process of creating an extension mechanism for unittest which will make adding this sort of use case to unittest much easier. *Even* if it is added to the core it should be in the form of an extension (plugin) so please don't update the patch until this is in place.

    @piotrdobrogost
    Copy link
    Mannequin

    piotrdobrogost mannequin commented Feb 29, 2012

    @michael Foord

    I am in the process of creating an extension mechanism for unittest
    which will make adding this sort of use case to unittest much easier

    How is it going?

    @merwok merwok changed the title pyunit - display time of each test case - patch unittest: display time of each test case Mar 1, 2012
    @rhettinger
    Copy link
    Contributor

    I think this would be a useful feature.

    @voidspace
    Copy link
    Contributor

    Yes, it would definitely be useful (as would a count of how far through the test run we are [27/129] style). Getting to completing (even for testing) the "extensible" unittest is something I will still do (and nose2 is being built off the prototype work I did), but isn't going to happen immediately - so it's not a good reason to hold up these improvements.

    I'll be sprinting at PyCon and look at this issue then.

    I'm keen to avoid proliferating command line parameters to the unittest test runner. Ezio - why would you want to disable this feature?

    @ezio-melotti
    Copy link
    Member

    Because it looks like line noise and doesn't provide an useful information in most of the cases (at least for me), see e.g.:

    + test_format (main.MyTestCase) ... [0.000612s] skipped 'not supported in this library version'
    + test_nothing (main.MyTestCase) ... [0.000486s] skipped 'demonstrating skipping'
    + test_windows_support (main.MyTestCase) ... [0.000090s] skipped 'requires Windows'

    It might still be useful to find the slowest test(s), or for test suites that take a long time (so I'm not opposed to having it as an option that can be enabled if needed), but for most of the tests it will just show an almost meaningless fraction of second.

    @merwok
    Copy link
    Member

    merwok commented Mar 2, 2012

    Also, when you’re tracking down slow tests, you may want to run your tests with the time needed by each test file and then each test method.

    Note that I don’t know of a way to have unittest print each test file to stdout now (i.e. a level of verbosity between “just one dot” and “each method”).

    @merwok merwok changed the title unittest: display time of each test case unittest: display time used by each test case Mar 2, 2012
    @pprokop
    Copy link
    Mannequin Author

    pprokop mannequin commented Mar 2, 2012

    I agree with Ezio,
    this feature should have an option to enable/disable.

    Anyway, I use it in different way.

    Since 2008, I've used this feature for performance comparision, whether some implementation changes in application code did not slow down application. Tests run after each commit. I compare execution time of particular test before and after commit.

    With additional scripts, I create metrics and charts using gnuplot to visualize how execution time of each test changed during the development.
    I can ensure the performance stability of the application.

    @voidspace
    Copy link
    Contributor

    I'm working on a modified version of the patch that is switched on with a command line option --timer=0.1 (or similar). Only tests that take longer than the threshold have the time printed. --timer=0 is valid, but it still only works when unittest is running with with verbose.

    @techtonik
    Copy link
    Mannequin

    techtonik mannequin commented Nov 23, 2012

    pyunit_time.patch is invalid - missing space on the last line.

    @giampaolo
    Copy link
    Contributor

    Hello. This is something I needed so I decided to implement it by taking inspiration from pytest's --durations=N argument, which basically does the same (except that it uses 0.XX precision instead of 0.XXX). PR at: #12271

    @giampaolo giampaolo added the 3.8 (EOL) end of life label Mar 11, 2019
    @giampaolo giampaolo added 3.9 only security fixes and removed 3.8 (EOL) end of life labels Feb 15, 2020
    @giampaolo
    Copy link
    Contributor

    I updated the PR for Python 3.9. I think it's ready to be merged. Can someone involved in unittest take a look at it?

    @ezio-melotti ezio-melotti transferred this issue from another repository Apr 10, 2022
    @iritkatriel iritkatriel added 3.12 only security fixes and removed 3.9 only security fixes labels Nov 25, 2022
    iritkatriel added a commit to iritkatriel/cpython that referenced this issue Apr 6, 2023
    warsaw pushed a commit to warsaw/cpython that referenced this issue Apr 11, 2023
    hrnciar pushed a commit to fedora-python/cpython that referenced this issue Apr 12, 2023
    giampaolo added a commit that referenced this issue Apr 16, 2023
    address review comments to PR-12271
    
    Signed-off-by: Giampaolo Rodola <[email protected]>
    carljm added a commit to carljm/cpython that referenced this issue Apr 17, 2023
    * main:
      Remove `expert-*` from `project-updater` GH workflow (python#103579)
      pythongh-103583: Add codecs and maps to _codecs_* module state (python#103540)
      pythongh-48330: address review comments to PR-12271 (python#103209)
      pythongh-103527: Add multibytecodec.h as make dep for _codecs_* (python#103567)
      pythongh-103553: Improve `test_inspect`: add more assertions, remove unused (python#103554)
      pythonGH-103517: Improve tests for `pathlib.Path.walk()` (pythonGH-103518)
      pythongh-102114: Make dis print more concise tracebacks for syntax errors in str inputs (python#102115)
      pythonGH-78079: Fix UNC device path root normalization in pathlib (pythonGH-102003)
      pythongh-101517: Add regression test for a lineno bug in try/except* impacting pdb (python#103547)
      pythongh-103527: Add make deps for _codecs_* and _multibytecodec (python#103528)
      pythongh-103532: Fix reST syntax in NEWS entry (pythonGH-103544)
      pythongh-103532: Add NEWS entry (python#103542)
    carljm added a commit to carljm/cpython that referenced this issue Apr 17, 2023
    * superopt:
      update generated cases with new comment
      review comments
      Remove `expert-*` from `project-updater` GH workflow (python#103579)
      pythongh-103583: Add codecs and maps to _codecs_* module state (python#103540)
      pythongh-48330: address review comments to PR-12271 (python#103209)
      pythongh-103527: Add multibytecodec.h as make dep for _codecs_* (python#103567)
      pythongh-103553: Improve `test_inspect`: add more assertions, remove unused (python#103554)
      pythonGH-103517: Improve tests for `pathlib.Path.walk()` (pythonGH-103518)
      pythongh-102114: Make dis print more concise tracebacks for syntax errors in str inputs (python#102115)
      pythonGH-78079: Fix UNC device path root normalization in pathlib (pythonGH-102003)
      pythongh-101517: Add regression test for a lineno bug in try/except* impacting pdb (python#103547)
      pythongh-103527: Add make deps for _codecs_* and _multibytecodec (python#103528)
      pythongh-103532: Fix reST syntax in NEWS entry (pythonGH-103544)
      pythongh-103532: Add NEWS entry (python#103542)
    @hugovk
    Copy link
    Member

    hugovk commented Nov 27, 2023

    Closing, the PR has been merged: #12271 👍

    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
    Labels
    3.12 only security fixes stdlib Python modules in the Lib dir tests Tests in the Lib/test dir type-feature A feature request or enhancement
    Projects
    Status: Done
    Development

    No branches or pull requests

    7 participants