{"id":13416150,"url":"https://github.com/pytest-dev/pytest","last_synced_at":"2026-07-10T16:32:00.155Z","repository":{"id":33797025,"uuid":"37489525","full_name":"pytest-dev/pytest","owner":"pytest-dev","description":"The pytest framework makes it easy to write small tests, yet scales to support complex functional testing","archived":false,"fork":false,"pushed_at":"2026-07-06T04:22:36.000Z","size":40918,"stargazers_count":14312,"open_issues_count":977,"forks_count":3218,"subscribers_count":197,"default_branch":"main","last_synced_at":"2026-07-06T23:24:27.598Z","etag":null,"topics":["hacktoberfest","python","test","testing","unit-testing"],"latest_commit_sha":null,"homepage":"https://pytest.org","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pytest-dev.png","metadata":{"files":{"readme":"README.rst","changelog":"CHANGELOG.rst","contributing":"CONTRIBUTING.rst","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":"CITATION","codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":"AUTHORS","dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"pytest-dev","tidelift":"pypi/pytest","open_collective":"pytest","thanks_dev":"u/gh/pytest-dev"}},"created_at":"2015-06-15T20:28:27.000Z","updated_at":"2026-07-06T21:13:52.000Z","dependencies_parsed_at":"2026-04-08T19:01:07.918Z","dependency_job_id":null,"html_url":"https://github.com/pytest-dev/pytest","commit_stats":{"total_commits":11989,"total_committers":1023,"mean_commits":"11.719452590420332","dds":0.8371006756193177,"last_synced_commit":"3ce9be96a11aad3f148c6ab11709cfa940cadea2"},"previous_names":[],"tags_count":224,"template":false,"template_full_name":null,"purl":"pkg:github/pytest-dev/pytest","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pytest-dev%2Fpytest","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pytest-dev%2Fpytest/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pytest-dev%2Fpytest/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pytest-dev%2Fpytest/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pytest-dev","download_url":"https://codeload.github.com/pytest-dev/pytest/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pytest-dev%2Fpytest/sbom","scorecard":{"id":29970,"data":{"date":"2025-08-04","repo":{"name":"github.com/pytest-dev/pytest","commit":"03db745771b5304b45512bf41667adfab1fe8f7a"},"scorecard":{"version":"v5.2.1-28-gc1d103a9","commit":"c1d103a9bb9f635ec7260bf9aa0699466fa4be0e"},"score":6.2,"checks":[{"name":"Maintained","score":10,"reason":"30 commit(s) and 22 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#maintained"}},{"name":"Code-Review","score":9,"reason":"Found 12/13 approved changesets -- score normalized to 9","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#code-review"}},{"name":"Token-Permissions","score":9,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: jobLevel 'contents' permission set to 'write': .github/workflows/deploy.yml:46","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/deploy.yml:81","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/prepare-release-pr.yml:26","Info: jobLevel 'contents' permission set to 'read': .github/workflows/test.yml:53","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/update-plugin-list.yml:18","Info: found token with 'none' permissions: .github/workflows/deploy.yml:1","Info: found token with 'none' permissions: .github/workflows/prepare-release-pr.yml:1","Warn: no topLevel permission defined: .github/workflows/stale.yml:1","Info: found token with 'none' permissions: .github/workflows/test.yml:1","Info: found token with 'none' permissions: .github/workflows/update-plugin-list.yml:1"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#binary-artifacts"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#dangerous-workflow"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#security-policy"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#license"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/deploy.yml:38"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#packaging"}},{"name":"Branch-Protection","score":4,"reason":"branch protection is not maximal on development and all release branches","details":["Info: 'allow deletion' disabled on branch 'main'","Info: 'force pushes' disabled on branch 'main'","Warn: 'branch protection settings apply to administrators' is disabled on branch 'main'","Warn: 'stale review dismissal' is disabled on branch 'main'","Warn: required approving review count is 1 on branch 'main'","Warn: codeowners review is not required on branch 'main'","Warn: 'last push approval' is disabled on branch 'main'","Warn: 'up-to-date branches' is disabled on branch 'main'","Info: status check found to merge onto on branch 'main'","Info: PRs are required in order to make changes on branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#branch-protection"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact 8.4.1 not signed: https://api.github.com/repos/pytest-dev/pytest/releases/226059725","Warn: release artifact 8.4.0 not signed: https://api.github.com/repos/pytest-dev/pytest/releases/222503969","Warn: release artifact 8.3.5 not signed: https://api.github.com/repos/pytest-dev/pytest/releases/203219661","Warn: release artifact 8.3.3 not signed: https://api.github.com/repos/pytest-dev/pytest/releases/174306860","Warn: release artifact 8.4.1 does not have provenance: https://api.github.com/repos/pytest-dev/pytest/releases/226059725","Warn: release artifact 8.4.0 does not have provenance: https://api.github.com/repos/pytest-dev/pytest/releases/222503969","Warn: release artifact 8.3.5 does not have provenance: https://api.github.com/repos/pytest-dev/pytest/releases/203219661","Warn: release artifact 8.3.3 does not have provenance: https://api.github.com/repos/pytest-dev/pytest/releases/174306860"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#signed-releases"}},{"name":"Pinned-Dependencies","score":3,"reason":"dependency not pinned by hash detected -- score normalized to 3","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/deploy.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/pytest-dev/pytest/deploy.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/deploy.yml:48: update your workflow using https://app.stepsecurity.io/secureworkflow/pytest-dev/pytest/deploy.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/deploy.yml:53: update your workflow using https://app.stepsecurity.io/secureworkflow/pytest-dev/pytest/deploy.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/deploy.yml:83: update your workflow using https://app.stepsecurity.io/secureworkflow/pytest-dev/pytest/deploy.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/deploy.yml:89: update your workflow using https://app.stepsecurity.io/secureworkflow/pytest-dev/pytest/deploy.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/deploy.yml:95: update your workflow using https://app.stepsecurity.io/secureworkflow/pytest-dev/pytest/deploy.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/prepare-release-pr.yml:30: update your workflow using https://app.stepsecurity.io/secureworkflow/pytest-dev/pytest/prepare-release-pr.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/prepare-release-pr.yml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/pytest-dev/pytest/prepare-release-pr.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/stale.yml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/pytest-dev/pytest/stale.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:40: update your workflow using https://app.stepsecurity.io/secureworkflow/pytest-dev/pytest/test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:283: update your workflow using https://app.stepsecurity.io/secureworkflow/pytest-dev/pytest/test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:289: update your workflow using https://app.stepsecurity.io/secureworkflow/pytest-dev/pytest/test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:295: update your workflow using https://app.stepsecurity.io/secureworkflow/pytest-dev/pytest/test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/update-plugin-list.yml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/pytest-dev/pytest/update-plugin-list.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/update-plugin-list.yml:29: update your workflow using https://app.stepsecurity.io/secureworkflow/pytest-dev/pytest/update-plugin-list.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/update-plugin-list.yml:35: update your workflow using https://app.stepsecurity.io/secureworkflow/pytest-dev/pytest/update-plugin-list.yml/main?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/deploy.yml:101","Warn: pipCommand not pinned by hash: .github/workflows/deploy.yml:102","Warn: pipCommand not pinned by hash: .github/workflows/prepare-release-pr.yml:43","Warn: pipCommand not pinned by hash: .github/workflows/prepare-release-pr.yml:44","Warn: pipCommand not pinned by hash: .github/workflows/test.yml:303","Warn: pipCommand not pinned by hash: .github/workflows/test.yml:304","Warn: pipCommand not pinned by hash: .github/workflows/update-plugin-list.yml:43","Warn: pipCommand not pinned by hash: .github/workflows/update-plugin-list.yml:44","Info:   0 out of  16 GitHub-owned GitHubAction dependencies pinned","Info:   6 out of   6 third-party GitHubAction dependencies pinned","Info:   0 out of   8 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#pinned-dependencies"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#fuzzing"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 30 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":9,"reason":"1 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: PYSEC-2025-47 / GHSA-7xr5-9hcq-chf9"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-14T18:49:21.386Z","repository_id":33797025,"created_at":"2025-08-14T18:49:21.389Z","updated_at":"2025-08-14T18:49:21.389Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35218117,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-07T02:00:07.222Z","response_time":90,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["hacktoberfest","python","test","testing","unit-testing"],"created_at":"2024-07-30T21:00:54.785Z","updated_at":"2026-07-10T16:32:00.119Z","avatar_url":"https://github.com/pytest-dev.png","language":"Python","funding_links":["https://github.com/sponsors/pytest-dev","https://tidelift.com/funding/github/pypi/pytest","https://opencollective.com/pytest","https://thanks.dev/u/gh/pytest-dev","https://opencollective.com","https://tidelift.com/subscription/pkg/pypi-pytest?utm_source=pypi-pytest\u0026utm_medium=referral\u0026utm_campaign=enterprise\u0026utm_term=repo"],"categories":["Python Packages","Python","Test Frameworks","Testing","Getting Started with the Awesome Streamlit Repository","Containers \u0026 Language Extentions \u0026 Linting","Python 程序","📦 Modules/Packages","Testing Tools","Back-End Development","Don't forget to give a :star: to make the project popular","📚 فهرست","📦 Additional Python Libraries","The List of AI Testing Tools"],"sub_categories":["Views","Python","Code quality and Tests","For Python","网络服务_其他","Testing","Misc","تست و دیباگ","Miscellaneous","14. PyTest"],"readme":".. image:: https://github.com/pytest-dev/pytest/raw/main/doc/en/img/pytest_logo_curves.svg\n   :target: https://docs.pytest.org/en/stable/\n   :align: center\n   :height: 200\n   :alt: pytest\n\n\n------\n\n.. image:: https://img.shields.io/pypi/v/pytest.svg\n    :target: https://pypi.org/project/pytest/\n\n.. image:: https://img.shields.io/conda/vn/conda-forge/pytest.svg\n    :target: https://anaconda.org/conda-forge/pytest\n\n.. image:: https://img.shields.io/pypi/pyversions/pytest.svg\n    :target: https://pypi.org/project/pytest/\n\n.. image:: https://codecov.io/gh/pytest-dev/pytest/branch/main/graph/badge.svg\n    :target: https://codecov.io/gh/pytest-dev/pytest\n    :alt: Code coverage Status\n\n.. image:: https://github.com/pytest-dev/pytest/actions/workflows/test.yml/badge.svg\n    :target: https://github.com/pytest-dev/pytest/actions?query=workflow%3Atest\n\n.. image:: https://results.pre-commit.ci/badge/github/pytest-dev/pytest/main.svg\n   :target: https://results.pre-commit.ci/latest/github/pytest-dev/pytest/main\n   :alt: pre-commit.ci status\n\n.. image:: https://www.codetriage.com/pytest-dev/pytest/badges/users.svg\n    :target: https://www.codetriage.com/pytest-dev/pytest\n\n.. image:: https://readthedocs.org/projects/pytest/badge/?version=latest\n    :target: https://pytest.readthedocs.io/en/latest/?badge=latest\n    :alt: Documentation Status\n\n.. image:: https://img.shields.io/badge/Discord-pytest--dev-blue\n    :target: https://discord.com/invite/pytest-dev\n    :alt: Discord\n\n.. image:: https://img.shields.io/badge/Libera%20chat-%23pytest-orange\n    :target: https://web.libera.chat/#pytest\n    :alt: Libera chat\n\n\nThe ``pytest`` framework makes it easy to write small tests, yet\nscales to support complex functional testing for applications and libraries.\n\nAn example of a simple test:\n\n.. code-block:: python\n\n    # content of test_sample.py\n    def inc(x):\n        return x + 1\n\n\n    def test_answer():\n        assert inc(3) == 5\n\n\nTo execute it::\n\n    $ pytest\n    ============================= test session starts =============================\n    collected 1 items\n\n    test_sample.py F\n\n    ================================== FAILURES ===================================\n    _________________________________ test_answer _________________________________\n\n        def test_answer():\n    \u003e       assert inc(3) == 5\n    E       assert 4 == 5\n    E        +  where 4 = inc(3)\n\n    test_sample.py:5: AssertionError\n    ========================== 1 failed in 0.04 seconds ===========================\n\n\nThanks to ``pytest``'s detailed assertion introspection, you can simply use plain ``assert`` statements. See `getting-started \u003chttps://docs.pytest.org/en/stable/getting-started.html#our-first-test-run\u003e`_ for more examples.\n\n\nFeatures\n--------\n\n- Detailed info on failing `assert statements \u003chttps://docs.pytest.org/en/stable/how-to/assert.html\u003e`_ (no need to remember ``self.assert*`` names)\n\n- `Auto-discovery\n  \u003chttps://docs.pytest.org/en/stable/explanation/goodpractices.html#python-test-discovery\u003e`_\n  of test modules and functions\n\n- `Modular fixtures \u003chttps://docs.pytest.org/en/stable/explanation/fixtures.html\u003e`_ for\n  managing small or parametrized long-lived test resources\n\n- Can run `unittest \u003chttps://docs.pytest.org/en/stable/how-to/unittest.html\u003e`_ (or trial)\n  test suites out of the box\n\n- Python 3.10+ or PyPy3\n\n- Rich plugin architecture, with over 1300+ `external plugins \u003chttps://docs.pytest.org/en/latest/reference/plugin_list.html\u003e`_ and thriving community\n\n\nDocumentation\n-------------\n\nFor full documentation, including installation, tutorials and PDF documents, please see https://docs.pytest.org/en/stable/.\n\n\nBugs/Requests\n-------------\n\nPlease use the `GitHub issue tracker \u003chttps://github.com/pytest-dev/pytest/issues\u003e`_ to submit bugs or request features.\n\n\nChangelog\n---------\n\nConsult the `Changelog \u003chttps://docs.pytest.org/en/stable/changelog.html\u003e`__ page for fixes and enhancements of each version.\n\n\nSupport pytest\n--------------\n\n`Open Collective`_ is an online funding platform for open and transparent communities.\nIt provides tools to raise money and share your finances in full transparency.\n\nIt is the platform of choice for individuals and companies that want to make one-time or\nmonthly donations directly to the project.\n\nSee more details in the `pytest collective`_.\n\n.. _Open Collective: https://opencollective.com\n.. _pytest collective: https://opencollective.com/pytest\n\n\npytest for enterprise\n---------------------\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of pytest and thousands of other packages are working with Tidelift to deliver commercial support and\nmaintenance for the open source dependencies you use to build your applications.\nSave time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use.\n\n`Learn more. \u003chttps://tidelift.com/subscription/pkg/pypi-pytest?utm_source=pypi-pytest\u0026utm_medium=referral\u0026utm_campaign=enterprise\u0026utm_term=repo\u003e`_\n\nSecurity\n^^^^^^^^\n\nIf you have found an issue that you believe is a security vulnerability, please do not create an issue -- instead, report it via a `new security advisory \u003chttps://github.com/pytest-dev/pytest/security/advisories/new\u003e`__.\n\n\nLicense\n-------\n\nCopyright Holger Krekel and others, 2004.\n\nDistributed under the terms of the `MIT`_ license, pytest is free and open source software.\n\n.. _`MIT`: https://github.com/pytest-dev/pytest/blob/main/LICENSE\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpytest-dev%2Fpytest","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpytest-dev%2Fpytest","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpytest-dev%2Fpytest/lists"}