@@ -188,42 +188,54 @@ def _session_tests(
188188 # check for presence of tests
189189 test_list = glob .glob ("*_test.py" ) + glob .glob ("test_*.py" )
190190 test_list .extend (glob .glob ("tests" ))
191+
191192 if len (test_list ) == 0 :
192193 print ("No tests found, skipping directory." )
193- else :
194- if TEST_CONFIG ["pip_version_override" ]:
195- pip_version = TEST_CONFIG ["pip_version_override" ]
196- session .install (f"pip=={ pip_version } " )
197- """Runs py.test for a particular project."""
198- if os .path .exists ("requirements.txt" ):
199- if os .path .exists ("constraints.txt" ):
200- session .install ("-r" , "requirements.txt" , "-c" , "constraints.txt" )
201- else :
202- session .install ("-r" , "requirements.txt" )
203-
204- if os .path .exists ("requirements-test.txt" ):
205- if os .path .exists ("constraints-test.txt" ):
206- session .install (
207- "-r" , "requirements-test.txt" , "-c" , "constraints-test.txt"
208- )
209- else :
210- session .install ("-r" , "requirements-test.txt" )
211-
212- if INSTALL_LIBRARY_FROM_SOURCE :
213- session .install ("-e" , _get_repo_root ())
214-
215- if post_install :
216- post_install (session )
217-
218- session .run (
219- "pytest" ,
220- * (PYTEST_COMMON_ARGS + session .posargs ),
221- # Pytest will return 5 when no tests are collected. This can happen
222- # on travis where slow and flaky tests are excluded.
223- # See http://doc.pytest.org/en/latest/_modules/_pytest/main.html
224- success_codes = [0 , 5 ],
225- env = get_pytest_env_vars (),
226- )
194+ return
195+
196+ if TEST_CONFIG ["pip_version_override" ]:
197+ pip_version = TEST_CONFIG ["pip_version_override" ]
198+ session .install (f"pip=={ pip_version } " )
199+ """Runs py.test for a particular project."""
200+ concurrent_args = []
201+ if os .path .exists ("requirements.txt" ):
202+ if os .path .exists ("constraints.txt" ):
203+ session .install ("-r" , "requirements.txt" , "-c" , "constraints.txt" )
204+ else :
205+ session .install ("-r" , "requirements.txt" )
206+ with open ("requirements.txt" ) as rfile :
207+ packages = rfile .read ()
208+
209+ if os .path .exists ("requirements-test.txt" ):
210+ if os .path .exists ("constraints-test.txt" ):
211+ session .install (
212+ "-r" , "requirements-test.txt" , "-c" , "constraints-test.txt"
213+ )
214+ else :
215+ session .install ("-r" , "requirements-test.txt" )
216+ with open ("requirements-test.txt" ) as rtfile :
217+ packages += rtfile .read ()
218+
219+ if INSTALL_LIBRARY_FROM_SOURCE :
220+ session .install ("-e" , _get_repo_root ())
221+
222+ if post_install :
223+ post_install (session )
224+
225+ if "pytest-parallel" in packages :
226+ concurrent_args .extend (['--workers' , 'auto' , '--tests-per-worker' , 'auto' ])
227+ elif "pytest-xdist" in packages :
228+ concurrent_args .extend (['-n' , 'auto' ])
229+
230+ session .run (
231+ "pytest" ,
232+ * (PYTEST_COMMON_ARGS + session .posargs + concurrent_args ),
233+ # Pytest will return 5 when no tests are collected. This can happen
234+ # on travis where slow and flaky tests are excluded.
235+ # See http://doc.pytest.org/en/latest/_modules/_pytest/main.html
236+ success_codes = [0 , 5 ],
237+ env = get_pytest_env_vars (),
238+ )
227239
228240
229241@nox .session (python = ALL_VERSIONS )
0 commit comments