Skip to content

GitLab

  • Projects
  • Groups
  • Snippets
  • Help
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
pygolang pygolang
  • Project overview
    • Project overview
    • Details
    • Activity
    • Releases
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Labels
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • Operations
    • Operations
    • Incidents
  • Analytics
    • Analytics
    • Repository
    • Value Stream
  • Snippets
    • Snippets
  • Members
    • Members
  • Activity
  • Graph
  • Create a new issue
  • Commits
  • Issue Boards
Collapse sidebar
  • nexedi
  • pygolangpygolang
  • Merge requests
  • !20

Merged
Created Oct 04, 2022 by Kirill Smelkov@kirrOwner

py.bench: Automatically discover benchmarks in test files

  • Overview 3
  • Commits 1
  • Changes 1

Since the beginning (9bf03d9c "py.bench: New command to benchmark python code similarly to go test -bench") py.bench was automatically discovering benchmarks in bench_*.py files only. This was inherited from wendelin.core which keeps its benchmarks in those files.

However in pygolang, following Go convention(*), we already have several benchmarks that reside together with tests in same *_test.py files. And currently just running py.bench does not discover them.

-> Let's fix this and teach py.bench to automatically discover benchmarks in the test files by default as well.

Pytest's default is to look for tests in test_*.py and test.py (+). Add those patterns and also keep bench.py for backward compatibility.

Before this patch running py.bench inside pygolang repository does not run any benchmark at all. After the patch py.bench runs all the benchmarks by default:

(z-dev) kirr@deca:~/src/tools/go/pygolang$ py.bench
========================= test session starts ==========================
platform linux2 -- Python 2.7.18, pytest-4.6.11, py-1.10.0, pluggy-0.13.1
rootdir: /home/kirr/src/tools/go/pygolang
plugins: timeout-1.4.2, profiling-1.7.0, mock-2.0.0
collected 18 items

pymod: golang/golang_str_test.py
Benchmarkstddecode              2000000 0.756 µs/op
Benchmarkudecode                20000   74.359 µs/op
Benchmarkstdencode              3000000 0.327 µs/op
Benchmarkbencode                40000   32.613 µs/op

pymod: golang/golang_test.py
Benchmarkpyx_select_nogil       500000  2.051 µs/op
Benchmarkpyx_go_nogil           90000   12.177 µs/op
Benchmarkpyx_chan_nogil         600000  1.826 µs/op
Benchmarkgo                     80000   13.267 µs/op
Benchmarkchan                   500000  2.076 µs/op
Benchmarkselect                 300000  3.835 µs/op
Benchmarkdef                    30000000        0.035 µs/op
Benchmarkfunc_def               40000   29.387 µs/op
Benchmarkcall                   30000000        0.043 µs/op
Benchmarkfunc_call              2000000 0.819 µs/op
Benchmarktry_finally            20000000        0.096 µs/op
Benchmarkdefer                  600000  1.755 µs/op

pymod: golang/sync_test.py
Benchmarkworkgroup_empty        40000   25.807 µs/op
Benchmarkworkgroup_raise        40000   31.637 µs/op                     [100%]

=========================== warnings summary ===========================

(*) see https://pkg.go.dev/cmd/go#hdr-Test_packages (+) see https://docs.pytest.org/en/7.1.x/reference/reference.html#confval-python_files

/cc @jerome

Assignee
Assign to
Reviewer
Request review from
None
Milestone
None
Assign milestone
Time tracking
Source branch: y/pybench-discover
GitLab Nexedi Edition | About GitLab | About Nexedi | 沪ICP备2021021310号-2 | 沪ICP备2021021310号-7