Long parametrized test_input on Windows: ValueError: the environment variable is longer than 32767 characters
See original GitHub issue- 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
Issue Analytics
- State:
- Created 4 years ago
- Comments:7 (7 by maintainers)
Top Results From Across the Web
Python-ValueError: the environment variable is longer than ...
I guess that each iteration, it just appends the GUROBI_HOME path to your environment variable. This makes the environment variable longer ...
Read more >Why does Windows have a limit on environment variables at all?
In order for the user PATH variable to be successfully merged with the system PATH variable the system PATH variable must be <...
Read more >ValueError: the environment variable is longer than 32767 ...
ValueError: the environment variable is longer than 32767 characters On Windows, an environment variable string ("name=value" string) is limited to 32,767 ...
Read more >Lib/test/test_os.py - platform/external/python/cpython3 - Git at Google
On Windows, the test can stop when trying to create a path longer. # than MAX_PATH if long paths ... and null character...
Read more >Solved: Problem with maximum length of Input parameters wh...
Solved: Hi All, I had a requirement that I need to pass a JSON string through a input property while registering the control...
Read more >
Top Related Medium Post
No results found
Top Related StackOverflow Question
No results found
Troubleshoot Live Code
Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free
Top Related Reddit Thread
No results found
Top Related Hackernoon Post
No results found
Top Related Tweet
No results found
Top Related Dev.to Post
No results found
Top Related Hashnode Post
No results found
Note that you can pass a function to
ids
instead (docs). Thus, you could do something likeids=lambda s: s[:10]
(assuming that your IDs are still unique after that).Thanks, passing
ids=...
works around the env issue too:(Although there are 30 params in the real test, so I’d opt for the method splitting workaround in this case.)