Skip to content

Commit

Permalink
Optimized renaming of test parameter ids (#6350)
Browse files Browse the repository at this point in the history
Optimized renaming of test parameter ids
  • Loading branch information
nicoddemus committed Dec 16, 2019
2 parents a176ff7 + d4879c7 commit 8be9684
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 8 deletions.
1 change: 1 addition & 0 deletions AUTHORS
Expand Up @@ -235,6 +235,7 @@ Samuele Pedroni
Sankt Petersbug
Segev Finer
Serhii Mozghovyi
Seth Junot
Simon Gomizelj
Skylar Downes
Srinivas Reddy Thatiparthy
Expand Down
1 change: 1 addition & 0 deletions changelog/6350.trivial.rst
@@ -0,0 +1 @@
Optimized automatic renaming of test parameter IDs.
26 changes: 18 additions & 8 deletions src/_pytest/python.py
Expand Up @@ -6,6 +6,7 @@
import sys
import warnings
from collections import Counter
from collections import defaultdict
from collections.abc import Sequence
from functools import partial
from textwrap import dedent
Expand Down Expand Up @@ -1190,14 +1191,23 @@ def idmaker(argnames, parametersets, idfn=None, ids=None, config=None, item=None
_idvalset(valindex, parameterset, argnames, idfn, ids, config=config, item=item)
for valindex, parameterset in enumerate(parametersets)
]
if len(set(ids)) != len(ids):
# The ids are not unique
duplicates = [testid for testid in ids if ids.count(testid) > 1]
counters = Counter()
for index, testid in enumerate(ids):
if testid in duplicates:
ids[index] = testid + str(counters[testid])
counters[testid] += 1

# All IDs must be unique!
unique_ids = set(ids)
if len(unique_ids) != len(ids):

# Record the number of occurrences of each test ID
test_id_counts = Counter(ids)

# Map the test ID to its next suffix
test_id_suffixes = defaultdict(int)

# Suffix non-unique IDs to make them unique
for index, test_id in enumerate(ids):
if test_id_counts[test_id] > 1:
ids[index] = "{}{}".format(test_id, test_id_suffixes[test_id])
test_id_suffixes[test_id] += 1

return ids


Expand Down

0 comments on commit 8be9684

Please sign in to comment.