Open
Description
- a detailed description of the bug or suggestion
- output of
pip list
from the virtual environment you are using
Package Version
-------------- -----------
atomicwrites 1.3.0
attrs 19.3.0
colorama 0.4.3
more-itertools 8.2.0
packaging 20.3
pip 20.0.2
pluggy 0.13.1
py 1.8.1
pyparsing 2.4.6
pytest 5.3.5
setuptools 41.2.0
six 1.14.0
ujson 1.36.dev102
wcwidth 0.1.8
- pytest and operating system versions
pytest 5.3.5, Windows Server 2019 on GitHub Actions
Python 3.5-3.8 - minimal example if possible
Include long test input in a parametrize
test:
@pytest.mark.parametrize(
"test_input",
[
"1",
"2",
"[" * (1024 * 1024),
"{" * (1024 * 1024),
],
)
def test_long_input(test_input):
# Do something with test_input
pass
Expected
Tests pass
Actual
Tests fail with ValueError: the environment variable is longer than 32767 characters
:
2020-03-08T21:44:22.8972828Z key = 'PYTEST_CURRENT_TEST'
2020-03-08T21:44:22.8973045Z value = 'tests/test_ujson.py::test_long_input[{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{...{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{] (teardown)'
2020-03-08T21:44:22.8973138Z
2020-03-08T21:44:22.8973265Z def __setitem__(self, key, value):
2020-03-08T21:44:22.8973624Z key = self.encodekey(key)
2020-03-08T21:44:22.8973756Z value = self.encodevalue(value)
2020-03-08T21:44:22.8973879Z > self.putenv(key, value)
2020-03-08T21:44:22.8974020Z E ValueError: the environment variable is longer than 32767 characters
2020-03-08T21:44:22.8974117Z
2020-03-08T21:44:22.8974254Z c:\hostedtoolcache\windows\python\3.8.2\x64\lib\os.py:681: ValueError
2020-03-08T21:44:22.8974408Z ======================== 138 passed, 4 errors in 2.66s ========================
2020-03-08T21:44:22.9037130Z ##[error]Process completed with exit code 1.
https://github.com/hugovk/ultrajson/runs/493853892?check_suite_focus=true
Passes on Ubuntu 16.04, 18.04, macOS Catalina 10.15 with Python 2.7, 3.5-3.8, but for all operating systems the test name is also really long because it includes the parameterised values, which clutters the logs.
Can be worked around by splitting the long test input into its own method:
@pytest.mark.parametrize(
"test_input",
[
"1",
"2",
],
)
def test_long_input(test_input):
# Do something with test_input
pass
@pytest.mark.parametrize(
"test_input",
[
"[",
"{",
],
)
def test_long_input(test_input):
# Do something with test_input * (1024 * 1024), instead of test_input
pass