fix(parametrize): handle trailing comma in string argnames#14125
Conversation
There was a problem hiding this comment.
Pull request overview
This PR fixes a bug in pytest.mark.parametrize where string argnames with trailing commas (e.g., "arg,") were not behaving like their tuple equivalents (e.g., ("arg",)). The fix ensures that when a single-argument string has a trailing comma, argvalues are treated as tuples to unpack rather than values to wrap.
Changes:
- Modified the
_parse_parametrize_argsmethod to detect trailing commas in string argnames and adjust theforce_tupleflag accordingly - Added comprehensive unit and functional tests to verify the behavior
- Added a changelog entry documenting the fix
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
| src/_pytest/mark/structures.py | Added trailing comma detection logic to make "arg," behave like ("arg",) by adjusting the force_tuple flag |
| testing/python/metafunc.py | Added unit test verifying that tuple form, string with trailing comma, and string without comma all behave correctly; added functional test verifying the behavior in actual test execution |
| changelog/719.bugfix.rst | Added changelog entry documenting the bugfix for issue #719 |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
8e09ae7 to
c5aefb5
Compare
c5aefb5 to
5e7ea97
Compare
…v#719) Make `"arg,"` behave like `("arg",)` by detecting trailing comma and not wrapping tuple values. This allows users to use trailing comma syntax in string argnames for single-parameter parametrize. Fixes pytest-dev#719 Co-authored-by: Cursor AI <ai@cursor.sh> Co-authored-by: Anthropic Claude Opus 4.5 <claude@anthropic.com>
5e7ea97 to
3fc824a
Compare
Backport to 9.0.x: 💚 backport PR created✅ Backport PR branch: Backported as #14149 🤖 @patchback |
…trailing-comma fix(parametrize): handle trailing comma in string argnames (cherry picked from commit 5f59a74)
pytest 9.1.0 (released 2026-06-13) shipped pytest-dev/pytest#14125, which fixes pytest-dev/pytest#719: a trailing comma in a string argnames value (e.g. "args, " or "config_file_name,") now behaves like the tuple form ("arg",) and unpacks each value as a tuple. Before 9.1.0 the trailing comma was discarded and the value was passed as-is for the single argname, so these tests passed by accident. After the change pytest unpacks each value, and our non-tuple values no longer match the single argname, failing collection: - "args, " + value {} -> names (1) != values (0) - "config_file_name," + "config.yaml" -> names (1) != values (11) (the string is unpacked into its 11 characters) These tests date back to 2021 and were unchanged; tox does not pin pytest, so CI picked up 9.1.0 two days after its release and exposed the latent issue. Fix: drop the trailing comma so each value is treated as a single argument on every pytest version. Refs: pytest-dev/pytest#14125 pytest-dev/pytest#719 pytest 9.1.0 changelog: https://docs.pytest.org/en/stable/changelog.html
pytest 9.1.0 (released 2026-06-13) shipped pytest-dev/pytest#14125, which fixes pytest-dev/pytest#719: a trailing comma in a string argnames value (e.g. "args, " or "config_file_name,") now behaves like the tuple form ("arg",) and unpacks each value as a tuple. Before 9.1.0 the trailing comma was discarded and the value was passed as-is for the single argname, so these tests passed by accident. After the change pytest unpacks each value, and our non-tuple values no longer match the single argname, failing collection: - "args, " + value {} -> names (1) != values (0) - "config_file_name," + "config.yaml" -> names (1) != values (11) (the string is unpacked into its 11 characters) These tests date back to 2021 and were unchanged; tox does not pin pytest, so CI picked up 9.1.0 two days after its release and exposed the latent issue. Fix: drop the trailing comma so each value is treated as a single argument on every pytest version. Refs: pytest-dev/pytest#14125 pytest-dev/pytest#719 pytest 9.1.0 changelog: https://docs.pytest.org/en/stable/changelog.html
Make
"arg,"behave like("arg",)by detecting trailing comma and not wrapping tuple values.Fixes #719