From 825808553b1b5a81081c945be4443d74bec63af4 Mon Sep 17 00:00:00 2001 From: John Sirois Date: Tue, 17 Sep 2024 18:04:56 -0700 Subject: [PATCH] Add support for sharding tests. Create a pytest plugin that supports recording test timings and then sharding tests based on timings. The initial timing baseline is included and the plugin is made to handle the case of out of date timings by assuming an average time for any test not found in the timings database. N.B.: This will be used in a forthcoming change to shard CI integration tests and bring CI times down by ~30%. --- .test_timings | 972 +++++++++++++++++++++++++++++++++++++++ testing/bin/run_tests.py | 2 +- testing/pytest_shard.py | 244 ++++++++++ tox.ini | 3 +- 4 files changed, 1219 insertions(+), 2 deletions(-) create mode 100644 .test_timings create mode 100644 testing/pytest_shard.py diff --git a/.test_timings b/.test_timings new file mode 100644 index 000000000..36830c64c --- /dev/null +++ b/.test_timings @@ -0,0 +1,972 @@ +{ + "tests/integration/build_system/test_issue_2063.py::test_build_system_no_build_backend": 23.705137064000155, + "tests/integration/build_system/test_issue_2125.py::test_get_requires_for_build_wheel": 14.270793271998627, + "tests/integration/build_system/test_pep_517.py::test_build_sdist_pyproject_toml": 10.431824943998436, + "tests/integration/build_system/test_pep_517.py::test_build_sdist_setup_py": 3.241097264999553, + "tests/integration/build_system/test_pep_518.py::test_load_build_system_pyproject_custom_repos": 6.368738531999043, + "tests/integration/cli/commands/test_export.py::test_export_multiple_artifacts": 0.5599463280013879, + "tests/integration/cli/commands/test_export.py::test_export_no_hashes": 0.5764724019991263, + "tests/integration/cli/commands/test_export.py::test_export_normalizes_name_but_not_version": 0.549575848999666, + "tests/integration/cli/commands/test_export.py::test_export_respects_target": 1.0921876510001312, + "tests/integration/cli/commands/test_export.py::test_export_single_artifact": 0.5390169159982179, + "tests/integration/cli/commands/test_export.py::test_export_sort_by": 1.094009365000602, + "tests/integration/cli/commands/test_export.py::test_export_vcs_and_local_project_requirements_issue_2416": 0.5448512620023394, + "tests/integration/cli/commands/test_export_subset.py::test_full": 1.2105930829984572, + "tests/integration/cli/commands/test_export_subset.py::test_subset": 0.5777004419996956, + "tests/integration/cli/commands/test_interpreter_inspect.py::test_inspect_all": 1.0421774119986367, + "tests/integration/cli/commands/test_interpreter_inspect.py::test_inspect_default": 0.5345238970003265, + "tests/integration/cli/commands/test_interpreter_inspect.py::test_inspect_default_combined": 0.44485457700102415, + "tests/integration/cli/commands/test_interpreter_inspect.py::test_inspect_default_markers": 0.5001226009990205, + "tests/integration/cli/commands/test_interpreter_inspect.py::test_inspect_default_tags": 0.5164696749998257, + "tests/integration/cli/commands/test_interpreter_inspect.py::test_inspect_default_verbose": 0.5104881530023704, + "tests/integration/cli/commands/test_interpreter_inspect.py::test_inspect_distributions": 7.967943709001702, + "tests/integration/cli/commands/test_interpreter_inspect.py::test_inspect_interpreter_selection": 1.523607611998159, + "tests/integration/cli/commands/test_issue_1413.py::test_find_links_create": 4.248189493999234, + "tests/integration/cli/commands/test_issue_1413.py::test_find_links_export": 3.1647282780013484, + "tests/integration/cli/commands/test_issue_1413.py::test_find_links_update": 0.9415178930012189, + "tests/integration/cli/commands/test_issue_1665.py::test_lock_black": 9.986339875998965, + "tests/integration/cli/commands/test_issue_1667.py::test_interpreter_constraints_range_coverage": 28.54182160199889, + "tests/integration/cli/commands/test_issue_1688.py::test_multiplatform_sdist": 9.247028939998927, + "tests/integration/cli/commands/test_issue_1711.py::test_backtrack_links_preserved": 20.138152433997675, + "tests/integration/cli/commands/test_issue_1734.py::test_lock_create_sdist_requires_python_different_from_current": 12.471981479999158, + "tests/integration/cli/commands/test_issue_1734.py::test_lock_create_universal_interpreter_constraint_unsatisfiable": 0.5228807420007797, + "tests/integration/cli/commands/test_issue_1741.py::test_prereleases": 10.114088285001344, + "tests/integration/cli/commands/test_issue_1801.py::test_preserve_pip_download_log": 1.9318495379993692, + "tests/integration/cli/commands/test_issue_1821.py::test_issue_1821": 64.3102546959999, + "tests/integration/cli/commands/test_issue_1821.py::test_non_universal_target_system_unsupported[sources]": 0.5673129409988178, + "tests/integration/cli/commands/test_issue_1821.py::test_non_universal_target_system_unsupported[strict]": 0.6175247189985384, + "tests/integration/cli/commands/test_issue_1821.py::test_target_system_platform_specific": 16.749356932999945, + "tests/integration/cli/commands/test_issue_1821.py::test_target_system_universal": 9.626738797998769, + "tests/integration/cli/commands/test_issue_2050.py::test_lock_uncompilable_sdist": 7.062806740001179, + "tests/integration/cli/commands/test_issue_2050.py::test_pep_517_prepare_metadata_for_build_wheel_fallback": 25.19796186699932, + "tests/integration/cli/commands/test_issue_2057.py::test_lock_create_archive_direct_reference[Full-Create Lock [PEP-508]]": 19.242107011999906, + "tests/integration/cli/commands/test_issue_2057.py::test_lock_create_archive_direct_reference[Full-Create Lock [Pip Proprietary]]": 19.634411561002707, + "tests/integration/cli/commands/test_issue_2057.py::test_lock_create_archive_direct_reference[Subset [PEP-508]-Create Lock [PEP-508]]": 19.38979077500153, + "tests/integration/cli/commands/test_issue_2057.py::test_lock_create_archive_direct_reference[Subset [PEP-508]-Create Lock [Pip Proprietary]]": 21.42602524600079, + "tests/integration/cli/commands/test_issue_2057.py::test_lock_create_archive_direct_reference[Subset [Pip Proprietary]-Create Lock [PEP-508]]": 22.092976482001177, + "tests/integration/cli/commands/test_issue_2057.py::test_lock_create_archive_direct_reference[Subset [Pip Proprietary]-Create Lock [Pip Proprietary]]": 21.877229419002106, + "tests/integration/cli/commands/test_issue_2057.py::test_lock_create_local_project_direct_reference[Full-Create Lock [PEP-508]]": 35.388697845000934, + "tests/integration/cli/commands/test_issue_2057.py::test_lock_create_local_project_direct_reference[Full-Create Lock [Pip Proprietary]]": 31.67472085799818, + "tests/integration/cli/commands/test_issue_2057.py::test_lock_create_local_project_direct_reference[Subset [PEP-508]-Create Lock [PEP-508]]": 31.470537172999684, + "tests/integration/cli/commands/test_issue_2057.py::test_lock_create_local_project_direct_reference[Subset [PEP-508]-Create Lock [Pip Proprietary]]": 31.11003878899828, + "tests/integration/cli/commands/test_issue_2057.py::test_lock_create_local_project_direct_reference[Subset [Pip Proprietary]-Create Lock [PEP-508]]": 32.8482531059999, + "tests/integration/cli/commands/test_issue_2057.py::test_lock_create_local_project_direct_reference[Subset [Pip Proprietary]-Create Lock [Pip Proprietary]]": 29.68728305700097, + "tests/integration/cli/commands/test_issue_2057.py::test_pex_archive_direct_reference[Create Pex [PEP-508]]": 3.3992190369990567, + "tests/integration/cli/commands/test_issue_2057.py::test_pex_archive_direct_reference[Create Pex [Pip Proprietary]]": 3.21388309699978, + "tests/integration/cli/commands/test_issue_2059.py::test_pypy_impl_tag_handling": 6.667998096001611, + "tests/integration/cli/commands/test_issue_2098.py::test_missing_download_lock_analysis_handling": 103.88516648900077, + "tests/integration/cli/commands/test_issue_2211.py::test_backtracking[20.3.4-patched]": 59.10025299600056, + "tests/integration/cli/commands/test_issue_2268.py::test_abi_none_locking[pip-2020-resolver]": 6.847397195999292, + "tests/integration/cli/commands/test_issue_2268.py::test_abi_none_locking[pip-legacy-resolver]": 6.292535449998468, + "tests/integration/cli/commands/test_issue_2313.py::test_venv_site_packages_copies": 12.57234439199783, + "tests/integration/cli/commands/test_issue_2414.py::test_redirects_dont_stomp_original_index_urls[23.2]": 0.02093296999919403, + "tests/integration/cli/commands/test_issue_2414.py::test_redirects_dont_stomp_original_index_urls[23.3.1]": 0.022644179998678737, + "tests/integration/cli/commands/test_issue_2519.py::test_sync_version_mismatch_new_pip[23.2]": 5.639627022997956, + "tests/integration/cli/commands/test_issue_2519.py::test_sync_version_mismatch_new_pip[23.3.1]": 5.6088530180004454, + "tests/integration/cli/commands/test_issue_2519.py::test_sync_version_mismatch_new_pip[23.3.2]": 5.2101248529979785, + "tests/integration/cli/commands/test_issue_2519.py::test_sync_version_mismatch_new_pip[24.0]": 5.423539809000431, + "tests/integration/cli/commands/test_issue_2519.py::test_sync_version_mismatch_new_pip[24.1.1]": 4.417250385000443, + "tests/integration/cli/commands/test_issue_2519.py::test_sync_version_mismatch_new_pip[24.1.2]": 5.22072631699848, + "tests/integration/cli/commands/test_issue_2519.py::test_sync_version_mismatch_new_pip[24.1]": 3.972246200000882, + "tests/integration/cli/commands/test_issue_2519.py::test_sync_version_mismatch_new_pip[24.2]": 4.361109699000735, + "tests/integration/cli/commands/test_issue_2519.py::test_sync_version_mismatch_old_pip[20.3.4-patched]": 5.99179621499934, + "tests/integration/cli/commands/test_issue_2519.py::test_sync_version_mismatch_old_pip[22.2.2]": 9.47166784899673, + "tests/integration/cli/commands/test_issue_2519.py::test_sync_version_mismatch_old_pip[22.3.1]": 8.975409950999165, + "tests/integration/cli/commands/test_issue_2519.py::test_sync_version_mismatch_old_pip[22.3]": 8.799840548001157, + "tests/integration/cli/commands/test_issue_2519.py::test_sync_version_mismatch_old_pip[23.0.1]": 8.48745894899912, + "tests/integration/cli/commands/test_issue_2519.py::test_sync_version_mismatch_old_pip[23.0]": 9.231585436999012, + "tests/integration/cli/commands/test_issue_2519.py::test_sync_version_mismatch_old_pip[23.1.1]": 8.65194101599809, + "tests/integration/cli/commands/test_issue_2519.py::test_sync_version_mismatch_old_pip[23.1.2]": 8.62983247900047, + "tests/integration/cli/commands/test_issue_2519.py::test_sync_version_mismatch_old_pip[23.1]": 8.444119218000196, + "tests/integration/cli/commands/test_issue_2519.py::test_sync_version_mismatch_prefer_binary_all_pips[20.3.4-patched]": 3.6049088800009486, + "tests/integration/cli/commands/test_issue_2519.py::test_sync_version_mismatch_prefer_binary_all_pips[22.2.2]": 4.656713786000182, + "tests/integration/cli/commands/test_issue_2519.py::test_sync_version_mismatch_prefer_binary_all_pips[22.3.1]": 4.431686763999096, + "tests/integration/cli/commands/test_issue_2519.py::test_sync_version_mismatch_prefer_binary_all_pips[22.3]": 4.352185392997853, + "tests/integration/cli/commands/test_issue_2519.py::test_sync_version_mismatch_prefer_binary_all_pips[23.0.1]": 4.260792216002301, + "tests/integration/cli/commands/test_issue_2519.py::test_sync_version_mismatch_prefer_binary_all_pips[23.0]": 4.540511709001294, + "tests/integration/cli/commands/test_issue_2519.py::test_sync_version_mismatch_prefer_binary_all_pips[23.1.1]": 4.326566071000343, + "tests/integration/cli/commands/test_issue_2519.py::test_sync_version_mismatch_prefer_binary_all_pips[23.1.2]": 4.321269129000939, + "tests/integration/cli/commands/test_issue_2519.py::test_sync_version_mismatch_prefer_binary_all_pips[23.1]": 4.416027429999303, + "tests/integration/cli/commands/test_issue_2519.py::test_sync_version_mismatch_prefer_binary_all_pips[23.2]": 4.52440991900221, + "tests/integration/cli/commands/test_issue_2519.py::test_sync_version_mismatch_prefer_binary_all_pips[23.3.1]": 4.665208233998783, + "tests/integration/cli/commands/test_issue_2519.py::test_sync_version_mismatch_prefer_binary_all_pips[23.3.2]": 4.003282254001533, + "tests/integration/cli/commands/test_issue_2519.py::test_sync_version_mismatch_prefer_binary_all_pips[24.0]": 4.199836136000158, + "tests/integration/cli/commands/test_issue_2519.py::test_sync_version_mismatch_prefer_binary_all_pips[24.1.1]": 4.291158068999721, + "tests/integration/cli/commands/test_issue_2519.py::test_sync_version_mismatch_prefer_binary_all_pips[24.1.2]": 4.29137395899852, + "tests/integration/cli/commands/test_issue_2519.py::test_sync_version_mismatch_prefer_binary_all_pips[24.1]": 5.081012221999117, + "tests/integration/cli/commands/test_issue_2519.py::test_sync_version_mismatch_prefer_binary_all_pips[24.2]": 4.481024034999791, + "tests/integration/cli/commands/test_local_project_lock.py::test_fingerprint_stability": 42.517871965002996, + "tests/integration/cli/commands/test_local_project_lock.py::test_path_mappings": 17.23541498099985, + "tests/integration/cli/commands/test_lock.py::test_create": 3.762548586997582, + "tests/integration/cli/commands/test_lock.py::test_create_local": 44.809406409000076, + "tests/integration/cli/commands/test_lock.py::test_create_style": 23.495344895000017, + "tests/integration/cli/commands/test_lock.py::test_create_universal_platform_check": 29.851100494999628, + "tests/integration/cli/commands/test_lock.py::test_create_universal_python_unsupported": 0.584645165999973, + "tests/integration/cli/commands/test_lock.py::test_create_vcs": 18.6993094909958, + "tests/integration/cli/commands/test_lock.py::test_excludes_pep517_build_requirements_issue_1565": 12.107148187002167, + "tests/integration/cli/commands/test_lock.py::test_universal_lock[pip-2020-resolver]": 8.586743163001302, + "tests/integration/cli/commands/test_lock.py::test_universal_lock[pip-legacy-resolver]": 9.1366850480008, + "tests/integration/cli/commands/test_lock.py::test_update_add_impossible": 5.746105218000594, + "tests/integration/cli/commands/test_lock.py::test_update_noop": 3.1910288449998916, + "tests/integration/cli/commands/test_lock.py::test_update_noop_dry_run": 2.5794029099997715, + "tests/integration/cli/commands/test_lock.py::test_update_noop_dry_run_check": 2.4353796659979707, + "tests/integration/cli/commands/test_lock.py::test_update_partial": 4.591824254999665, + "tests/integration/cli/commands/test_lock.py::test_update_targeted_add": 2.719446256998708, + "tests/integration/cli/commands/test_lock.py::test_update_targeted_add_dry_run": 3.5348570849982934, + "tests/integration/cli/commands/test_lock.py::test_update_targeted_add_dry_run_check": 2.629940363998685, + "tests/integration/cli/commands/test_lock.py::test_update_targeted_add_transitive": 4.197481881001295, + "tests/integration/cli/commands/test_lock.py::test_update_targeted_closure_shrink": 1.5589846179991582, + "tests/integration/cli/commands/test_lock.py::test_update_targeted_downgrade": 3.0223215080004593, + "tests/integration/cli/commands/test_lock.py::test_update_targeted_impossible": 5.065494065000166, + "tests/integration/cli/commands/test_lock.py::test_update_targeted_mixed_dry_run": 2.900955322998925, + "tests/integration/cli/commands/test_lock.py::test_update_targeted_upgrade": 2.8585549380004522, + "tests/integration/cli/commands/test_lock.py::test_update_targeted_upgrade_dry_run": 3.0249323659991205, + "tests/integration/cli/commands/test_lock.py::test_update_targeted_upgrade_dry_run_check": 2.9083178950004367, + "tests/integration/cli/commands/test_lock_foreign_platform_sdist.py::test_lock_foreign_platform_sdist": 21.719304239999474, + "tests/integration/cli/commands/test_lock_resolve_auth.py::test_authenticated_lock_netrc_issue_1753": 22.42468130299858, + "tests/integration/cli/commands/test_lock_resolve_auth.py::test_authenticated_lock_url_issue_1753": 15.527281103999485, + "tests/integration/cli/commands/test_lock_resolve_auth.py::test_bad_netrc_issue_1762": 11.395655624000938, + "tests/integration/cli/commands/test_lock_sync.py::test_sync_add": 1.3327249070007383, + "tests/integration/cli/commands/test_lock_sync.py::test_sync_complex": 18.90749184499873, + "tests/integration/cli/commands/test_lock_sync.py::test_sync_configuration": 1.214871153999411, + "tests/integration/cli/commands/test_lock_sync.py::test_sync_extras": 12.141445251996629, + "tests/integration/cli/commands/test_lock_sync.py::test_sync_implicit_create": 1.7830494370009546, + "tests/integration/cli/commands/test_lock_sync.py::test_sync_implicit_create_lock_create_equivalence": 2.837152320998939, + "tests/integration/cli/commands/test_lock_sync.py::test_sync_implicit_create_venv": 1.8097434850005811, + "tests/integration/cli/commands/test_lock_sync.py::test_sync_implicit_lock_create_venv_create_run": 1.693764244000704, + "tests/integration/cli/commands/test_lock_sync.py::test_sync_noop": 1.2536473820000538, + "tests/integration/cli/commands/test_lock_sync.py::test_sync_remove": 1.485045778003041, + "tests/integration/cli/commands/test_lock_sync.py::test_sync_strict_to_sources": 2.305470859999332, + "tests/integration/cli/commands/test_lock_sync.py::test_sync_strict_to_strict": 2.504413333001139, + "tests/integration/cli/commands/test_lock_sync.py::test_sync_universal_to_universal": 3.298370836000686, + "tests/integration/cli/commands/test_lock_sync.py::test_sync_update": 1.4638082050005323, + "tests/integration/cli/commands/test_lock_sync.py::test_sync_venv_add": 2.265757556002427, + "tests/integration/cli/commands/test_lock_sync.py::test_sync_venv_complex": 2.3170232839984237, + "tests/integration/cli/commands/test_lock_sync.py::test_sync_venv_dry_run_create": 1.5090650809979707, + "tests/integration/cli/commands/test_lock_sync.py::test_sync_venv_dry_run_update": 9.219188942000983, + "tests/integration/cli/commands/test_lock_sync.py::test_sync_venv_noop": 2.3888141099996574, + "tests/integration/cli/commands/test_lock_sync.py::test_sync_venv_remove": 2.1409491459999117, + "tests/integration/cli/commands/test_lock_sync.py::test_sync_venv_run": 9.588612842000657, + "tests/integration/cli/commands/test_lock_sync.py::test_sync_venv_run_no_retain_pip_preinstalled": 8.616269431999172, + "tests/integration/cli/commands/test_lock_sync.py::test_sync_venv_run_retain_pip_no_pip_preinstalled": 12.715994620999481, + "tests/integration/cli/commands/test_lock_sync.py::test_sync_venv_run_retain_pip_preinstalled": 9.761513239998749, + "tests/integration/cli/commands/test_lock_sync.py::test_sync_venv_run_retain_user_pip[--no-retain-pip]": 11.675076375000572, + "tests/integration/cli/commands/test_lock_sync.py::test_sync_venv_run_retain_user_pip[--retain-pip]": 29.274845756001014, + "tests/integration/cli/commands/test_lock_sync.py::test_sync_venv_run_retain_user_pip[default]": 12.976294445003077, + "tests/integration/cli/commands/test_lock_sync.py::test_sync_venv_transitive_to_direct_and_vice_versa": 2.2862613100005547, + "tests/integration/cli/commands/test_lock_sync.py::test_sync_venv_update": 2.4540404080016742, + "tests/integration/cli/commands/test_lock_update.py::test_lock_update_repo_migration_artifacts_added": 9.554117231002238, + "tests/integration/cli/commands/test_lock_update.py::test_lock_update_repo_migration_artifacts_removed": 11.909587341000588, + "tests/integration/cli/commands/test_lock_update.py::test_lock_update_repo_migration_corrupted": 9.91370213799928, + "tests/integration/cli/commands/test_lock_update.py::test_lock_update_repo_migration_dry_run": 8.727205528000923, + "tests/integration/cli/commands/test_lock_update.py::test_lock_update_repo_migration_dry_run_path_mapping": 9.203789791001327, + "tests/integration/cli/commands/test_lock_update.py::test_lock_update_repo_migration_nominal": 10.12488354800007, + "tests/integration/cli/commands/test_lock_update_issues_2332_2334.py::test_lock_update_conflict": 8.355737153000518, + "tests/integration/cli/commands/test_lock_update_issues_2332_2334.py::test_lock_update_delete_invalid": 0.4725146210003004, + "tests/integration/cli/commands/test_lock_update_issues_2332_2334.py::test_lock_update_delete_nominal": 0.5044759499996871, + "tests/integration/cli/commands/test_lock_update_issues_2332_2334.py::test_lock_update_delete_noop": 0.8564142460018047, + "tests/integration/cli/commands/test_lock_update_issues_2332_2334.py::test_lock_update_delete_req_only": 0.8043117710003571, + "tests/integration/cli/commands/test_lock_update_issues_2332_2334.py::test_lock_update_downgrade": 1.7179704479985958, + "tests/integration/cli/commands/test_lock_update_issues_2332_2334.py::test_lock_update_invalid": 0.5927987249997386, + "tests/integration/cli/commands/test_lock_update_issues_2332_2334.py::test_lock_update_mixed": 1.4615046359995176, + "tests/integration/cli/commands/test_lock_update_issues_2332_2334.py::test_lock_update_nominal": 1.4131392130002496, + "tests/integration/cli/commands/test_lock_update_issues_2332_2334.py::test_lock_update_replace": 1.2529194789985922, + "tests/integration/cli/commands/test_lock_update_issues_2332_2334.py::test_lock_update_replace_invalid": 0.47052740499930223, + "tests/integration/cli/commands/test_vcs_lock.py::test_subdir": 11.934538567000345, + "tests/integration/cli/commands/test_vcs_lock.py::test_vcs_direct_reference": 11.295143434001147, + "tests/integration/cli/commands/test_vcs_lock.py::test_vcs_equivalence": 10.437738239999817, + "tests/integration/cli/commands/test_vcs_lock.py::test_vcs_fingerprint_stability": 14.112478018001639, + "tests/integration/cli/commands/test_vcs_lock.py::test_vcs_pip_proprietary": 11.648708090999207, + "tests/integration/cli/commands/test_vcs_lock.py::test_vcs_transitive": 13.947719515001154, + "tests/integration/cli/commands/test_venv_create.py::test_flat[flat-zipped]": 3.0210147310008324, + "tests/integration/cli/commands/test_venv_create.py::test_flat[flat]": 3.3856495620002534, + "tests/integration/cli/commands/test_venv_create.py::test_flat_empty": 0.5030622609992861, + "tests/integration/cli/commands/test_venv_create.py::test_flat_zipped_empty": 0.5272347939990141, + "tests/integration/cli/commands/test_venv_create.py::test_flat_zipped_prefix": 0.6773313969988521, + "tests/integration/cli/commands/test_venv_create.py::test_foreign_target": 2.8566012519986543, + "tests/integration/cli/commands/test_venv_create.py::test_pex_scope_flat": 1.72091046100104, + "tests/integration/cli/commands/test_venv_create.py::test_pex_scope_venv": 2.982615998000256, + "tests/integration/cli/commands/test_venv_create.py::test_venv": 8.463621823000722, + "tests/integration/cli/commands/test_venv_create.py::test_venv_empty": 1.0400123079998593, + "tests/integration/cli/commands/test_venv_create.py::test_venv_pip": 7.660843211999236, + "tests/integration/cli/commands/test_venv_create.py::test_venv_update_target_mismatch": 3.2551212670005043, + "tests/integration/cli/commands/test_venv_inspect.py::test_inspect_pex_venv": 4.661454649998632, + "tests/integration/cli/commands/test_venv_inspect.py::test_inspect_venv_non_pex[system_site_packages=False-2.7.18]": 6.777995599999485, + "tests/integration/cli/commands/test_venv_inspect.py::test_inspect_venv_non_pex[system_site_packages=False-3.10.7]": 10.698960055000498, + "tests/integration/cli/commands/test_venv_inspect.py::test_inspect_venv_non_pex[system_site_packages=True-2.7.18]": 6.308258165998268, + "tests/integration/cli/commands/test_venv_inspect.py::test_inspect_venv_non_pex[system_site_packages=True-3.10.7]": 10.796862553997926, + "tests/integration/cli/commands/test_venv_inspect.py::test_inspect_venv_virtualenv[system_site_packages=False]": 5.380488000999321, + "tests/integration/cli/commands/test_venv_inspect.py::test_inspect_venv_virtualenv[system_site_packages=True]": 5.91904285199962, + "tests/integration/cli/commands/test_venv_inspect.py::test_no_python": 0.597792334998303, + "tests/integration/cli/commands/test_venv_inspect.py::test_not_venv_dir": 0.5781461639999179, + "tests/integration/cli/commands/test_venv_inspect.py::test_not_venv_interpreter": 0.5714804830004141, + "tests/integration/resolve/pep_691/test_api.py::test_http_error": 0.3912691810000979, + "tests/integration/resolve/pep_691/test_api.py::test_invalid_content_type": 0.003982520998761174, + "tests/integration/resolve/pep_691/test_api.py::test_invalid_json": 0.14972305800256436, + "tests/integration/resolve/pep_691/test_api.py::test_valid[application/vnd.pypi.simple.v1+json]": 0.38636438400135376, + "tests/integration/resolve/test_issue_1907.py::test_pre_resolved_dists_local_project_requirement": 3.107479501000853, + "tests/integration/resolve/test_issue_1907.py::test_pre_resolved_dists_nominal": 8.888802841000143, + "tests/integration/resolve/test_issue_1907.py::test_pre_resolved_dists_offline": 6.691651921999437, + "tests/integration/resolve/test_issue_1907.py::test_pre_resolved_dists_project_requirement": 8.577249934000065, + "tests/integration/resolve/test_issue_1907.py::test_pre_resolved_dists_subset": 3.243680650999522, + "tests/integration/resolve/test_issue_1918.py::test_redacted_requirement_handling[20.3.4-patched-pip-2020-resolver-direct-reference]": 16.074225402999218, + "tests/integration/resolve/test_issue_1918.py::test_redacted_requirement_handling[20.3.4-patched-pip-2020-resolver-pip-proprietary]": 15.663849479997225, + "tests/integration/resolve/test_issue_1918.py::test_redacted_requirement_handling[20.3.4-patched-pip-legacy-resolver-direct-reference]": 15.80775869900026, + "tests/integration/resolve/test_issue_1918.py::test_redacted_requirement_handling[20.3.4-patched-pip-legacy-resolver-pip-proprietary]": 15.853604477999397, + "tests/integration/resolve/test_issue_1918.py::test_redacted_requirement_handling[22.2.2-pip-2020-resolver-direct-reference]": 28.248950621002223, + "tests/integration/resolve/test_issue_1918.py::test_redacted_requirement_handling[22.2.2-pip-2020-resolver-pip-proprietary]": 27.0433279079989, + "tests/integration/resolve/test_issue_1918.py::test_redacted_requirement_handling[22.2.2-pip-legacy-resolver-direct-reference]": 26.040775339999527, + "tests/integration/resolve/test_issue_1918.py::test_redacted_requirement_handling[22.2.2-pip-legacy-resolver-pip-proprietary]": 27.552419311999984, + "tests/integration/resolve/test_issue_1918.py::test_redacted_requirement_handling[22.3-pip-2020-resolver-direct-reference]": 28.05538978700133, + "tests/integration/resolve/test_issue_1918.py::test_redacted_requirement_handling[22.3-pip-2020-resolver-pip-proprietary]": 27.30893393900078, + "tests/integration/resolve/test_issue_1918.py::test_redacted_requirement_handling[22.3-pip-legacy-resolver-direct-reference]": 27.081935247999354, + "tests/integration/resolve/test_issue_1918.py::test_redacted_requirement_handling[22.3-pip-legacy-resolver-pip-proprietary]": 28.613239842999974, + "tests/integration/resolve/test_issue_1918.py::test_redacted_requirement_handling[22.3.1-pip-2020-resolver-direct-reference]": 28.9926482080009, + "tests/integration/resolve/test_issue_1918.py::test_redacted_requirement_handling[22.3.1-pip-2020-resolver-pip-proprietary]": 24.844316575999983, + "tests/integration/resolve/test_issue_1918.py::test_redacted_requirement_handling[22.3.1-pip-legacy-resolver-direct-reference]": 28.49711924699841, + "tests/integration/resolve/test_issue_1918.py::test_redacted_requirement_handling[22.3.1-pip-legacy-resolver-pip-proprietary]": 28.554792729000837, + "tests/integration/resolve/test_issue_1918.py::test_redacted_requirement_handling[23.0-pip-2020-resolver-direct-reference]": 26.711334173001887, + "tests/integration/resolve/test_issue_1918.py::test_redacted_requirement_handling[23.0-pip-2020-resolver-pip-proprietary]": 26.57904100000087, + "tests/integration/resolve/test_issue_1918.py::test_redacted_requirement_handling[23.0-pip-legacy-resolver-direct-reference]": 24.60296696599835, + "tests/integration/resolve/test_issue_1918.py::test_redacted_requirement_handling[23.0-pip-legacy-resolver-pip-proprietary]": 24.80950780299827, + "tests/integration/resolve/test_issue_1918.py::test_redacted_requirement_handling[23.0.1-pip-2020-resolver-direct-reference]": 26.320945454999674, + "tests/integration/resolve/test_issue_1918.py::test_redacted_requirement_handling[23.0.1-pip-2020-resolver-pip-proprietary]": 29.05520833999981, + "tests/integration/resolve/test_issue_1918.py::test_redacted_requirement_handling[23.0.1-pip-legacy-resolver-direct-reference]": 25.33388738800022, + "tests/integration/resolve/test_issue_1918.py::test_redacted_requirement_handling[23.0.1-pip-legacy-resolver-pip-proprietary]": 26.354628909000894, + "tests/integration/resolve/test_issue_1918.py::test_redacted_requirement_handling[23.1-pip-2020-resolver-direct-reference]": 27.050133201997596, + "tests/integration/resolve/test_issue_1918.py::test_redacted_requirement_handling[23.1-pip-2020-resolver-pip-proprietary]": 26.48400729700188, + "tests/integration/resolve/test_issue_1918.py::test_redacted_requirement_handling[23.1-pip-legacy-resolver-direct-reference]": 27.84066394399997, + "tests/integration/resolve/test_issue_1918.py::test_redacted_requirement_handling[23.1-pip-legacy-resolver-pip-proprietary]": 25.511549968001418, + "tests/integration/resolve/test_issue_1918.py::test_redacted_requirement_handling[23.1.1-pip-2020-resolver-direct-reference]": 23.86635306000062, + "tests/integration/resolve/test_issue_1918.py::test_redacted_requirement_handling[23.1.1-pip-2020-resolver-pip-proprietary]": 24.97553863399844, + "tests/integration/resolve/test_issue_1918.py::test_redacted_requirement_handling[23.1.1-pip-legacy-resolver-direct-reference]": 27.320041660999777, + "tests/integration/resolve/test_issue_1918.py::test_redacted_requirement_handling[23.1.1-pip-legacy-resolver-pip-proprietary]": 27.95418459800021, + "tests/integration/resolve/test_issue_1918.py::test_redacted_requirement_handling[23.1.2-pip-2020-resolver-direct-reference]": 25.717284172998916, + "tests/integration/resolve/test_issue_1918.py::test_redacted_requirement_handling[23.1.2-pip-2020-resolver-pip-proprietary]": 26.391160798999408, + "tests/integration/resolve/test_issue_1918.py::test_redacted_requirement_handling[23.1.2-pip-legacy-resolver-direct-reference]": 26.628686666999783, + "tests/integration/resolve/test_issue_1918.py::test_redacted_requirement_handling[23.1.2-pip-legacy-resolver-pip-proprietary]": 26.69273798299946, + "tests/integration/resolve/test_issue_1918.py::test_redacted_requirement_handling[23.2-pip-2020-resolver-direct-reference]": 26.569368537000628, + "tests/integration/resolve/test_issue_1918.py::test_redacted_requirement_handling[23.2-pip-2020-resolver-pip-proprietary]": 27.4563099420011, + "tests/integration/resolve/test_issue_1918.py::test_redacted_requirement_handling[23.3.1-pip-2020-resolver-direct-reference]": 26.944246478999048, + "tests/integration/resolve/test_issue_1918.py::test_redacted_requirement_handling[23.3.1-pip-2020-resolver-pip-proprietary]": 26.19822126500003, + "tests/integration/resolve/test_issue_1918.py::test_redacted_requirement_handling[23.3.2-pip-2020-resolver-direct-reference]": 26.961246703998768, + "tests/integration/resolve/test_issue_1918.py::test_redacted_requirement_handling[23.3.2-pip-2020-resolver-pip-proprietary]": 27.253378414001418, + "tests/integration/resolve/test_issue_1918.py::test_redacted_requirement_handling[24.0-pip-2020-resolver-direct-reference]": 27.788130550998176, + "tests/integration/resolve/test_issue_1918.py::test_redacted_requirement_handling[24.0-pip-2020-resolver-pip-proprietary]": 30.74476526900071, + "tests/integration/resolve/test_issue_1918.py::test_redacted_requirement_handling[24.1-pip-2020-resolver-direct-reference]": 31.13406096200015, + "tests/integration/resolve/test_issue_1918.py::test_redacted_requirement_handling[24.1-pip-2020-resolver-pip-proprietary]": 30.116904499000157, + "tests/integration/resolve/test_issue_1918.py::test_redacted_requirement_handling[24.1.1-pip-2020-resolver-direct-reference]": 28.3058202480006, + "tests/integration/resolve/test_issue_1918.py::test_redacted_requirement_handling[24.1.1-pip-2020-resolver-pip-proprietary]": 27.704902197001502, + "tests/integration/resolve/test_issue_1918.py::test_redacted_requirement_handling[24.1.2-pip-2020-resolver-direct-reference]": 25.813279335001425, + "tests/integration/resolve/test_issue_1918.py::test_redacted_requirement_handling[24.1.2-pip-2020-resolver-pip-proprietary]": 24.702726808998705, + "tests/integration/resolve/test_issue_1918.py::test_redacted_requirement_handling[24.2-pip-2020-resolver-direct-reference]": 26.771599220999633, + "tests/integration/resolve/test_issue_1918.py::test_redacted_requirement_handling[24.2-pip-2020-resolver-pip-proprietary]": 24.51555068700145, + "tests/integration/resolve/test_issue_2092.py::test_vcs_respects_target": 54.28292324600079, + "tests/integration/resolve/test_issue_2412.py::test_invalid_project": 1.2364743769994675, + "tests/integration/resolve/test_issue_2412.py::test_locked_project": 46.39905976200134, + "tests/integration/scie/test_discussion_2516.py::test_discussion_2516_op": 10.514068976000999, + "tests/integration/scie/test_pex_scie.py::test_basic[VENV-loose-eager]": 2.9244820439998875, + "tests/integration/scie/test_pex_scie.py::test_basic[VENV-loose-lazy]": 3.406993288999729, + "tests/integration/scie/test_pex_scie.py::test_basic[VENV-packed-eager]": 2.962124842999401, + "tests/integration/scie/test_pex_scie.py::test_basic[VENV-packed-lazy]": 2.4696895889992447, + "tests/integration/scie/test_pex_scie.py::test_basic[VENV-sh-boot-loose-eager]": 3.0153835979999712, + "tests/integration/scie/test_pex_scie.py::test_basic[VENV-sh-boot-loose-lazy]": 2.8999062269995193, + "tests/integration/scie/test_pex_scie.py::test_basic[VENV-sh-boot-packed-eager]": 2.345687095001267, + "tests/integration/scie/test_pex_scie.py::test_basic[VENV-sh-boot-packed-lazy]": 2.6850433930012514, + "tests/integration/scie/test_pex_scie.py::test_basic[VENV-sh-boot-zipapp-eager]": 2.923731869997937, + "tests/integration/scie/test_pex_scie.py::test_basic[VENV-sh-boot-zipapp-lazy]": 2.6708263769996847, + "tests/integration/scie/test_pex_scie.py::test_basic[VENV-zipapp-eager]": 2.7418898779997107, + "tests/integration/scie/test_pex_scie.py::test_basic[VENV-zipapp-lazy]": 2.746738114999971, + "tests/integration/scie/test_pex_scie.py::test_basic[ZIPAPP-loose-eager]": 2.9266409299998486, + "tests/integration/scie/test_pex_scie.py::test_basic[ZIPAPP-loose-lazy]": 2.6655138840014843, + "tests/integration/scie/test_pex_scie.py::test_basic[ZIPAPP-packed-eager]": 2.936194837000585, + "tests/integration/scie/test_pex_scie.py::test_basic[ZIPAPP-packed-lazy]": 2.7183575660001225, + "tests/integration/scie/test_pex_scie.py::test_basic[ZIPAPP-sh-boot-loose-eager]": 3.5299147370005812, + "tests/integration/scie/test_pex_scie.py::test_basic[ZIPAPP-sh-boot-loose-lazy]": 3.1457322770002065, + "tests/integration/scie/test_pex_scie.py::test_basic[ZIPAPP-sh-boot-packed-eager]": 3.1068667819999973, + "tests/integration/scie/test_pex_scie.py::test_basic[ZIPAPP-sh-boot-packed-lazy]": 3.684335829000702, + "tests/integration/scie/test_pex_scie.py::test_basic[ZIPAPP-sh-boot-zipapp-eager]": 3.574671779999335, + "tests/integration/scie/test_pex_scie.py::test_basic[ZIPAPP-sh-boot-zipapp-lazy]": 3.912334415002988, + "tests/integration/scie/test_pex_scie.py::test_basic[ZIPAPP-zipapp-eager]": 3.178780029000336, + "tests/integration/scie/test_pex_scie.py::test_basic[ZIPAPP-zipapp-lazy]": 2.9238684450010624, + "tests/integration/scie/test_pex_scie.py::test_custom_lazy_urls": 5.523280051998881, + "tests/integration/scie/test_pex_scie.py::test_hashes": 3.389476917000138, + "tests/integration/scie/test_pex_scie.py::test_multiple_platforms": 9.834899697001674, + "tests/integration/scie/test_pex_scie.py::test_pbs_stripped": 4.251548565998746, + "tests/integration/scie/test_pex_scie.py::test_pex_pex_scie": 18.036350952002977, + "tests/integration/scie/test_pex_scie.py::test_scie_busybox_console_script_inject_args[VENV]": 3.190390342999308, + "tests/integration/scie/test_pex_scie.py::test_scie_busybox_console_script_inject_args[ZIPAPP]": 4.717429465998066, + "tests/integration/scie/test_pex_scie.py::test_scie_busybox_console_script_inject_env[VENV]": 3.1477367730003607, + "tests/integration/scie/test_pex_scie.py::test_scie_busybox_console_script_inject_env[ZIPAPP]": 5.129535948000921, + "tests/integration/scie/test_pex_scie.py::test_scie_busybox_console_script_inject_python_args[VENV]": 3.2525234509994334, + "tests/integration/scie/test_pex_scie.py::test_scie_busybox_console_script_inject_python_args[ZIPAPP]": 5.062666379000802, + "tests/integration/scie/test_pex_scie.py::test_scie_busybox_console_scripts_add_distribution": 3.8198337689991604, + "tests/integration/scie/test_pex_scie.py::test_scie_busybox_console_scripts_add_script": 5.061513753000327, + "tests/integration/scie/test_pex_scie.py::test_scie_busybox_console_scripts_all[VENV]": 2.8959319540008437, + "tests/integration/scie/test_pex_scie.py::test_scie_busybox_console_scripts_all[ZIPAPP]": 5.700805227999808, + "tests/integration/scie/test_pex_scie.py::test_scie_busybox_console_scripts_remove_distribution": 4.552033439000297, + "tests/integration/scie/test_pex_scie.py::test_scie_busybox_console_scripts_remove_script": 3.658190887001183, + "tests/integration/scie/test_pex_scie.py::test_scie_busybox_module_entry_point_injections": 3.8874632499992003, + "tests/integration/scie/test_pex_scie.py::test_scie_busybox_module_entry_points": 3.833583183999508, + "tests/integration/scie/test_pex_scie.py::test_scie_name_style_platform_file_suffix": 1.5269018560011318, + "tests/integration/scie/test_pex_scie.py::test_scie_name_style_platform_parent_dir": 1.6655988579987024, + "tests/integration/scie/test_pex_scie.py::test_scie_only": 2.7244954100006, + "tests/integration/scie/test_pex_scie.py::test_script_not_found": 2.064065531001688, + "tests/integration/scie/test_pex_scie.py::test_specified_interpreter": 3.910143765000612, + "tests/integration/scie/test_pex_scie.py::test_specified_science_binary": 15.751822446001825, + "tests/integration/test_downloads.py::test_issue_1849_download_foreign_artifact": 0.5390652170008252, + "tests/integration/test_downloads.py::test_issue_1849_fingerprint_foreign_artifact": 0.6593375190004735, + "tests/integration/test_excludes.py::test_exclude": 22.752143533996787, + "tests/integration/test_excludes.py::test_exclude_deep[20.3.4-patched-legacy]": 21.433430450999367, + "tests/integration/test_excludes.py::test_exclude_deep[20.3.4-patched-resolvelib]": 21.18112032299905, + "tests/integration/test_excludes.py::test_exclude_deep[22.2.2-legacy]": 26.678118260999327, + "tests/integration/test_excludes.py::test_exclude_deep[22.2.2-resolvelib]": 26.15737838700079, + "tests/integration/test_excludes.py::test_exclude_deep[22.3-legacy]": 23.852578030000586, + "tests/integration/test_excludes.py::test_exclude_deep[22.3-resolvelib]": 25.76165032099925, + "tests/integration/test_excludes.py::test_exclude_deep[22.3.1-legacy]": 25.78837595100231, + "tests/integration/test_excludes.py::test_exclude_deep[22.3.1-resolvelib]": 24.60867951399996, + "tests/integration/test_excludes.py::test_exclude_deep[23.0-legacy]": 26.85416245399938, + "tests/integration/test_excludes.py::test_exclude_deep[23.0-resolvelib]": 29.448579968999184, + "tests/integration/test_excludes.py::test_exclude_deep[23.0.1-legacy]": 28.32609424200018, + "tests/integration/test_excludes.py::test_exclude_deep[23.0.1-resolvelib]": 27.010772080000606, + "tests/integration/test_excludes.py::test_exclude_deep[23.1-legacy]": 28.202057482998498, + "tests/integration/test_excludes.py::test_exclude_deep[23.1-resolvelib]": 24.776411475000714, + "tests/integration/test_excludes.py::test_exclude_deep[23.1.1-legacy]": 24.678853898001762, + "tests/integration/test_excludes.py::test_exclude_deep[23.1.1-resolvelib]": 24.523949176000315, + "tests/integration/test_excludes.py::test_exclude_deep[23.1.2-legacy]": 24.610311020000154, + "tests/integration/test_excludes.py::test_exclude_deep[23.1.2-resolvelib]": 25.420576959000755, + "tests/integration/test_excludes.py::test_exclude_deep[23.2-resolvelib]": 26.36643075900065, + "tests/integration/test_excludes.py::test_exclude_deep[23.3.1-resolvelib]": 25.3797640720004, + "tests/integration/test_excludes.py::test_exclude_deep[23.3.2-resolvelib]": 24.704746381001314, + "tests/integration/test_excludes.py::test_exclude_deep[24.0-resolvelib]": 25.17274000799989, + "tests/integration/test_excludes.py::test_exclude_deep[24.1-resolvelib]": 25.28100236099999, + "tests/integration/test_excludes.py::test_exclude_deep[24.1.1-resolvelib]": 26.229380861999744, + "tests/integration/test_excludes.py::test_exclude_deep[24.1.2-resolvelib]": 27.705137360999288, + "tests/integration/test_excludes.py::test_exclude_deep[24.2-resolvelib]": 28.114199552001082, + "tests/integration/test_excludes.py::test_lock_exclude": 34.112495194001895, + "tests/integration/test_excludes.py::test_pre_resolved_dists_exclude": 32.37565033800092, + "tests/integration/test_excludes.py::test_requirements_pex_exclude": 17.269458208998913, + "tests/integration/test_executuon_mode_venv.py::test_custom_prompt": 2.2365927470000315, + "tests/integration/test_inject_env_and_args.py::test_complex[VENV]": 6.825439557000209, + "tests/integration/test_inject_env_and_args.py::test_complex[ZIPAPP]": 11.015647737000108, + "tests/integration/test_inject_env_and_args.py::test_inject_args[VENV]": 4.153282465998927, + "tests/integration/test_inject_env_and_args.py::test_inject_args[ZIPAPP]": 17.22384842700012, + "tests/integration/test_inject_env_and_args.py::test_inject_env[VENV]": 2.436724866001896, + "tests/integration/test_inject_env_and_args.py::test_inject_env[ZIPAPP]": 8.000707430001057, + "tests/integration/test_inject_env_and_args.py::test_inject_env_invalid": 0.6233498699984921, + "tests/integration/test_inject_env_and_args.py::test_pyuwsgi[VENV]": 8.988499939732719e-05, + "tests/integration/test_inject_env_and_args.py::test_pyuwsgi[ZIPAPP]": 9.599300028639846e-05, + "tests/integration/test_inject_python_args.py::test_inject_python_args[PYTHON-VENV]": 4.263432035000733, + "tests/integration/test_inject_python_args.py::test_inject_python_args[PYTHON-ZIPAPP]": 8.60013976099981, + "tests/integration/test_inject_python_args.py::test_inject_python_args[SH_BOOT-VENV]": 3.889370887000041, + "tests/integration/test_inject_python_args.py::test_inject_python_args[SH_BOOT-ZIPAPP]": 7.42621059999874, + "tests/integration/test_inject_python_args.py::test_issue_2422[PYTHON-VENV]": 6.967637891002596, + "tests/integration/test_inject_python_args.py::test_issue_2422[PYTHON-ZIPAPP]": 13.882127465998565, + "tests/integration/test_inject_python_args.py::test_issue_2422[SH_BOOT-VENV]": 8.829189351003151, + "tests/integration/test_inject_python_args.py::test_issue_2422[SH_BOOT-ZIPAPP]": 13.333218288000353, + "tests/integration/test_inject_python_args.py::test_python_args_passthrough[PYTHON-VENV]": 8.23392371400223, + "tests/integration/test_inject_python_args.py::test_python_args_passthrough[PYTHON-ZIPAPP]": 16.361272316000395, + "tests/integration/test_inject_python_args.py::test_python_args_passthrough[SH_BOOT-VENV]": 7.598752114998206, + "tests/integration/test_inject_python_args.py::test_python_args_passthrough[SH_BOOT-ZIPAPP]": 14.70484973800012, + "tests/integration/test_integration.py::test_binary_scripts[.whl file-loose-PEX]": 2.6424922450005397, + "tests/integration/test_integration.py::test_binary_scripts[.whl file-loose-VENV]": 1.928048886000397, + "tests/integration/test_integration.py::test_binary_scripts[.whl file-packed-PEX]": 2.725598145998447, + "tests/integration/test_integration.py::test_binary_scripts[.whl file-packed-VENV]": 1.7304498060020705, + "tests/integration/test_integration.py::test_binary_scripts[.whl file-zipapp-PEX]": 3.152076104997832, + "tests/integration/test_integration.py::test_binary_scripts[.whl file-zipapp-VENV]": 1.7312151200021617, + "tests/integration/test_integration.py::test_binary_scripts[installed wheel chroot-loose-PEX]": 2.744670698999471, + "tests/integration/test_integration.py::test_binary_scripts[installed wheel chroot-loose-VENV]": 1.6736210769995523, + "tests/integration/test_integration.py::test_binary_scripts[installed wheel chroot-packed-PEX]": 3.4829922230001102, + "tests/integration/test_integration.py::test_binary_scripts[installed wheel chroot-packed-VENV]": 1.6489292060014122, + "tests/integration/test_integration.py::test_binary_scripts[installed wheel chroot-zipapp-PEX]": 4.2043094169985125, + "tests/integration/test_integration.py::test_binary_scripts[installed wheel chroot-zipapp-VENV]": 2.668494846999238, + "tests/integration/test_integration.py::test_cache_disable": 6.2897224860007555, + "tests/integration/test_integration.py::test_console_script_from_pex_path": 5.800049160001436, + "tests/integration/test_integration.py::test_constraint_file_from_url": 3.719914481998785, + "tests/integration/test_integration.py::test_cross_platform_abi_targeting_behavior_exact": 4.938133597999695, + "tests/integration/test_integration.py::test_disable_cache": 4.017372132002492, + "tests/integration/test_integration.py::test_emit_warnings_default": 3.2288069459991675, + "tests/integration/test_integration.py::test_entry_point_exit_code": 4.284628190001968, + "tests/integration/test_integration.py::test_entry_point_verification_3rdparty[.whl file-loose]": 2.846384250000483, + "tests/integration/test_integration.py::test_entry_point_verification_3rdparty[.whl file-packed]": 2.639876830000503, + "tests/integration/test_integration.py::test_entry_point_verification_3rdparty[.whl file-zipapp]": 2.864827379999042, + "tests/integration/test_integration.py::test_entry_point_verification_3rdparty[installed wheel chroot-loose]": 2.3807538519995433, + "tests/integration/test_integration.py::test_entry_point_verification_3rdparty[installed wheel chroot-packed]": 2.141097046998766, + "tests/integration/test_integration.py::test_entry_point_verification_3rdparty[installed wheel chroot-zipapp]": 2.4175835650003137, + "tests/integration/test_integration.py::test_inherit_path_backwards_compatibility": 9.752568010000687, + "tests/integration/test_integration.py::test_inherit_path_fallback": 8.883044029000303, + "tests/integration/test_integration.py::test_inherit_path_prefer": 9.282238650999716, + "tests/integration/test_integration.py::test_invalid_entry_point_verification_3rdparty[.whl file-loose]": 2.8579706689997693, + "tests/integration/test_integration.py::test_invalid_entry_point_verification_3rdparty[.whl file-packed]": 2.796068624000327, + "tests/integration/test_integration.py::test_invalid_entry_point_verification_3rdparty[.whl file-zipapp]": 2.5889003419979417, + "tests/integration/test_integration.py::test_invalid_entry_point_verification_3rdparty[installed wheel chroot-loose]": 2.7313706780005305, + "tests/integration/test_integration.py::test_invalid_entry_point_verification_3rdparty[installed wheel chroot-packed]": 2.238473793000594, + "tests/integration/test_integration.py::test_invalid_entry_point_verification_3rdparty[installed wheel chroot-zipapp]": 2.243841772997257, + "tests/integration/test_integration.py::test_invalid_macosx_platform_tag": 0.00010612300138745923, + "tests/integration/test_integration.py::test_ipython_appnope_env_markers": 0.00011029800043615978, + "tests/integration/test_integration.py::test_multiplatform_entrypoint": 3.3927342730003147, + "tests/integration/test_integration.py::test_no_emit_warnings_2": 3.002892480999435, + "tests/integration/test_integration.py::test_no_emit_warnings_emit_env_override": 3.379406651998579, + "tests/integration/test_integration.py::test_no_emit_warnings_verbose_override": 3.4062925960006396, + "tests/integration/test_integration.py::test_pex_cache_dir_and_pex_root": 4.309475518999534, + "tests/integration/test_integration.py::test_pex_console_script_custom_setuptools_useable": 6.485613239998202, + "tests/integration/test_integration.py::test_pex_execute": 2.3187821529991197, + "tests/integration/test_integration.py::test_pex_exit_code_propagation": 4.582358791001752, + "tests/integration/test_integration.py::test_pex_interpreter": 1.8612234800002625, + "tests/integration/test_integration.py::test_pex_interpreter_execute_custom_setuptools_useable": 4.430655138003203, + "tests/integration/test_integration.py::test_pex_interpreter_interact_custom_setuptools_useable": 3.862261946998842, + "tests/integration/test_integration.py::test_pex_manylinux_and_tag_selection_linux_msgpack": 33.94450498799961, + "tests/integration/test_integration.py::test_pex_manylinux_and_tag_selection_lxml_osx": 15.520041274001414, + "tests/integration/test_integration.py::test_pex_manylinux_runtime": 0.00010706799912441056, + "tests/integration/test_integration.py::test_pex_multi_resolve": 12.71430133100148, + "tests/integration/test_integration.py::test_pex_multi_resolve_2": 12.315521262999027, + "tests/integration/test_integration.py::test_pex_path_arg": 19.272439397998824, + "tests/integration/test_integration.py::test_pex_path_in_pex_info_and_env": 22.25857809199988, + "tests/integration/test_integration.py::test_pex_python_symlink": 2.636149537000165, + "tests/integration/test_integration.py::test_pex_raise": 2.029068294998069, + "tests/integration/test_integration.py::test_pex_repl_built": 8.033060296002077, + "tests/integration/test_integration.py::test_pex_repl_cli": 4.403168475999337, + "tests/integration/test_integration.py::test_pex_repl_history[PEX]": 3.193337736000103, + "tests/integration/test_integration.py::test_pex_repl_history[VENV]": 2.370807048999268, + "tests/integration/test_integration.py::test_pex_repl_tab_complete[PEX]": 3.4248745780023455, + "tests/integration/test_integration.py::test_pex_repl_tab_complete[VENV]": 2.3983465420005814, + "tests/integration/test_integration.py::test_pex_resource_bundling": 4.241202371998952, + "tests/integration/test_integration.py::test_pex_root_build": 6.43565622999995, + "tests/integration/test_integration.py::test_pex_root_run": 30.17415015199913, + "tests/integration/test_integration.py::test_pex_run_strip_env": 5.736595391999799, + "tests/integration/test_integration.py::test_pex_source_bundling": 2.1452639149974857, + "tests/integration/test_integration.py::test_pex_source_bundling_pep420": 1.9227125740017073, + "tests/integration/test_integration.py::test_pip_issues_9420_workaround": 3.230847292003091, + "tests/integration/test_integration.py::test_require_hashes": 9.67293498699837, + "tests/integration/test_integration.py::test_requirement_file_from_url": 6.096605060000002, + "tests/integration/test_integration.py::test_requirements_network_configuration": 1.437583638000433, + "tests/integration/test_integration.py::test_seed[.whl file-loose-PEX]": 4.196735737999916, + "tests/integration/test_integration.py::test_seed[.whl file-loose-VENV]": 2.0744153110008483, + "tests/integration/test_integration.py::test_seed[.whl file-packed-PEX]": 3.9879969989997335, + "tests/integration/test_integration.py::test_seed[.whl file-packed-VENV]": 2.042654704000597, + "tests/integration/test_integration.py::test_seed[.whl file-zipapp-PEX]": 4.362796817000344, + "tests/integration/test_integration.py::test_seed[.whl file-zipapp-VENV]": 2.250603365999268, + "tests/integration/test_integration.py::test_seed[installed wheel chroot-loose-PEX]": 3.23289359500086, + "tests/integration/test_integration.py::test_seed[installed wheel chroot-loose-VENV]": 2.0338369970013446, + "tests/integration/test_integration.py::test_seed[installed wheel chroot-packed-PEX]": 4.058487533000516, + "tests/integration/test_integration.py::test_seed[installed wheel chroot-packed-VENV]": 2.0466640499998903, + "tests/integration/test_integration.py::test_seed[installed wheel chroot-zipapp-PEX]": 4.310803720003605, + "tests/integration/test_integration.py::test_seed[installed wheel chroot-zipapp-VENV]": 1.991992836999998, + "tests/integration/test_integration.py::test_seed_verbose[Direct-.whl file-loose-PEX]": 6.915095051999742, + "tests/integration/test_integration.py::test_seed_verbose[Direct-.whl file-loose-VENV]": 5.535286091000671, + "tests/integration/test_integration.py::test_seed_verbose[Direct-.whl file-packed-PEX]": 7.369536389000132, + "tests/integration/test_integration.py::test_seed_verbose[Direct-.whl file-packed-VENV]": 4.993836507001106, + "tests/integration/test_integration.py::test_seed_verbose[Direct-.whl file-zipapp-PEX]": 8.46078597000087, + "tests/integration/test_integration.py::test_seed_verbose[Direct-.whl file-zipapp-VENV]": 5.329390377999516, + "tests/integration/test_integration.py::test_seed_verbose[Direct-installed wheel chroot-loose-PEX]": 7.108538054002565, + "tests/integration/test_integration.py::test_seed_verbose[Direct-installed wheel chroot-loose-VENV]": 5.104619798998101, + "tests/integration/test_integration.py::test_seed_verbose[Direct-installed wheel chroot-packed-PEX]": 8.52797765700052, + "tests/integration/test_integration.py::test_seed_verbose[Direct-installed wheel chroot-packed-VENV]": 6.134589624001819, + "tests/integration/test_integration.py::test_seed_verbose[Direct-installed wheel chroot-zipapp-PEX]": 7.431043149998004, + "tests/integration/test_integration.py::test_seed_verbose[Direct-installed wheel chroot-zipapp-VENV]": 6.269329241000378, + "tests/integration/test_integration.py::test_seed_verbose[Python-.whl file-loose-PEX]": 7.054509011999471, + "tests/integration/test_integration.py::test_seed_verbose[Python-.whl file-loose-VENV]": 4.797177014997942, + "tests/integration/test_integration.py::test_seed_verbose[Python-.whl file-packed-PEX]": 7.713658602999203, + "tests/integration/test_integration.py::test_seed_verbose[Python-.whl file-packed-VENV]": 5.30113995100146, + "tests/integration/test_integration.py::test_seed_verbose[Python-.whl file-zipapp-PEX]": 7.072794970999894, + "tests/integration/test_integration.py::test_seed_verbose[Python-.whl file-zipapp-VENV]": 5.2009534610024275, + "tests/integration/test_integration.py::test_seed_verbose[Python-installed wheel chroot-loose-PEX]": 6.45972644199901, + "tests/integration/test_integration.py::test_seed_verbose[Python-installed wheel chroot-loose-VENV]": 5.567082003000905, + "tests/integration/test_integration.py::test_seed_verbose[Python-installed wheel chroot-packed-PEX]": 7.5977263240001776, + "tests/integration/test_integration.py::test_seed_verbose[Python-installed wheel chroot-packed-VENV]": 5.470375487000638, + "tests/integration/test_integration.py::test_seed_verbose[Python-installed wheel chroot-zipapp-PEX]": 6.943724532000488, + "tests/integration/test_integration.py::test_seed_verbose[Python-installed wheel chroot-zipapp-VENV]": 5.604798668999138, + "tests/integration/test_integration.py::test_setup_interpreter_constraint": 6.310374791000868, + "tests/integration/test_integration.py::test_setup_python": 5.852734938001959, + "tests/integration/test_integration.py::test_setup_python_direct_markers": 5.790906963000452, + "tests/integration/test_integration.py::test_setup_python_multiple_direct_markers": 10.457697264000672, + "tests/integration/test_integration.py::test_setup_python_multiple_transitive_markers": 10.551158522999685, + "tests/integration/test_integration.py::test_setup_python_path": 8.584704640999917, + "tests/integration/test_integration.py::test_tmpdir_absolute": 1.6364750359989557, + "tests/integration/test_integration.py::test_tmpdir_dne": 0.5073981319983432, + "tests/integration/test_integration.py::test_tmpdir_file": 0.5295142819995817, + "tests/integration/test_integration.py::test_trusted_host_handling": 2.662130402000912, + "tests/integration/test_integration.py::test_unzip_mode": 5.439806015001523, + "tests/integration/test_integration.py::test_venv_mode": 7.0633596620009484, + "tests/integration/test_interpreter.py::test_boot_identification_leak": 5.369878516001336, + "tests/integration/test_interpreter_selection.py::test_interpreter_constraints_honored_without_ppp_or_pp": 3.912098529001014, + "tests/integration/test_interpreter_selection.py::test_interpreter_constraints_to_pex_info_py2": 6.933587329000147, + "tests/integration/test_interpreter_selection.py::test_interpreter_constraints_to_pex_info_py3": 2.1696623520001594, + "tests/integration/test_interpreter_selection.py::test_interpreter_resolution_pex_python_path_precedence_over_pex_python": 4.915329956998903, + "tests/integration/test_interpreter_selection.py::test_interpreter_resolution_with_constraint_option": 6.160210471998653, + "tests/integration/test_interpreter_selection.py::test_interpreter_resolution_with_multiple_constraint_options": 6.040353676997256, + "tests/integration/test_interpreter_selection.py::test_interpreter_resolution_with_pex_python_path": 3.3071402959994884, + "tests/integration/test_interpreter_selection.py::test_interpreter_selection_using_os_environ_for_bootstrap_reexec": 29.363868693997574, + "tests/integration/test_interpreter_selection.py::test_pex_exec_with_pex_python_path_and_pex_python_but_no_constraints": 3.113336562000768, + "tests/integration/test_interpreter_selection.py::test_pex_exec_with_pex_python_path_only": 3.6569136860016442, + "tests/integration/test_interpreter_selection.py::test_pex_python": 9.369056852998256, + "tests/integration/test_interpreter_selection.py::test_plain_pex_exec_no_ppp_no_pp_no_constraints": 3.143592118000015, + "tests/integration/test_issue_1017.py::test_resolve_python_requires_full_version": 7.1833487969997805, + "tests/integration/test_issue_1018.py::test_execute_module_alter_sys[ep-function-loose-PEX]": 2.1447943179991853, + "tests/integration/test_issue_1018.py::test_execute_module_alter_sys[ep-function-loose-VENV]": 2.014221298999473, + "tests/integration/test_issue_1018.py::test_execute_module_alter_sys[ep-function-packed-PEX]": 2.2603392130022257, + "tests/integration/test_issue_1018.py::test_execute_module_alter_sys[ep-function-packed-VENV]": 2.0232791889993678, + "tests/integration/test_issue_1018.py::test_execute_module_alter_sys[ep-function-zipapp-PEX]": 2.1874203250008577, + "tests/integration/test_issue_1018.py::test_execute_module_alter_sys[ep-function-zipapp-VENV]": 2.2080193319998216, + "tests/integration/test_issue_1018.py::test_execute_module_alter_sys[ep-module-loose-PEX]": 2.2064482829973713, + "tests/integration/test_issue_1018.py::test_execute_module_alter_sys[ep-module-loose-VENV]": 2.5251571240005433, + "tests/integration/test_issue_1018.py::test_execute_module_alter_sys[ep-module-packed-PEX]": 2.406715957000415, + "tests/integration/test_issue_1018.py::test_execute_module_alter_sys[ep-module-packed-VENV]": 2.132121336999262, + "tests/integration/test_issue_1018.py::test_execute_module_alter_sys[ep-module-zipapp-PEX]": 2.153757898000549, + "tests/integration/test_issue_1018.py::test_execute_module_alter_sys[ep-module-zipapp-VENV]": 2.1453658989994437, + "tests/integration/test_issue_1018.py::test_execute_module_alter_sys[no-ep-loose-PEX]": 2.725660114998391, + "tests/integration/test_issue_1018.py::test_execute_module_alter_sys[no-ep-loose-VENV]": 2.2583864770022046, + "tests/integration/test_issue_1018.py::test_execute_module_alter_sys[no-ep-packed-PEX]": 2.3299850200000947, + "tests/integration/test_issue_1018.py::test_execute_module_alter_sys[no-ep-packed-VENV]": 2.563127577001069, + "tests/integration/test_issue_1018.py::test_execute_module_alter_sys[no-ep-zipapp-PEX]": 2.8685728069995093, + "tests/integration/test_issue_1018.py::test_execute_module_alter_sys[no-ep-zipapp-VENV]": 2.6426170640006603, + "tests/integration/test_issue_1025.py::test_extras_isolation": 17.678182826997727, + "tests/integration/test_issue_1031.py::test_setuptools_isolation_with_system_site_packages[pyvenv]": 33.157603718000246, + "tests/integration/test_issue_1031.py::test_setuptools_isolation_with_system_site_packages[virtualenv-16.7.10]": 25.54146048899929, + "tests/integration/test_issue_1179.py::test_pip_2020_resolver_engaged": 18.295331536999583, + "tests/integration/test_issue_1201.py::test_old_requires_metadata_used_for_requires_python": 2.9975549950013374, + "tests/integration/test_issue_1202.py::test_prefer_binary": 5.035849645999406, + "tests/integration/test_issue_1218.py::test_venv_mode_dir_hash_includes_all_pex_info_metadata": 9.509120864000579, + "tests/integration/test_issue_1225.py::test_venv_mode_pex_path": 13.962586108000323, + "tests/integration/test_issue_1232.py::test_isolated_pex_zip": 76.28297055700023, + "tests/integration/test_issue_1302.py::test_pex_repository_pep503": 8.607086547999643, + "tests/integration/test_issue_1316.py::test_resolve_cyclic_dependency_graph": 6.149710703000892, + "tests/integration/test_issue_1336.py::test_pip_leak": 10.770503365998593, + "tests/integration/test_issue_1422.py::test_unconstrained_universal_venv_pex": 6.16565267399892, + "tests/integration/test_issue_1447.py::test_layout_identification": 5.922479906999797, + "tests/integration/test_issue_1479.py::test_unicode_script_shebang_rewrite_docutils": 8.144265371001893, + "tests/integration/test_issue_1520.py::test_hermetic_console_scripts": 7.0200169700001425, + "tests/integration/test_issue_1537.py::test_rel_cert_path": 4.277559297999687, + "tests/integration/test_issue_1540.py::test_derive_consistent_shebang_platforms": 3.1808737269984704, + "tests/integration/test_issue_1550.py::test_duplicate_requirements_issues_1550": 3.9632689879999816, + "tests/integration/test_issue_1560.py::test_build_isolation[2.7.18]": 41.3438823009983, + "tests/integration/test_issue_1560.py::test_build_isolation[3.10.7]": 47.27813851799874, + "tests/integration/test_issue_1560.py::test_build_isolation[3.8.10]": 43.49445439400188, + "tests/integration/test_issue_1560.py::test_build_isolation[3.9.13]": 43.147800021002695, + "tests/integration/test_issue_1560.py::test_pep_517_for_legacy_project": 22.93276343300022, + "tests/integration/test_issue_1560.py::test_pep_517_for_pep_517_project": 7.995037655000488, + "tests/integration/test_issue_157.py::test_empty_pex_no_args[FORCE_COLOR-scie-VENV]": 18.95794170100089, + "tests/integration/test_issue_157.py::test_empty_pex_no_args[FORCE_COLOR-scie-ZIPAPP]": 18.164374321999276, + "tests/integration/test_issue_157.py::test_empty_pex_no_args[FORCE_COLOR-traditional-VENV]": 3.941972475999137, + "tests/integration/test_issue_157.py::test_empty_pex_no_args[FORCE_COLOR-traditional-ZIPAPP]": 6.4144789800011495, + "tests/integration/test_issue_157.py::test_empty_pex_no_args[IS_TTY-scie-VENV]": 17.143238564998683, + "tests/integration/test_issue_157.py::test_empty_pex_no_args[IS_TTY-scie-ZIPAPP]": 18.218864891998237, + "tests/integration/test_issue_157.py::test_empty_pex_no_args[IS_TTY-traditional-VENV]": 3.6730371590001596, + "tests/integration/test_issue_157.py::test_empty_pex_no_args[IS_TTY-traditional-ZIPAPP]": 5.773757263001244, + "tests/integration/test_issue_157.py::test_empty_pex_no_args[NO_COLOR-scie-VENV]": 17.016601561001153, + "tests/integration/test_issue_157.py::test_empty_pex_no_args[NO_COLOR-scie-ZIPAPP]": 17.92023657900063, + "tests/integration/test_issue_157.py::test_empty_pex_no_args[NO_COLOR-traditional-VENV]": 3.990523446002044, + "tests/integration/test_issue_157.py::test_empty_pex_no_args[NO_COLOR-traditional-ZIPAPP]": 5.591755515999466, + "tests/integration/test_issue_157.py::test_empty_pex_no_args[TERM=dumb-scie-VENV]": 17.961296312998456, + "tests/integration/test_issue_157.py::test_empty_pex_no_args[TERM=dumb-scie-ZIPAPP]": 17.569971049000742, + "tests/integration/test_issue_157.py::test_empty_pex_no_args[TERM=dumb-traditional-VENV]": 3.6279618620028486, + "tests/integration/test_issue_157.py::test_empty_pex_no_args[TERM=dumb-traditional-ZIPAPP]": 5.874788097999044, + "tests/integration/test_issue_157.py::test_pex_cli_no_args[VENV]": 28.291257451001, + "tests/integration/test_issue_157.py::test_pex_cli_no_args[ZIPAPP]": 29.615119422001953, + "tests/integration/test_issue_157.py::test_pex_info_command_json": 5.893289566000021, + "tests/integration/test_issue_157.py::test_pex_info_command_loose_venv_pex_directory": 2.904600963998746, + "tests/integration/test_issue_157.py::test_pex_info_command_packed_pex_directory": 5.8832476579991635, + "tests/integration/test_issue_157.py::test_pex_info_command_pex_file": 6.174516674000188, + "tests/integration/test_issue_157.py::test_pex_info_command_pex_venv": 6.34698916400157, + "tests/integration/test_issue_157.py::test_pex_info_command_venv_pex_file": 3.797626430001401, + "tests/integration/test_issue_157.py::test_pex_with_deps[VENV]": 5.864183808000234, + "tests/integration/test_issue_157.py::test_pex_with_deps[ZIPAPP]": 7.672730724998473, + "tests/integration/test_issue_1597.py::test_platform_abbreviated": 7.736792453997623, + "tests/integration/test_issue_1597.py::test_platform_complete": 11.498537716999635, + "tests/integration/test_issue_1598.py::test_mount_respects_env": 46.39007537699945, + "tests/integration/test_issue_1656.py::test_mixed_pex_root": 9.327000043413136e-05, + "tests/integration/test_issue_1656.py::test_new_venv_tool_vs_old_pex": 0.00010495800052012783, + "tests/integration/test_issue_1656.py::test_old_venv_tool_vs_new_pex": 9.356000009574927e-05, + "tests/integration/test_issue_1683.py::test_requirements_pex": 7.131440435998229, + "tests/integration/test_issue_1726.py::test_check_install_issue_1726": 22.619598726998447, + "tests/integration/test_issue_1730.py::test_check_install_issue_1730": 0.00010323300011805259, + "tests/integration/test_issue_1802.py::test_stderr_not_torn_down": 3.316301693999776, + "tests/integration/test_issue_1809.py::test_excepthook_scrubbing": 11.135493931000383, + "tests/integration/test_issue_1817.py::test_sdist_for_project_universal": 17.590880642999764, + "tests/integration/test_issue_1817.py::test_sdist_for_project_with_native_extensions": 43.28042308500153, + "tests/integration/test_issue_1817.py::test_sdist_for_project_with_pep517_build": 317.18178945300133, + "tests/integration/test_issue_1825.py::test_pex_run_extra_sys_path[VENV]": 0.6508128930017847, + "tests/integration/test_issue_1825.py::test_pex_run_extra_sys_path[ZIPAPP]": 2.585296653000114, + "tests/integration/test_issue_1825.py::test_pex_run_inherit_path_and_extra_sys_path[fallback]": 3.0986601279983006, + "tests/integration/test_issue_1825.py::test_pex_run_inherit_path_and_extra_sys_path[false]": 1.4406316739987233, + "tests/integration/test_issue_1825.py::test_pex_run_inherit_path_and_extra_sys_path[prefer]": 1.1580580599984387, + "tests/integration/test_issue_1856.py::test_os_name_spoofing": 2.1589834469978086, + "tests/integration/test_issue_1861.py::test_confounding_site_packages_directory": 10.881963572999666, + "tests/integration/test_issue_1870.py::test_inherit_path_pex_info[fallback]": 6.046685670000443, + "tests/integration/test_issue_1870.py::test_inherit_path_pex_info[false]": 7.446890392000569, + "tests/integration/test_issue_1870.py::test_inherit_path_pex_info[prefer]": 6.080494759002249, + "tests/integration/test_issue_1872.py::test_pep_518_venv_pex_env_scrubbing": 73.74305577099767, + "tests/integration/test_issue_1879.py::test_overwrite[loose-.whl file-loose-.whl file]": 1.4091389849982079, + "tests/integration/test_issue_1879.py::test_overwrite[loose-.whl file-loose-installed wheel chroot]": 1.3252623549997224, + "tests/integration/test_issue_1879.py::test_overwrite[loose-.whl file-packed-.whl file]": 1.3380534449988772, + "tests/integration/test_issue_1879.py::test_overwrite[loose-.whl file-packed-installed wheel chroot]": 1.3104112910004915, + "tests/integration/test_issue_1879.py::test_overwrite[loose-.whl file-zipapp-.whl file]": 1.4692634089988132, + "tests/integration/test_issue_1879.py::test_overwrite[loose-.whl file-zipapp-installed wheel chroot]": 1.571984505000728, + "tests/integration/test_issue_1879.py::test_overwrite[loose-installed wheel chroot-loose-.whl file]": 1.2984032070016838, + "tests/integration/test_issue_1879.py::test_overwrite[loose-installed wheel chroot-loose-installed wheel chroot]": 1.338944816001458, + "tests/integration/test_issue_1879.py::test_overwrite[loose-installed wheel chroot-packed-.whl file]": 1.3594892869987234, + "tests/integration/test_issue_1879.py::test_overwrite[loose-installed wheel chroot-packed-installed wheel chroot]": 1.3475448200006213, + "tests/integration/test_issue_1879.py::test_overwrite[loose-installed wheel chroot-zipapp-.whl file]": 1.4387503039997682, + "tests/integration/test_issue_1879.py::test_overwrite[loose-installed wheel chroot-zipapp-installed wheel chroot]": 1.3945561070013355, + "tests/integration/test_issue_1879.py::test_overwrite[packed-.whl file-loose-.whl file]": 1.34892701300123, + "tests/integration/test_issue_1879.py::test_overwrite[packed-.whl file-loose-installed wheel chroot]": 1.280410977997235, + "tests/integration/test_issue_1879.py::test_overwrite[packed-.whl file-packed-.whl file]": 1.5197440070005541, + "tests/integration/test_issue_1879.py::test_overwrite[packed-.whl file-packed-installed wheel chroot]": 1.2699383449999004, + "tests/integration/test_issue_1879.py::test_overwrite[packed-.whl file-zipapp-.whl file]": 1.3958141399998567, + "tests/integration/test_issue_1879.py::test_overwrite[packed-.whl file-zipapp-installed wheel chroot]": 1.4692905629999586, + "tests/integration/test_issue_1879.py::test_overwrite[packed-installed wheel chroot-loose-.whl file]": 1.347635332002028, + "tests/integration/test_issue_1879.py::test_overwrite[packed-installed wheel chroot-loose-installed wheel chroot]": 1.3562512940006854, + "tests/integration/test_issue_1879.py::test_overwrite[packed-installed wheel chroot-packed-.whl file]": 1.2926300130020536, + "tests/integration/test_issue_1879.py::test_overwrite[packed-installed wheel chroot-packed-installed wheel chroot]": 1.393197601000793, + "tests/integration/test_issue_1879.py::test_overwrite[packed-installed wheel chroot-zipapp-.whl file]": 1.437480531998517, + "tests/integration/test_issue_1879.py::test_overwrite[packed-installed wheel chroot-zipapp-installed wheel chroot]": 1.4875835130005726, + "tests/integration/test_issue_1879.py::test_overwrite[zipapp-.whl file-loose-.whl file]": 1.5317881400005717, + "tests/integration/test_issue_1879.py::test_overwrite[zipapp-.whl file-loose-installed wheel chroot]": 1.687196948001656, + "tests/integration/test_issue_1879.py::test_overwrite[zipapp-.whl file-packed-.whl file]": 1.4026368359991466, + "tests/integration/test_issue_1879.py::test_overwrite[zipapp-.whl file-packed-installed wheel chroot]": 1.3752541470021242, + "tests/integration/test_issue_1879.py::test_overwrite[zipapp-.whl file-zipapp-.whl file]": 1.5440340589993866, + "tests/integration/test_issue_1879.py::test_overwrite[zipapp-.whl file-zipapp-installed wheel chroot]": 1.6043632050023007, + "tests/integration/test_issue_1879.py::test_overwrite[zipapp-installed wheel chroot-loose-.whl file]": 1.5485320470015722, + "tests/integration/test_issue_1879.py::test_overwrite[zipapp-installed wheel chroot-loose-installed wheel chroot]": 1.5033720990031725, + "tests/integration/test_issue_1879.py::test_overwrite[zipapp-installed wheel chroot-packed-.whl file]": 1.4282672729987098, + "tests/integration/test_issue_1879.py::test_overwrite[zipapp-installed wheel chroot-packed-installed wheel chroot]": 1.4288631370000076, + "tests/integration/test_issue_1879.py::test_overwrite[zipapp-installed wheel chroot-zipapp-.whl file]": 1.6536419089989067, + "tests/integration/test_issue_1879.py::test_overwrite[zipapp-installed wheel chroot-zipapp-installed wheel chroot]": 1.517431239999496, + "tests/integration/test_issue_1933.py::test_musllinux_wheels_resolved": 39.02820361399972, + "tests/integration/test_issue_1936.py::test_empty_pex_path": 8.305310745001407, + "tests/integration/test_issue_1949.py::test_resolve_arbitrary_equality": 12.076768687000367, + "tests/integration/test_issue_1995.py::test_packaging": 44.04498218700246, + "tests/integration/test_issue_2001.py::test_compile_error_as_warning": 3.917740953000248, + "tests/integration/test_issue_2006.py::test_symlink_preserved_in_argv0[--sh-boot]": 5.8282257030004985, + "tests/integration/test_issue_2006.py::test_symlink_preserved_in_argv0[__main__.py boot]": 6.956796299000416, + "tests/integration/test_issue_2017.py::test_statically_linked_musl_libc_cpython_support[20.3.4-patched]": 11.391334119000021, + "tests/integration/test_issue_2017.py::test_statically_linked_musl_libc_cpython_support[24.2]": 4.977357984000264, + "tests/integration/test_issue_2023.py::test_unpack_robustness[UNZIP-.whl file-loose]": 7.041423800999837, + "tests/integration/test_issue_2023.py::test_unpack_robustness[UNZIP-.whl file-packed]": 9.93546658500236, + "tests/integration/test_issue_2023.py::test_unpack_robustness[UNZIP-.whl file-zipapp]": 8.847276754999257, + "tests/integration/test_issue_2023.py::test_unpack_robustness[UNZIP-installed wheel chroot-loose]": 5.747691052996743, + "tests/integration/test_issue_2023.py::test_unpack_robustness[UNZIP-installed wheel chroot-packed]": 9.716557455998554, + "tests/integration/test_issue_2023.py::test_unpack_robustness[UNZIP-installed wheel chroot-zipapp]": 8.006008133999785, + "tests/integration/test_issue_2023.py::test_unpack_robustness[VENV (copies)-.whl file-loose]": 5.903073399000277, + "tests/integration/test_issue_2023.py::test_unpack_robustness[VENV (copies)-.whl file-packed]": 7.380303807998644, + "tests/integration/test_issue_2023.py::test_unpack_robustness[VENV (copies)-.whl file-zipapp]": 6.626542712998344, + "tests/integration/test_issue_2023.py::test_unpack_robustness[VENV (copies)-installed wheel chroot-loose]": 5.3830029429991555, + "tests/integration/test_issue_2023.py::test_unpack_robustness[VENV (copies)-installed wheel chroot-packed]": 6.388216934998127, + "tests/integration/test_issue_2023.py::test_unpack_robustness[VENV (copies)-installed wheel chroot-zipapp]": 6.4181064250024065, + "tests/integration/test_issue_2023.py::test_unpack_robustness[VENV (symlinks)-.whl file-loose]": 5.3272017930012225, + "tests/integration/test_issue_2023.py::test_unpack_robustness[VENV (symlinks)-.whl file-packed]": 6.9648737289990095, + "tests/integration/test_issue_2023.py::test_unpack_robustness[VENV (symlinks)-.whl file-zipapp]": 7.032588883999779, + "tests/integration/test_issue_2023.py::test_unpack_robustness[VENV (symlinks)-installed wheel chroot-loose]": 5.5856628859983175, + "tests/integration/test_issue_2023.py::test_unpack_robustness[VENV (symlinks)-installed wheel chroot-packed]": 5.862427468999158, + "tests/integration/test_issue_2023.py::test_unpack_robustness[VENV (symlinks)-installed wheel chroot-zipapp]": 6.595459691998258, + "tests/integration/test_issue_2038.py::test_wheel_file_url_dep": 64.62639472900082, + "tests/integration/test_issue_2073.py::test_lock_create_foreign_platform_yolo_cross_build": 6.599142475002736, + "tests/integration/test_issue_2073.py::test_lock_resolve_foreign_platform_yolo_cross_build": 7.5123092840003665, + "tests/integration/test_issue_2073.py::test_standard_resolve_foreign_platform_yolo_cross_build": 15.355724648999967, + "tests/integration/test_issue_2087.py::test_long_wheel_names": 7.345985858999484, + "tests/integration/test_issue_2088.py::test_venv_symlink_site_packages[--no-venv-site-packages-copies-loose]": 7.630757472999903, + "tests/integration/test_issue_2088.py::test_venv_symlink_site_packages[--no-venv-site-packages-copies-packed]": 7.608092532998853, + "tests/integration/test_issue_2088.py::test_venv_symlink_site_packages[--no-venv-site-packages-copies-zipapp]": 9.87076591800178, + "tests/integration/test_issue_2088.py::test_venv_symlink_site_packages[--venv-site-packages-copies-loose]": 6.902964413999143, + "tests/integration/test_issue_2088.py::test_venv_symlink_site_packages[--venv-site-packages-copies-packed]": 7.581715418997192, + "tests/integration/test_issue_2088.py::test_venv_symlink_site_packages[--venv-site-packages-copies-zipapp]": 8.371543692001069, + "tests/integration/test_issue_2113.py::test_metadata_gen_from_dist_failure_build_pex": 17.710469407000346, + "tests/integration/test_issue_2113.py::test_metadata_gen_from_dist_failure_lock": 19.984460285999376, + "tests/integration/test_issue_2113.py::test_metadata_gen_from_local_project_failure_build_pex": 1.69201321300352, + "tests/integration/test_issue_2113.py::test_metadata_gen_from_local_project_failure_lock": 1.672762201000296, + "tests/integration/test_issue_2134.py::test_add_module_in_package": 0.883986858998469, + "tests/integration/test_issue_2134.py::test_add_module_offset": 0.8611839569985023, + "tests/integration/test_issue_2134.py::test_add_package_offset": 0.8660477670018736, + "tests/integration/test_issue_2134.py::test_add_sub_package": 0.8489972600000328, + "tests/integration/test_issue_2134.py::test_add_sub_package_mixed": 0.8297222610017343, + "tests/integration/test_issue_2134.py::test_add_sub_package_pep_420": 0.8954437439988396, + "tests/integration/test_issue_2134.py::test_add_top_level_module": 0.8306151809993025, + "tests/integration/test_issue_2134.py::test_add_top_level_package": 1.0254699760007497, + "tests/integration/test_issue_2134.py::test_overlap": 0.8012354260008578, + "tests/integration/test_issue_2183.py::test_lambdex_with_incompatible_attrs": 9.377606562000437, + "tests/integration/test_issue_2186.py::test_default_resolve_no_warning": 2.802710001002197, + "tests/integration/test_issue_2186.py::test_incompatible_resolve_error": 0.00019086000065726694, + "tests/integration/test_issue_2186.py::test_incompatible_resolve_warning": 0.00018816100055119023, + "tests/integration/test_issue_2203.py::test_read_only_venv": 38.41291698299938, + "tests/integration/test_issue_2235.py::test_standard_library_is_included": 4.06105702500281, + "tests/integration/test_issue_2249.py::test_inspect[PEX-SH_BOOT]": 5.976386999001988, + "tests/integration/test_issue_2249.py::test_inspect[PEX-VENV-SH_BOOT]": 2.4246087559986336, + "tests/integration/test_issue_2249.py::test_inspect[PEX-VENV]": 2.408691579999868, + "tests/integration/test_issue_2249.py::test_inspect[PEX-ZIPAPP]": 7.151439629000379, + "tests/integration/test_issue_2249.py::test_inspect[SCIE-SH_BOOT]": 11.846455363998757, + "tests/integration/test_issue_2249.py::test_inspect[SCIE-VENV-SH_BOOT]": 12.466549838998617, + "tests/integration/test_issue_2249.py::test_inspect[SCIE-VENV]": 13.100630312001158, + "tests/integration/test_issue_2249.py::test_inspect[SCIE-ZIPAPP]": 13.33601119299965, + "tests/integration/test_issue_2324.py::test_update_sdists_not_updated": 7.974963636999746, + "tests/integration/test_issue_2343.py::test_no_build_no_wheel_honored_pex": 19.453152761001547, + "tests/integration/test_issue_2343.py::test_only_build_honored_lock": 6.646296683997207, + "tests/integration/test_issue_2343.py::test_only_build_honored_pex": 4.8143516999989515, + "tests/integration/test_issue_2343.py::test_only_wheel_honored_lock": 4.789792841000235, + "tests/integration/test_issue_2343.py::test_only_wheel_honored_pex": 3.9044827109992184, + "tests/integration/test_issue_2348.py::test_find_links_url_escaping": 58.922510439999314, + "tests/integration/test_issue_2355.py::test_ssl_context": 17.80217832299968, + "tests/integration/test_issue_2389.py::test_lock_use_no_build_wheel": 7.363033433000965, + "tests/integration/test_issue_2391.py::test_requirements_pex_wheel_type_mismatch[loose-loose]": 11.498546842998621, + "tests/integration/test_issue_2391.py::test_requirements_pex_wheel_type_mismatch[loose-packed]": 10.162884396000663, + "tests/integration/test_issue_2391.py::test_requirements_pex_wheel_type_mismatch[loose-zipapp]": 10.319783306998943, + "tests/integration/test_issue_2391.py::test_requirements_pex_wheel_type_mismatch[packed-loose]": 14.127751862999503, + "tests/integration/test_issue_2391.py::test_requirements_pex_wheel_type_mismatch[packed-packed]": 13.329921623999326, + "tests/integration/test_issue_2391.py::test_requirements_pex_wheel_type_mismatch[packed-zipapp]": 11.20490796499871, + "tests/integration/test_issue_2391.py::test_requirements_pex_wheel_type_mismatch[zipapp-loose]": 11.14099378299943, + "tests/integration/test_issue_2391.py::test_requirements_pex_wheel_type_mismatch[zipapp-packed]": 13.841976897001587, + "tests/integration/test_issue_2391.py::test_requirements_pex_wheel_type_mismatch[zipapp-zipapp]": 11.356930332000047, + "tests/integration/test_issue_2395.py::test_download_incompatible_python": 14.844171669003117, + "tests/integration/test_issue_2410.py::test_pex_with_editable": 5.159117527999115, + "tests/integration/test_issue_2412.py::test_bdist_pex_locked_issue_2412_repro_exact": 55.41436492399771, + "tests/integration/test_issue_2412.py::test_bdist_pex_locked_issue_2412_repro_pex_lock": 61.64266762999978, + "tests/integration/test_issue_2412.py::test_bdist_pex_locked_issue_2412_repro_pex_lock_inlined_requirements": 64.1228930039997, + "tests/integration/test_issue_2413.py::test_bdist_pex_under_tox": 31.58841509099875, + "tests/integration/test_issue_2413.py::test_venv_with_installs[wheel:no-setuptools:no-pip:no]": 0.3832842180017906, + "tests/integration/test_issue_2413.py::test_venv_with_installs[wheel:no-setuptools:no-pip:upgraded]": 11.471960554999896, + "tests/integration/test_issue_2413.py::test_venv_with_installs[wheel:no-setuptools:no-pip:yes]": 8.675293787997362, + "tests/integration/test_issue_2413.py::test_venv_with_installs[wheel:no-setuptools:upgraded-pip:no]": 0.002167393000490847, + "tests/integration/test_issue_2413.py::test_venv_with_installs[wheel:no-setuptools:upgraded-pip:upgraded]": 14.705049352998685, + "tests/integration/test_issue_2413.py::test_venv_with_installs[wheel:no-setuptools:upgraded-pip:yes]": 13.75400975499906, + "tests/integration/test_issue_2413.py::test_venv_with_installs[wheel:no-setuptools:yes-pip:no]": 0.0033488360022602137, + "tests/integration/test_issue_2413.py::test_venv_with_installs[wheel:no-setuptools:yes-pip:upgraded]": 10.649643405999086, + "tests/integration/test_issue_2413.py::test_venv_with_installs[wheel:no-setuptools:yes-pip:yes]": 7.488911538999673, + "tests/integration/test_issue_2413.py::test_venv_with_installs[wheel:upgraded-setuptools:no-pip:no]": 0.002230878997579566, + "tests/integration/test_issue_2413.py::test_venv_with_installs[wheel:upgraded-setuptools:no-pip:upgraded]": 11.51622438099912, + "tests/integration/test_issue_2413.py::test_venv_with_installs[wheel:upgraded-setuptools:no-pip:yes]": 9.264680764001241, + "tests/integration/test_issue_2413.py::test_venv_with_installs[wheel:upgraded-setuptools:upgraded-pip:no]": 0.0021554469985858304, + "tests/integration/test_issue_2413.py::test_venv_with_installs[wheel:upgraded-setuptools:upgraded-pip:upgraded]": 13.930025814002875, + "tests/integration/test_issue_2413.py::test_venv_with_installs[wheel:upgraded-setuptools:upgraded-pip:yes]": 12.213406271997883, + "tests/integration/test_issue_2413.py::test_venv_with_installs[wheel:upgraded-setuptools:yes-pip:no]": 0.001982368998142192, + "tests/integration/test_issue_2413.py::test_venv_with_installs[wheel:upgraded-setuptools:yes-pip:upgraded]": 13.787128493002456, + "tests/integration/test_issue_2413.py::test_venv_with_installs[wheel:upgraded-setuptools:yes-pip:yes]": 9.841457223998077, + "tests/integration/test_issue_2413.py::test_venv_with_installs[wheel:yes-setuptools:no-pip:no]": 0.0025135919986496447, + "tests/integration/test_issue_2413.py::test_venv_with_installs[wheel:yes-setuptools:no-pip:upgraded]": 12.094594246998895, + "tests/integration/test_issue_2413.py::test_venv_with_installs[wheel:yes-setuptools:no-pip:yes]": 8.981909179001377, + "tests/integration/test_issue_2413.py::test_venv_with_installs[wheel:yes-setuptools:upgraded-pip:no]": 0.0018712990004132735, + "tests/integration/test_issue_2413.py::test_venv_with_installs[wheel:yes-setuptools:upgraded-pip:upgraded]": 16.894780705000812, + "tests/integration/test_issue_2413.py::test_venv_with_installs[wheel:yes-setuptools:upgraded-pip:yes]": 12.621690349998971, + "tests/integration/test_issue_2413.py::test_venv_with_installs[wheel:yes-setuptools:yes-pip:no]": 0.0027655760022753384, + "tests/integration/test_issue_2413.py::test_venv_with_installs[wheel:yes-setuptools:yes-pip:upgraded]": 13.112280739000198, + "tests/integration/test_issue_2413.py::test_venv_with_installs[wheel:yes-setuptools:yes-pip:yes]": 9.562151215002814, + "tests/integration/test_issue_2415.py::test_gevent_monkeypatch": 20.335156590001134, + "tests/integration/test_issue_2432.py::test_lock_use_no_build_wheel": 12.028215888001796, + "tests/integration/test_issue_2441.py::test_invalid_metadata_error_messages_under_old_pip": 1.8840205390006304, + "tests/integration/test_issue_2739.py::test_tar_bz2": 13.329356350997841, + "tests/integration/test_issue_434.py::test_entry_point_targeting": 6.412368552999396, + "tests/integration/test_issue_455.py::test_exclude": 21.045553274998383, + "tests/integration/test_issue_539.py::test_abi3_resolution": 0.00010263599870086182, + "tests/integration/test_issue_598.py::test_force_local_implicit_ns_packages": 3.7412367390024883, + "tests/integration/test_issue_661.py::test_devendoring_required": 7.077438616999643, + "tests/integration/test_issue_729.py::test_undeclared_setuptools_import_on_pex_path": 28.459944231000918, + "tests/integration/test_issue_736.py::test_requirement_setup_py_with_extras": 8.455912491999698, + "tests/integration/test_issue_745.py::test_extras_isolation": 18.7272456339997, + "tests/integration/test_issue_749.py::test_pkg_resource_early_import_on_pex_path": 8.924857461001011, + "tests/integration/test_issue_898.py::test_top_level_requirements_requires_python_env_markers": 5.2159197319997475, + "tests/integration/test_issue_899.py::test_top_level_environment_markers": 4.2128363129995705, + "tests/integration/test_issue_940.py::test_resolve_arbitrary_equality": 14.805281286002355, + "tests/integration/test_issue_996.py::test_resolve_local_platform": 8.61169020899979, + "tests/integration/test_keyring_support.py::test_import_provider[23.1.1]": 18.898696615000517, + "tests/integration/test_keyring_support.py::test_import_provider[23.1.2]": 20.912913520001894, + "tests/integration/test_keyring_support.py::test_import_provider[23.1]": 23.442431611001666, + "tests/integration/test_keyring_support.py::test_import_provider[23.2]": 22.34058766799899, + "tests/integration/test_keyring_support.py::test_import_provider[23.3.1]": 22.909882316998846, + "tests/integration/test_keyring_support.py::test_import_provider[23.3.2]": 20.20204851500057, + "tests/integration/test_keyring_support.py::test_import_provider[24.0]": 21.329256230998, + "tests/integration/test_keyring_support.py::test_import_provider[24.1.1]": 22.64187128999947, + "tests/integration/test_keyring_support.py::test_import_provider[24.1.2]": 19.042443055997865, + "tests/integration/test_keyring_support.py::test_import_provider[24.1]": 22.04622463800115, + "tests/integration/test_keyring_support.py::test_import_provider[24.2]": 23.82684157699987, + "tests/integration/test_keyring_support.py::test_subprocess_provider[23.1.1]": 16.483219770001597, + "tests/integration/test_keyring_support.py::test_subprocess_provider[23.1.2]": 17.223101841000243, + "tests/integration/test_keyring_support.py::test_subprocess_provider[23.1]": 15.304065408001406, + "tests/integration/test_keyring_support.py::test_subprocess_provider[23.2]": 33.164911326995934, + "tests/integration/test_keyring_support.py::test_subprocess_provider[23.3.1]": 15.791579445001844, + "tests/integration/test_keyring_support.py::test_subprocess_provider[23.3.2]": 16.32044380300067, + "tests/integration/test_keyring_support.py::test_subprocess_provider[24.0]": 17.706753745000242, + "tests/integration/test_keyring_support.py::test_subprocess_provider[24.1.1]": 18.258275935999336, + "tests/integration/test_keyring_support.py::test_subprocess_provider[24.1.2]": 15.274452333000227, + "tests/integration/test_keyring_support.py::test_subprocess_provider[24.1]": 14.79793942499964, + "tests/integration/test_keyring_support.py::test_subprocess_provider[24.2]": 16.468278773001657, + "tests/integration/test_layout.py::test_resiliency[.whl file-loose-PEX]": 12.411075359001188, + "tests/integration/test_layout.py::test_resiliency[.whl file-loose-VENV]": 8.984847696998258, + "tests/integration/test_layout.py::test_resiliency[.whl file-packed-PEX]": 13.018388796997897, + "tests/integration/test_layout.py::test_resiliency[.whl file-packed-VENV]": 11.115555997999763, + "tests/integration/test_layout.py::test_resiliency[.whl file-zipapp-PEX]": 12.675345254001513, + "tests/integration/test_layout.py::test_resiliency[.whl file-zipapp-VENV]": 10.193427309999606, + "tests/integration/test_layout.py::test_resiliency[installed wheel chroot-loose-PEX]": 7.897792546000346, + "tests/integration/test_layout.py::test_resiliency[installed wheel chroot-loose-VENV]": 7.5363162830017245, + "tests/integration/test_layout.py::test_resiliency[installed wheel chroot-packed-PEX]": 11.713319700998909, + "tests/integration/test_layout.py::test_resiliency[installed wheel chroot-packed-VENV]": 9.9195291190008, + "tests/integration/test_layout.py::test_resiliency[installed wheel chroot-zipapp-PEX]": 13.386205152999537, + "tests/integration/test_layout.py::test_resiliency[installed wheel chroot-zipapp-VENV]": 8.967153560999577, + "tests/integration/test_lock_resolver.py::test_corrupt_artifact": 11.855743212998277, + "tests/integration/test_lock_resolver.py::test_empty_lock_issue_1659": 2.8269181020004908, + "tests/integration/test_lock_resolver.py::test_issue_1413_portable_find_links": 12.509931541999322, + "tests/integration/test_lock_resolver.py::test_issue_1717_transitive_extras": 24.32002404999912, + "tests/integration/test_lock_resolver.py::test_multiplatform": 12.815601452999545, + "tests/integration/test_lock_resolver.py::test_resolve_wheel_files": 5.093537669999932, + "tests/integration/test_lock_resolver.py::test_strict_basic": 4.315007427998353, + "tests/integration/test_lock_resolver.py::test_subset": 2.0967786620021798, + "tests/integration/test_lock_resolver.py::test_unavailable_artifacts": 8.29653258899998, + "tests/integration/test_locked_resolve.py::test_lock_single_target[sources-float-no-transitive-deps]": 1.80123806300071, + "tests/integration/test_locked_resolve.py::test_lock_single_target[sources-float-transitive-deps]": 2.40773917900151, + "tests/integration/test_locked_resolve.py::test_lock_single_target[sources-pinned-no-transitive-deps]": 1.5639407329999813, + "tests/integration/test_locked_resolve.py::test_lock_single_target[sources-pinned-transitive-deps]": 2.647282638001343, + "tests/integration/test_locked_resolve.py::test_lock_single_target[strict-float-no-transitive-deps]": 1.795447296999555, + "tests/integration/test_locked_resolve.py::test_lock_single_target[strict-float-transitive-deps]": 2.20280533299956, + "tests/integration/test_locked_resolve.py::test_lock_single_target[strict-pinned-no-transitive-deps]": 1.459782213998551, + "tests/integration/test_locked_resolve.py::test_lock_single_target[strict-pinned-transitive-deps]": 1.9686937000005855, + "tests/integration/test_no_pre_install_wheels.py::test_no_pre_install_wheels": 4.175641106998228, + "tests/integration/test_overrides.py::test_illegal_override": 2.4595475630012515, + "tests/integration/test_overrides.py::test_lock_sync_override": 21.124719156001447, + "tests/integration/test_overrides.py::test_override": 4.911003603998324, + "tests/integration/test_overrides.py::test_pex_repository_override": 5.40818430300169, + "tests/integration/test_overrides.py::test_pre_resolved_dists_override": 7.577560305999214, + "tests/integration/test_pep_427.py::test_install_scripts": 1.5351266140005464, + "tests/integration/test_pep_427.py::test_install_wheel_interpreter": 11.5944262360008, + "tests/integration/test_pex_bootstrapper.py::test_boot_compatible_issue_1020_ic_min_compatible_build_time_hole": 4.943194687997675, + "tests/integration/test_pex_bootstrapper.py::test_boot_compatible_issue_1020_no_ic": 7.713908599000206, + "tests/integration/test_pex_bootstrapper.py::test_boot_resolve_fail": 3.849026354999296, + "tests/integration/test_pex_bootstrapper.py::test_ensure_venv_namespace_packages": 9.594244514999446, + "tests/integration/test_pex_bootstrapper.py::test_ensure_venv_short_link": 13.599062864999723, + "tests/integration/test_pex_bootstrapper.py::test_ensure_venv_site_packages_copies": 32.689257074001944, + "tests/integration/test_pex_entry_points.py::test_entry_point": 7.496716211999228, + "tests/integration/test_pex_entry_points.py::test_executable": 1.9318237989973568, + "tests/integration/test_pex_entry_points.py::test_script": 10.399506000998372, + "tests/integration/test_pex_entry_points.py::test_style_mutex": 2.291771955002332, + "tests/integration/test_pex_import.py::test_import_from_pex[UNZIPPED-loose]": 28.628190270999767, + "tests/integration/test_pex_import.py::test_import_from_pex[UNZIPPED-packed]": 30.876883242000986, + "tests/integration/test_pex_import.py::test_import_from_pex[UNZIPPED-zipapp]": 31.488810662001924, + "tests/integration/test_pex_import.py::test_import_from_pex[VENV-loose]": 28.905717073999767, + "tests/integration/test_pex_import.py::test_import_from_pex[VENV-packed]": 31.28068230700046, + "tests/integration/test_pex_import.py::test_import_from_pex[VENV-zipapp]": 31.664795267000954, + "tests/integration/test_reexec.py::test_pex_no_reexec_constraints_match_current": 2.5147224250013096, + "tests/integration/test_reexec.py::test_pex_no_reexec_no_constraints": 2.5624967960029608, + "tests/integration/test_reexec.py::test_pex_re_exec_failure": 0.00036492099934548605, + "tests/integration/test_reexec.py::test_pex_reexec_constraints_dont_match_current_pex_python": 2.6940982910018647, + "tests/integration/test_reexec.py::test_pex_reexec_constraints_dont_match_current_pex_python_path": 3.2199459049988945, + "tests/integration/test_reexec.py::test_pex_reexec_constraints_dont_match_current_pex_python_path_min_py_version_selected": 2.0958566699991934, + "tests/integration/test_reexec.py::test_pex_reexec_constraints_match_current_pythonpath_present": 4.408213621001778, + "tests/integration/test_reexec.py::test_pex_reexec_no_constraints_pythonpath_present": 2.349854616002631, + "tests/integration/test_reproducible.py::test_reproducible_build_bdist_requirements": 0.00011403000098653138, + "tests/integration/test_reproducible.py::test_reproducible_build_c_flag_from_dependency": 28.18058386699704, + "tests/integration/test_reproducible.py::test_reproducible_build_c_flag_from_source": 26.093571479001184, + "tests/integration/test_reproducible.py::test_reproducible_build_m_flag": 11.612039231999006, + "tests/integration/test_reproducible.py::test_reproducible_build_no_args": 11.868984975000785, + "tests/integration/test_reproducible.py::test_reproducible_build_python_flag": 11.497275006000564, + "tests/integration/test_reproducible.py::test_reproducible_build_python_shebang_flag": 7.948072933000731, + "tests/integration/test_reproducible.py::test_reproducible_build_sdist_requirements": 28.67268406799849, + "tests/integration/test_script_metadata.py::test_dependencies_additive": 6.712425952999183, + "tests/integration/test_script_metadata.py::test_dependencies_conflicting": 1.4905044400020415, + "tests/integration/test_script_metadata.py::test_no_script_metadata": 4.02023412500057, + "tests/integration/test_script_metadata.py::test_nominal": 11.103750579000916, + "tests/integration/test_script_metadata.py::test_targets_additive": 9.65252252800019, + "tests/integration/test_setproctitle.py::test_setproctitle[.whl file-loose-UNZIP]": 4.405437921999692, + "tests/integration/test_setproctitle.py::test_setproctitle[.whl file-loose-VENV]": 4.727484134002225, + "tests/integration/test_setproctitle.py::test_setproctitle[.whl file-packed-UNZIP]": 5.1384640260002925, + "tests/integration/test_setproctitle.py::test_setproctitle[.whl file-packed-VENV]": 4.822374719999061, + "tests/integration/test_setproctitle.py::test_setproctitle[.whl file-zipapp-UNZIP]": 5.40059694699994, + "tests/integration/test_setproctitle.py::test_setproctitle[.whl file-zipapp-VENV]": 5.135235472002023, + "tests/integration/test_setproctitle.py::test_setproctitle[installed wheel chroot-loose-UNZIP]": 4.315431264998551, + "tests/integration/test_setproctitle.py::test_setproctitle[installed wheel chroot-loose-VENV]": 4.9702275459985685, + "tests/integration/test_setproctitle.py::test_setproctitle[installed wheel chroot-packed-UNZIP]": 5.17918594999901, + "tests/integration/test_setproctitle.py::test_setproctitle[installed wheel chroot-packed-VENV]": 5.026988584002538, + "tests/integration/test_setproctitle.py::test_setproctitle[installed wheel chroot-zipapp-UNZIP]": 5.288992923000478, + "tests/integration/test_setproctitle.py::test_setproctitle[installed wheel chroot-zipapp-VENV]": 5.264377906998561, + "tests/integration/test_sh_boot.py::test_argv0[VENV (--sh-boot)]": 1.7554374299998017, + "tests/integration/test_sh_boot.py::test_argv0[VENV]": 2.024117377000948, + "tests/integration/test_sh_boot.py::test_argv0[ZIPAPP (--sh-boot)]": 4.07459676399958, + "tests/integration/test_sh_boot.py::test_argv0[ZIPAPP]": 4.428648604001864, + "tests/integration/test_sh_boot.py::test_execute[venv]": 1.6590859509997244, + "tests/integration/test_sh_boot.py::test_execute[zipapp]": 2.7946137210019515, + "tests/integration/test_sh_boot.py::test_execute_via_interpreter[bash]": 2.813500340000246, + "tests/integration/test_sh_boot.py::test_execute_via_interpreter[dash]": 2.8526620930006175, + "tests/integration/test_sh_boot.py::test_execute_via_interpreter[python2.7]": 2.2062049630021647, + "tests/integration/test_sh_boot.py::test_execute_via_interpreter[python3.10]": 2.441177038001115, + "tests/integration/test_sh_boot.py::test_execute_via_interpreter[python3.8]": 2.5507819989998097, + "tests/integration/test_sh_boot.py::test_execute_via_interpreter[python3.9]": 2.4306795530010277, + "tests/integration/test_sh_boot.py::test_execute_via_interpreter[python]": 3.124647829999958, + "tests/integration/test_sh_boot.py::test_execute_via_interpreter[sh]": 2.889167050998367, + "tests/integration/test_sh_boot.py::test_issue_1782[VENV (--sh-boot)]": 12.62182417600161, + "tests/integration/test_sh_boot.py::test_issue_1782[VENV]": 12.657025039001383, + "tests/integration/test_sh_boot.py::test_issue_1782[ZIPAPP (--sh-boot)]": 14.73364956200021, + "tests/integration/test_sh_boot.py::test_issue_1782[ZIPAPP]": 15.424870375001774, + "tests/integration/test_sh_boot.py::test_issue_1881[venv]": 3.966599082998073, + "tests/integration/test_sh_boot.py::test_issue_1881[zipapp]": 5.40166692099956, + "tests/integration/test_sh_boot.py::test_python_shebang_respected": 1.573302574997797, + "tests/integration/test_shebang_length_limit.py::test_shebang_length_limit_buildtime_lock_local_project": 15.67653197999789, + "tests/integration/test_shebang_length_limit.py::test_shebang_length_limit_buildtime_resolve": 7.305993201998717, + "tests/integration/test_shebang_length_limit.py::test_shebang_length_limit_runtime[VENV (--sh-boot)]": 3.5304778390018328, + "tests/integration/test_shebang_length_limit.py::test_shebang_length_limit_runtime[VENV]": 3.8028523399989353, + "tests/integration/test_shebang_length_limit.py::test_shebang_length_limit_runtime[ZIPAPP (--sh-boot)]": 5.170036544999675, + "tests/integration/test_shebang_length_limit.py::test_shebang_length_limit_runtime[ZIPAPP]": 5.573503765001078, + "tests/integration/test_variables.py::test_pex_variable_always_defined_at_runtime[UNZIP-loose-NoStripPexEnv]": 2.5716082619983354, + "tests/integration/test_variables.py::test_pex_variable_always_defined_at_runtime[UNZIP-loose-StripPexEnv]": 2.492285038000773, + "tests/integration/test_variables.py::test_pex_variable_always_defined_at_runtime[UNZIP-packed-NoStripPexEnv]": 2.821152473999973, + "tests/integration/test_variables.py::test_pex_variable_always_defined_at_runtime[UNZIP-packed-StripPexEnv]": 2.984465187000751, + "tests/integration/test_variables.py::test_pex_variable_always_defined_at_runtime[UNZIP-zipapp-NoStripPexEnv]": 3.8170055669979774, + "tests/integration/test_variables.py::test_pex_variable_always_defined_at_runtime[UNZIP-zipapp-StripPexEnv]": 3.6139819450017967, + "tests/integration/test_variables.py::test_pex_variable_always_defined_at_runtime[VENV-loose-NoStripPexEnv]": 1.9177941590005503, + "tests/integration/test_variables.py::test_pex_variable_always_defined_at_runtime[VENV-loose-StripPexEnv]": 1.852214370997899, + "tests/integration/test_variables.py::test_pex_variable_always_defined_at_runtime[VENV-packed-NoStripPexEnv]": 1.6391603269967163, + "tests/integration/test_variables.py::test_pex_variable_always_defined_at_runtime[VENV-packed-StripPexEnv]": 1.6651280639998731, + "tests/integration/test_variables.py::test_pex_variable_always_defined_at_runtime[VENV-zipapp-NoStripPexEnv]": 2.3039153249992523, + "tests/integration/test_variables.py::test_pex_variable_always_defined_at_runtime[VENV-zipapp-StripPexEnv]": 2.2471042840006703, + "tests/integration/tools/commands/test_issue_2105.py::test_pip_empty_pex": 16.36030318000121, + "tests/integration/tools/commands/test_issue_2105.py::test_pip_pex_both_conflict": 24.706106011002703, + "tests/integration/tools/commands/test_issue_2105.py::test_pip_pex_no_conflicts": 20.682446791000984, + "tests/integration/tools/commands/test_issue_2105.py::test_pip_pex_pip_conflict": 27.563909542001056, + "tests/integration/tools/commands/test_issue_2105.py::test_pip_pex_setuptools_conflict": 30.13228067500131, + "tests/integration/tools/commands/test_venv.py::test_collisions": 9.999770046000776, + "tests/integration/tools/commands/test_venv.py::test_collisions_mergeable_issue_1570": 9.329190898002707, + "tests/integration/tools/commands/test_venv.py::test_non_hermetic_issue_2004": 10.889710109000589, + "tests/integration/tools/commands/test_venv.py::test_scope_issue_1631": 14.561355530000583, + "tests/integration/tools/commands/test_venv.py::test_site_packages_copies": 9.16622222299884, + "tests/integration/venv_ITs/test_install_wheel_multiple_site_packages_dirs.py::test_installed_wheels": 38.25467313599802, + "tests/integration/venv_ITs/test_install_wheel_multiple_site_packages_dirs.py::test_wheel_files": 32.358563949999734, + "tests/integration/venv_ITs/test_issue_1630.py::test_data_files": 15.716543197000647, + "tests/integration/venv_ITs/test_issue_1637.py::test_pex_path_collision_conflicting": 18.975364781997996, + "tests/integration/venv_ITs/test_issue_1637.py::test_pex_path_collision_non_conflicting[venv (site-packages copies)]": 14.11407393600166, + "tests/integration/venv_ITs/test_issue_1637.py::test_pex_path_collision_non_conflicting[venv (site-packages symlinks)]": 13.508982688001197, + "tests/integration/venv_ITs/test_issue_1637.py::test_pex_path_collision_non_conflicting[zipapp]": 15.530295883998406, + "tests/integration/venv_ITs/test_issue_1637.py::test_pex_path_dedup": 15.580904024001939, + "tests/integration/venv_ITs/test_issue_1641.py::test_missing_data_dir_entries[venv (site-packages copies)]": 0.00013157399916963186, + "tests/integration/venv_ITs/test_issue_1641.py::test_missing_data_dir_entries[zipapp]": 0.00011614200047915801, + "tests/integration/venv_ITs/test_issue_1668.py::test_venv_runtime_env_vars_ignored_during_create_nested": 31.288054944001487, + "tests/integration/venv_ITs/test_issue_1668.py::test_venv_runtime_env_vars_ignored_during_create_top_level": 31.07577953800137, + "tests/integration/venv_ITs/test_issue_1745.py::test_interpreter_mode_python_options[- ( from STDIN)-VENV]": 1.9158224019975023, + "tests/integration/venv_ITs/test_issue_1745.py::test_interpreter_mode_python_options[- ( from STDIN)-ZIPAPP]": 4.826474385001347, + "tests/integration/venv_ITs/test_issue_1745.py::test_interpreter_mode_python_options[-c -VENV]": 2.2102233240020723, + "tests/integration/venv_ITs/test_issue_1745.py::test_interpreter_mode_python_options[-c -ZIPAPP]": 5.101407033000214, + "tests/integration/venv_ITs/test_issue_1745.py::test_interpreter_mode_python_options[-m -VENV]": 1.9572872819990152, + "tests/integration/venv_ITs/test_issue_1745.py::test_interpreter_mode_python_options[-m -ZIPAPP]": 5.258761498998865, + "tests/integration/venv_ITs/test_issue_1745.py::test_interpreter_mode_python_options[-VENV]": 2.071900558998095, + "tests/integration/venv_ITs/test_issue_1745.py::test_interpreter_mode_python_options[-ZIPAPP]": 5.3197493580009905, + "tests/integration/venv_ITs/test_issue_1745.py::test_interpreter_mode_python_options[-VENV]": 2.1004286719999072, + "tests/integration/venv_ITs/test_issue_1745.py::test_interpreter_mode_python_options[-ZIPAPP]": 5.249905143002252, + "tests/integration/venv_ITs/test_issue_1973.py::test_system_site_packages_pex3_venv": 8.454704429999765, + "tests/integration/venv_ITs/test_issue_1973.py::test_system_site_packages_pex_tools": 8.99007211999924, + "tests/integration/venv_ITs/test_issue_1973.py::test_system_site_packages_venv_pex": 11.606536401002813, + "tests/integration/venv_ITs/test_issue_2065.py::test_venv_pex_script_non_hermetic[--sh-boot]": 12.610513497002103, + "tests/integration/venv_ITs/test_issue_2065.py::test_venv_pex_script_non_hermetic[__main__.py boot]": 12.420686131001275, + "tests/integration/venv_ITs/test_issue_2160.py::test_ns_package_split_across_sources_and_deps[loose-venv (site-packages copies)]": 9.195450897001137, + "tests/integration/venv_ITs/test_issue_2160.py::test_ns_package_split_across_sources_and_deps[loose-venv (site-packages symlinks)]": 12.189814912000656, + "tests/integration/venv_ITs/test_issue_2160.py::test_ns_package_split_across_sources_and_deps[loose-zipapp]": 9.881516509998619, + "tests/integration/venv_ITs/test_issue_2160.py::test_ns_package_split_across_sources_and_deps[packed-venv (site-packages copies)]": 12.794784518999222, + "tests/integration/venv_ITs/test_issue_2160.py::test_ns_package_split_across_sources_and_deps[packed-venv (site-packages symlinks)]": 12.970717823000086, + "tests/integration/venv_ITs/test_issue_2160.py::test_ns_package_split_across_sources_and_deps[packed-zipapp]": 13.217884722000235, + "tests/integration/venv_ITs/test_issue_2160.py::test_ns_package_split_across_sources_and_deps[zipapp-venv (site-packages copies)]": 12.387326828998994, + "tests/integration/venv_ITs/test_issue_2160.py::test_ns_package_split_across_sources_and_deps[zipapp-venv (site-packages symlinks)]": 11.297216924001987, + "tests/integration/venv_ITs/test_issue_2160.py::test_ns_package_split_across_sources_and_deps[zipapp-zipapp]": 13.115835872002208, + "tests/integration/venv_ITs/test_issue_2248.py::test_repl_python_options[VENV]": 4.668477320999955, + "tests/integration/venv_ITs/test_issue_2248.py::test_repl_python_options[ZIPAPP]": 6.899099735001073, + "tests/integration/venv_ITs/test_virtualenv.py::test_enclosing": 0.3293819189984788, + "tests/integration/venv_ITs/test_virtualenv.py::test_invalid": 0.3440544319983019, + "tests/integration/venv_ITs/test_virtualenv.py::test_iter_distributions[2.7.18]": 11.379624124998372, + "tests/integration/venv_ITs/test_virtualenv.py::test_iter_distributions[3.10.7]": 6.290939565000372, + "tests/integration/venv_ITs/test_virtualenv.py::test_iter_distributions[3.8.10]": 12.035944660998211, + "tests/integration/venv_ITs/test_virtualenv.py::test_iter_distributions[3.9.13]": 12.239538812998944, + "tests/integration/venv_ITs/test_virtualenv.py::test_iter_distributions_setuptools_not_leaked": 0.2832128730005934, + "tests/integration/venv_ITs/test_virtualenv.py::test_iter_distributions_spaces": 4.54124917000081, + "tests/integration/venv_ITs/test_virtualenv.py::test_multiple_site_packages_dirs": 7.936972879999303 +} \ No newline at end of file diff --git a/testing/bin/run_tests.py b/testing/bin/run_tests.py index eeeb6b573..d6a41852f 100755 --- a/testing/bin/run_tests.py +++ b/testing/bin/run_tests.py @@ -153,7 +153,7 @@ def main(): args = [sys.executable, "-m", "pytest", "-n", "auto"] if options.it: - args.append("tests/integration") + args.extend(["tests/integration", "-p", "testing.pytest_shard"]) else: args.extend(["tests", "--ignore", "tests/integration"]) args.extend(passthrough_args or ["-vvs"]) diff --git a/testing/pytest_shard.py b/testing/pytest_shard.py new file mode 100644 index 000000000..4c6e10722 --- /dev/null +++ b/testing/pytest_shard.py @@ -0,0 +1,244 @@ +# Copyright 2024 Pex project contributors. +# Licensed under the Apache License, Version 2.0 (see LICENSE). + +from __future__ import absolute_import, print_function + +import json +import os.path +from collections import defaultdict +from typing import DefaultDict, Tuple + +from _pytest.config import create_terminal_writer, hookimpl # type: ignore[import] +from _pytest.reports import TestReport # type: ignore[import] + +from pex.common import pluralize +from pex.typing import TYPE_CHECKING + +if TYPE_CHECKING: + from typing import Dict, List + + import attr # vendor:skip + from _pytest import nodes # type: ignore[import] + from _pytest.config import Config # type: ignore[import] + from _pytest.config.argparsing import Parser # type: ignore[import] + from _pytest.terminal import TerminalReporter # type: ignore[import] +else: + from pex.third_party import attr + + +DEFAULT_TIMINGS_PATH = ".test_timings" + + +@attr.s(frozen=True) +class Plugin(object): + config = attr.ib() # type: Config + + @property + def terminal_reporter(self): + # type: () -> TerminalReporter + return self.config.pluginmanager.get_plugin("terminalreporter") + + +@attr.s(frozen=True) +class RecordTestTimings(Plugin): + @classmethod + def load_timings(cls, timings_path=DEFAULT_TIMINGS_PATH): + # type: (str) -> Dict[str, float] + if not os.path.exists(timings_path): + return {} + with open(timings_path) as fp: + return json.load(fp) # type: ignore[no-any-return] + + @classmethod + def create( + cls, + config, # type: Config + timings_path=DEFAULT_TIMINGS_PATH, # type: str + clear_timings=False, # type: bool + ): + # type: (...) -> RecordTestTimings + return cls( + config=config, + seed_timings=tuple(() if clear_timings else cls.load_timings(timings_path).items()), + timings_path=timings_path, + ) + + seed_timings = attr.ib() # type: Tuple[Tuple[str, float], ...] + timings_path = attr.ib(default=DEFAULT_TIMINGS_PATH) # type: str + + def pytest_sessionfinish(self): + # type: () -> None + + test_times = defaultdict(lambda: 0) # type: DefaultDict[str, float] + for test_reports in self.terminal_reporter.stats.values(): + for test_report in test_reports: + if isinstance(test_report, TestReport) and test_report.passed: + test_times[test_report.nodeid] += test_report.duration + + timings = dict(self.seed_timings) + for test, timing in test_times.items(): + timings[test] = timing + + with open(self.timings_path, "w") as fp: + json.dump(timings, fp, sort_keys=True, indent=2) + + self.terminal_reporter.write_line( + "pex-record-timings: Recorded {count} test {timings} at {timings_path}".format( + count=len(test_times), + timings=pluralize(test_times, "timing"), + timings_path=self.timings_path, + ), + cyan=True, + ) + + +@attr.s(frozen=True) +class Shard(object): + @classmethod + def parse(cls, spec): + # type: (str) -> Shard + slot, total_slots = spec.split("/", 1) + return cls(slot=int(slot), total_slots=int(total_slots)) + + slot = attr.ib() # type: int + total_slots = attr.ib() # type: int + + def __attrs_post_init__(self): + # type: () -> None + if self.slot <= 0: + raise ValueError("The shard number must be >=1; given: {slot}".format(slot=self.slot)) + if self.total_slots < self.slot: + raise ValueError( + "The total shard count must be >={slot}; given: {total_slots}".format( + slot=self.slot, total_slots=self.total_slots + ) + ) + + def __str__(self): + # type: () -> str + return "{slot}/{total_slots}".format(slot=self.slot, total_slots=self.total_slots) + + +@attr.s +class ShardTests(Plugin): + @classmethod + def create( + cls, + config, # type: Config + shard, # type: Shard + timings_path=DEFAULT_TIMINGS_PATH, # type: str + ): + # type: (...) -> ShardTests + timings = RecordTestTimings.load_timings(timings_path=timings_path) + return cls(config=config, shard=shard, timings=tuple(timings.items())) + + shard = attr.ib() # type: Shard + timings = attr.ib() # type: Tuple[Tuple[str, float], ...] + + @hookimpl(trylast=True) + def pytest_collection_modifyitems( + self, + config, # type: Config + items, # type: List[nodes.Item] + ): + # type: (...) -> None + + timing_by_test = {test: timing for test, timing in self.timings} + average_timing = ( + sum(timing_by_test.values()) / len(timing_by_test) if timing_by_test else 0.0 + ) + timing_by_item = {item: timing_by_test.get(item.nodeid, average_timing) for item in items} + + total_time_by_slot = {} # type: Dict[int, float] + deselected_tests = [] # type: List[nodes.Item] + selected_tests = [] # type: List[nodes.Item] + for test, timing in sorted( + timing_by_item.items(), key=lambda entry: (entry[1], entry[0].nodeid), reverse=True + ): + if total_time_by_slot: + slot, _ = min(total_time_by_slot.items(), key=lambda entry: (entry[1], entry[0])) + else: + for slot in range(1, self.shard.total_slots + 1): + total_time_by_slot[slot] = 0.0 + slot = 1 + + total_time_by_slot[slot] += timing + if self.shard.slot == slot: + selected_tests.append(test) + else: + deselected_tests.append(test) + + items[:] = selected_tests + config.hook.pytest_deselected(items=deselected_tests) + + self.terminal_reporter.write_line( + "pex-shard-tests: Selected {count} {tests} for {shard} with an estimated run " + "time of {minutes:.2f} minutes".format( + count=len(items), + tests=pluralize(items, "test"), + shard=self.shard, + minutes=total_time_by_slot[self.shard.slot] / 60, + ), + cyan=True, + ) + + +def pytest_addoption(parser): + # type: (Parser) -> None + group = parser.getgroup( + "Split tests into shards whose execution time is about the same. Run with `--save-timings` " + "to store information about test execution times." + ) + group.addoption( + "--timings-path", + dest="timings_path", + default=DEFAULT_TIMINGS_PATH, + help="The path to store and read test timings from.", + ) + group.addoption( + "--record-timings", + dest="record_timings", + action="store_true", + help="Record test timings to `--timings-path`.", + ) + group.addoption( + "--clear-timings", + dest="clear_timings", + action="store_true", + help=( + "Remove any prior test timings for tests which are not present while running tests " + "with `--record-timings`." + ), + ) + group.addoption( + "--shard", + dest="shard", + type=Shard.parse, + help=( + "Shard tests. Values take the form M/N where M is the shard to pick of N total shards. " + "M numbering is 1-based. For example, `--shard 1/3` means to shard three ways and pick " + "the 1st shard, `--shard 2/3` picks the 2nd shard and `--shard 3/3 the third." + ), + ) + + +def pytest_configure(config): + # type: (Config) -> None + + if config.option.record_timings: + config.pluginmanager.register( + RecordTestTimings.create( + config=config, + timings_path=config.option.timings_path, + clear_timings=config.option.clear_timings, + ), + "pex-record-test-timings-plugin", + ) + + if config.option.shard: + config.pluginmanager.register( + ShardTests.create( + config=config, shard=config.option.shard, timings_path=config.option.timings_path + ), + "pex-shard-tests-plugin", + ) diff --git a/tox.ini b/tox.ini index b4440b880..08f680d01 100644 --- a/tox.ini +++ b/tox.ini @@ -45,7 +45,8 @@ deps = pexpect==4.9.0 pytest==4.6.11; python_version < "3.6" pytest==6.2.5; python_version == "3.6" - pytest==7.4.0; python_version >= "3.7" + pytest==7.4.4; python_version == "3.7" + pytest==8.3.3; python_version >= "3.8" py{27,py27}: mock==3.0.5 subprocess: subprocess32 passenv =