1616import os
1717import shutil
1818
19+ import _pytest ._version
1920import pytest
2021
2122import pytestskipmarkers .utils .platform
2223import pytestskipmarkers .utils .ports as ports
2324import pytestskipmarkers .utils .socket as socket
2425
26+
27+ PYTEST_GE_7 = getattr (_pytest ._version , "version_tuple" , (- 1 , - 1 )) >= (7 , 0 )
28+
2529log = logging .getLogger (__name__ )
2630
2731
@@ -162,15 +166,17 @@ def evaluate_markers(item):
162166 """
163167 Fixtures injection based on markers or test skips based on CLI arguments
164168 """
169+ exc_kwargs = {}
170+ if PYTEST_GE_7 :
171+ exc_kwargs ["_use_item_location" ] = True
165172 destructive_tests_marker = item .get_closest_marker ("destructive_test" )
166173 if destructive_tests_marker is not None :
167174 if destructive_tests_marker .args or destructive_tests_marker .kwargs :
168175 raise pytest .UsageError (
169176 "The 'destructive_test' marker does not accept any arguments or keyword arguments"
170177 )
171178 if item .config .getoption ("--run-destructive" ) is False :
172- item ._skipped_by_mark = True
173- pytest .skip ("Destructive tests are disabled" )
179+ raise pytest .skip .Exception ("Destructive tests are disabled" , ** exc_kwargs )
174180
175181 expensive_tests_marker = item .get_closest_marker ("expensive_test" )
176182 if expensive_tests_marker is not None :
@@ -179,8 +185,7 @@ def evaluate_markers(item):
179185 "The 'expensive_test' marker does not accept any arguments or keyword arguments"
180186 )
181187 if item .config .getoption ("--run-expensive" ) is False :
182- item ._skipped_by_mark = True
183- pytest .skip ("Expensive tests are disabled" )
188+ raise pytest .skip .Exception ("Expensive tests are disabled" , ** exc_kwargs )
184189
185190 skip_if_not_root_marker = item .get_closest_marker ("skip_if_not_root" )
186191 if skip_if_not_root_marker is not None :
@@ -190,8 +195,7 @@ def evaluate_markers(item):
190195 )
191196 skip_reason = skip_if_not_root ()
192197 if skip_reason :
193- item ._skipped_by_mark = True
194- pytest .skip (skip_reason )
198+ raise pytest .skip .Exception (skip_reason , ** exc_kwargs )
195199
196200 skip_if_binaries_missing_marker = item .get_closest_marker ("skip_if_binaries_missing" )
197201 if skip_if_binaries_missing_marker is not None :
@@ -216,8 +220,7 @@ def evaluate_markers(item):
216220 skip_if_binaries_missing_marker .kwargs ["reason" ] = message
217221 skip_reason = skip_if_binaries_missing (binaries , ** skip_if_binaries_missing_marker .kwargs )
218222 if skip_reason :
219- item ._skipped_by_mark = True
220- pytest .skip (skip_reason )
223+ raise pytest .skip .Exception (skip_reason , ** exc_kwargs )
221224
222225 requires_network_marker = item .get_closest_marker ("requires_network" )
223226 if requires_network_marker is not None :
@@ -226,14 +229,12 @@ def evaluate_markers(item):
226229 if local_skip_reason :
227230 # Since we're only supposed to check local network, and no
228231 # local network was detected, skip the test
229- item ._skipped_by_mark = True
230- pytest .skip (local_skip_reason )
232+ raise pytest .skip .Exception (local_skip_reason , ** exc_kwargs )
231233
232234 if only_local_network is False :
233235 remote_skip_reason = skip_if_no_remote_network ()
234236 if remote_skip_reason :
235- item ._skipped_by_mark = True
236- pytest .skip (remote_skip_reason )
237+ raise pytest .skip .Exception (remote_skip_reason , ** exc_kwargs )
237238
238239 # Platform Skip Markers
239240 skip_on_windows_marker = item .get_closest_marker ("skip_on_windows" )
@@ -248,8 +249,7 @@ def evaluate_markers(item):
248249 if reason is None :
249250 reason = "Skipped on Windows"
250251 if pytestskipmarkers .utils .platform .is_windows ():
251- item ._skipped_by_mark = True
252- pytest .skip (reason )
252+ raise pytest .skip .Exception (reason , ** exc_kwargs )
253253
254254 skip_unless_on_windows_marker = item .get_closest_marker ("skip_unless_on_windows" )
255255 if skip_unless_on_windows_marker is not None :
@@ -265,8 +265,7 @@ def evaluate_markers(item):
265265 if reason is None :
266266 reason = "Platform is not Windows, skipped"
267267 if not pytestskipmarkers .utils .platform .is_windows ():
268- item ._skipped_by_mark = True
269- pytest .skip (reason )
268+ raise pytest .skip .Exception (reason , ** exc_kwargs )
270269
271270 skip_on_linux_marker = item .get_closest_marker ("skip_on_linux" )
272271 if skip_on_linux_marker is not None :
@@ -280,8 +279,7 @@ def evaluate_markers(item):
280279 if reason is None :
281280 reason = "Skipped on Linux"
282281 if pytestskipmarkers .utils .platform .is_linux ():
283- item ._skipped_by_mark = True
284- pytest .skip (reason )
282+ raise pytest .skip .Exception (reason , ** exc_kwargs )
285283
286284 skip_unless_on_linux_marker = item .get_closest_marker ("skip_unless_on_linux" )
287285 if skip_unless_on_linux_marker is not None :
@@ -295,8 +293,7 @@ def evaluate_markers(item):
295293 if reason is None :
296294 reason = "Platform is not Linux, skipped"
297295 if not pytestskipmarkers .utils .platform .is_linux ():
298- item ._skipped_by_mark = True
299- pytest .skip (reason )
296+ raise pytest .skip .Exception (reason , ** exc_kwargs )
300297
301298 skip_on_darwin_marker = item .get_closest_marker ("skip_on_darwin" )
302299 if skip_on_darwin_marker is not None :
@@ -310,8 +307,7 @@ def evaluate_markers(item):
310307 if reason is None :
311308 reason = "Skipped on Darwin"
312309 if pytestskipmarkers .utils .platform .is_darwin ():
313- item ._skipped_by_mark = True
314- pytest .skip (reason )
310+ raise pytest .skip .Exception (reason , ** exc_kwargs )
315311
316312 skip_unless_on_darwin_marker = item .get_closest_marker ("skip_unless_on_darwin" )
317313 if skip_unless_on_darwin_marker is not None :
@@ -327,8 +323,7 @@ def evaluate_markers(item):
327323 if reason is None :
328324 reason = "Platform is not Darwin, skipped"
329325 if not pytestskipmarkers .utils .platform .is_darwin ():
330- item ._skipped_by_mark = True
331- pytest .skip (reason )
326+ raise pytest .skip .Exception (reason , ** exc_kwargs )
332327
333328 skip_on_sunos_marker = item .get_closest_marker ("skip_on_sunos" )
334329 if skip_on_sunos_marker is not None :
@@ -342,8 +337,7 @@ def evaluate_markers(item):
342337 if reason is None :
343338 reason = "Skipped on SunOS"
344339 if pytestskipmarkers .utils .platform .is_sunos ():
345- item ._skipped_by_mark = True
346- pytest .skip (reason )
340+ raise pytest .skip .Exception (reason , ** exc_kwargs )
347341
348342 skip_unless_on_sunos_marker = item .get_closest_marker ("skip_unless_on_sunos" )
349343 if skip_unless_on_sunos_marker is not None :
@@ -357,8 +351,7 @@ def evaluate_markers(item):
357351 if reason is None :
358352 reason = "Platform is not SunOS, skipped"
359353 if not pytestskipmarkers .utils .platform .is_sunos ():
360- item ._skipped_by_mark = True
361- pytest .skip (reason )
354+ raise pytest .skip .Exception (reason , ** exc_kwargs )
362355
363356 skip_on_smartos_marker = item .get_closest_marker ("skip_on_smartos" )
364357 if skip_on_smartos_marker is not None :
@@ -372,8 +365,7 @@ def evaluate_markers(item):
372365 if reason is None :
373366 reason = "Skipped on SmartOS"
374367 if pytestskipmarkers .utils .platform .is_smartos ():
375- item ._skipped_by_mark = True
376- pytest .skip (reason )
368+ raise pytest .skip .Exception (reason , ** exc_kwargs )
377369
378370 skip_unless_on_smartos_marker = item .get_closest_marker ("skip_unless_on_smartos" )
379371 if skip_unless_on_smartos_marker is not None :
@@ -389,8 +381,7 @@ def evaluate_markers(item):
389381 if reason is None :
390382 reason = "Platform is not SmartOS, skipped"
391383 if not pytestskipmarkers .utils .platform .is_smartos ():
392- item ._skipped_by_mark = True
393- pytest .skip (reason )
384+ raise pytest .skip .Exception (reason , ** exc_kwargs )
394385
395386 skip_on_freebsd_marker = item .get_closest_marker ("skip_on_freebsd" )
396387 if skip_on_freebsd_marker is not None :
@@ -404,8 +395,7 @@ def evaluate_markers(item):
404395 if reason is None :
405396 reason = "Skipped on FreeBSD"
406397 if pytestskipmarkers .utils .platform .is_freebsd ():
407- item ._skipped_by_mark = True
408- pytest .skip (reason )
398+ raise pytest .skip .Exception (reason , ** exc_kwargs )
409399
410400 skip_unless_on_freebsd_marker = item .get_closest_marker ("skip_unless_on_freebsd" )
411401 if skip_unless_on_freebsd_marker is not None :
@@ -421,8 +411,7 @@ def evaluate_markers(item):
421411 if reason is None :
422412 reason = "Platform is not FreeBSD, skipped"
423413 if not pytestskipmarkers .utils .platform .is_freebsd ():
424- item ._skipped_by_mark = True
425- pytest .skip (reason )
414+ raise pytest .skip .Exception (reason , ** exc_kwargs )
426415
427416 skip_on_netbsd_marker = item .get_closest_marker ("skip_on_netbsd" )
428417 if skip_on_netbsd_marker is not None :
@@ -436,8 +425,7 @@ def evaluate_markers(item):
436425 if reason is None :
437426 reason = "Skipped on NetBSD"
438427 if pytestskipmarkers .utils .platform .is_netbsd ():
439- item ._skipped_by_mark = True
440- pytest .skip (reason )
428+ raise pytest .skip .Exception (reason , ** exc_kwargs )
441429
442430 skip_unless_on_netbsd_marker = item .get_closest_marker ("skip_unless_on_netbsd" )
443431 if skip_unless_on_netbsd_marker is not None :
@@ -453,8 +441,7 @@ def evaluate_markers(item):
453441 if reason is None :
454442 reason = "Platform is not NetBSD, skipped"
455443 if not pytestskipmarkers .utils .platform .is_netbsd ():
456- item ._skipped_by_mark = True
457- pytest .skip (reason )
444+ raise pytest .skip .Exception (reason , ** exc_kwargs )
458445
459446 skip_on_openbsd_marker = item .get_closest_marker ("skip_on_openbsd" )
460447 if skip_on_openbsd_marker is not None :
@@ -468,8 +455,7 @@ def evaluate_markers(item):
468455 if reason is None :
469456 reason = "Skipped on OpenBSD"
470457 if pytestskipmarkers .utils .platform .is_openbsd ():
471- item ._skipped_by_mark = True
472- pytest .skip (reason )
458+ raise pytest .skip .Exception (reason , ** exc_kwargs )
473459
474460 skip_unless_on_openbsd_marker = item .get_closest_marker ("skip_unless_on_openbsd" )
475461 if skip_unless_on_openbsd_marker is not None :
@@ -485,8 +471,7 @@ def evaluate_markers(item):
485471 if reason is None :
486472 reason = "Platform is not OpenBSD, skipped"
487473 if not pytestskipmarkers .utils .platform .is_openbsd ():
488- item ._skipped_by_mark = True
489- pytest .skip (reason )
474+ raise pytest .skip .Exception (reason , ** exc_kwargs )
490475
491476 skip_on_aix_marker = item .get_closest_marker ("skip_on_aix" )
492477 if skip_on_aix_marker is not None :
@@ -500,8 +485,7 @@ def evaluate_markers(item):
500485 if reason is None :
501486 reason = "Skipped on AIX"
502487 if pytestskipmarkers .utils .platform .is_aix ():
503- item ._skipped_by_mark = True
504- pytest .skip (reason )
488+ raise pytest .skip .Exception (reason , ** exc_kwargs )
505489
506490 skip_unless_on_aix_marker = item .get_closest_marker ("skip_unless_on_aix" )
507491 if skip_unless_on_aix_marker is not None :
@@ -515,8 +499,7 @@ def evaluate_markers(item):
515499 if reason is None :
516500 reason = "Platform is not AIX, skipped"
517501 if not pytestskipmarkers .utils .platform .is_aix ():
518- item ._skipped_by_mark = True
519- pytest .skip (reason )
502+ raise pytest .skip .Exception (reason , ** exc_kwargs )
520503
521504 skip_on_aarch64_marker = item .get_closest_marker ("skip_on_aarch64" )
522505 if skip_on_aarch64_marker is not None :
@@ -530,8 +513,7 @@ def evaluate_markers(item):
530513 if reason is None :
531514 reason = "Skipped on AArch64"
532515 if pytestskipmarkers .utils .platform .is_aarch64 ():
533- item ._skipped_by_mark = True
534- pytest .skip (reason )
516+ raise pytest .skip .Exception (reason , ** exc_kwargs )
535517
536518 skip_unless_on_aarch64_marker = item .get_closest_marker ("skip_unless_on_aarch64" )
537519 if skip_unless_on_aarch64_marker is not None :
@@ -547,8 +529,7 @@ def evaluate_markers(item):
547529 if reason is None :
548530 reason = "Platform is not AArch64, skipped"
549531 if not pytestskipmarkers .utils .platform .is_aarch64 ():
550- item ._skipped_by_mark = True
551- pytest .skip (reason )
532+ raise pytest .skip .Exception (reason , ** exc_kwargs )
552533
553534 skip_on_spawning_platform_marker = item .get_closest_marker ("skip_on_spawning_platform" )
554535 if skip_on_spawning_platform_marker is not None :
@@ -564,8 +545,7 @@ def evaluate_markers(item):
564545 if reason is None :
565546 reason = "Skipped on spawning platforms"
566547 if pytestskipmarkers .utils .platform .is_spawning_platform ():
567- item ._skipped_by_mark = True
568- pytest .skip (reason )
548+ raise pytest .skip .Exception (reason , ** exc_kwargs )
569549
570550 skip_unless_on_spawning_platform_marker = item .get_closest_marker (
571551 "skip_unless_on_spawning_platform"
@@ -583,8 +563,7 @@ def evaluate_markers(item):
583563 if reason is None :
584564 reason = "Platform does not default multiprocessing to spawn, skipped"
585565 if not pytestskipmarkers .utils .platform .is_spawning_platform ():
586- item ._skipped_by_mark = True
587- pytest .skip (reason )
566+ raise pytest .skip .Exception (reason , ** exc_kwargs )
588567
589568 skip_on_platforms_marker = item .get_closest_marker ("skip_on_platforms" )
590569 if skip_on_platforms_marker is not None :
@@ -603,8 +582,7 @@ def evaluate_markers(item):
603582 reason = "Skipped on platform match"
604583 try :
605584 if pytestskipmarkers .utils .platform .on_platforms (** skip_on_platforms_marker .kwargs ):
606- item ._skipped_by_mark = True
607- pytest .skip (reason )
585+ raise pytest .skip .Exception (reason , ** exc_kwargs )
608586 except TypeError as exc :
609587 raise pytest .UsageError (
610588 "Passed an invalid platform to skip_on_platforms: {}" .format (exc )
@@ -631,8 +609,7 @@ def evaluate_markers(item):
631609 if not pytestskipmarkers .utils .platform .on_platforms (
632610 ** skip_unless_on_platforms_marker .kwargs
633611 ):
634- item ._skipped_by_mark = True
635- pytest .skip (reason )
612+ raise pytest .skip .Exception (reason , ** exc_kwargs )
636613 except TypeError as exc :
637614 raise pytest .UsageError (
638615 "Passed an invalid platform to skip_unless_on_platforms: {}" .format (exc )
0 commit comments