pytest-platform-adapter 1.1.0__py3-none-any.whl → 1.2.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pytest_platform_adapter/plugin.py +135 -35
- {pytest_platform_adapter-1.1.0.dist-info → pytest_platform_adapter-1.2.1.dist-info}/METADATA +11 -3
- pytest_platform_adapter-1.2.1.dist-info/RECORD +8 -0
- {pytest_platform_adapter-1.1.0.dist-info → pytest_platform_adapter-1.2.1.dist-info}/WHEEL +1 -1
- pytest_platform_adapter-1.1.0.dist-info/RECORD +0 -8
- {pytest_platform_adapter-1.1.0.dist-info → pytest_platform_adapter-1.2.1.dist-info}/entry_points.txt +0 -0
- {pytest_platform_adapter-1.1.0.dist-info → pytest_platform_adapter-1.2.1.dist-info}/licenses/LICENSE +0 -0
- {pytest_platform_adapter-1.1.0.dist-info → pytest_platform_adapter-1.2.1.dist-info}/top_level.txt +0 -0
|
@@ -37,6 +37,7 @@ ENV_RUNTIME_KEY: StashKey["EnvCheckRuntime"] = StashKey()
|
|
|
37
37
|
ITEM_KIND_KEY: StashKey[str] = StashKey()
|
|
38
38
|
BEHAVIOR_KEY: StashKey[Optional[str]] = StashKey()
|
|
39
39
|
ENV_XFAIL_REASON_KEY: StashKey[Optional[str]] = StashKey()
|
|
40
|
+
FORCED_ITEMS_KEY: StashKey[List[pytest.Item]] = StashKey()
|
|
40
41
|
STASH_SENTINEL = object()
|
|
41
42
|
|
|
42
43
|
|
|
@@ -45,6 +46,7 @@ class EnvCheckSettings:
|
|
|
45
46
|
mode: str = 'all'
|
|
46
47
|
behavior_scope: str = 'feature'
|
|
47
48
|
fail_action: str = 'skip'
|
|
49
|
+
collect_mode: str = 'force' # force(强制)/auto(自动)
|
|
48
50
|
global_nodeids: List[str] = field(default_factory=list)
|
|
49
51
|
behavior_nodeids: List[str] = field(default_factory=list)
|
|
50
52
|
|
|
@@ -104,6 +106,13 @@ def pytest_addoption(parser):
|
|
|
104
106
|
default=None,
|
|
105
107
|
help='特性级检查所使用的 Allure 标签层级:epic/feature/story'
|
|
106
108
|
)
|
|
109
|
+
group.addoption(
|
|
110
|
+
'--env-check-collect-mode',
|
|
111
|
+
action='store',
|
|
112
|
+
default=None,
|
|
113
|
+
choices=['force', 'auto'],
|
|
114
|
+
help='环境检查收集模式覆盖:force(强制收集并执行)/auto(仅执行已收集到的检查用例)'
|
|
115
|
+
)
|
|
107
116
|
parser.addini(
|
|
108
117
|
'platform_ip',
|
|
109
118
|
help='自动化平台API IP',
|
|
@@ -146,8 +155,13 @@ def pytest_addoption(parser):
|
|
|
146
155
|
help='环境检查失败后对业务用例的处理方式(skip/xfail/none)',
|
|
147
156
|
default='skip'
|
|
148
157
|
)
|
|
158
|
+
parser.addini(
|
|
159
|
+
'platform_env_collect_mode',
|
|
160
|
+
help='环境检查收集模式:force(强制收集并执行)/auto(仅执行已收集到的检查用例)',
|
|
161
|
+
default='force'
|
|
162
|
+
)
|
|
149
163
|
|
|
150
|
-
|
|
164
|
+
@pytest.hookimpl(tryfirst=True, hookwrapper=True)
|
|
151
165
|
def pytest_collection_modifyitems(config, items):
|
|
152
166
|
"""
|
|
153
167
|
hook收集用例的过程,给--case_ids和--case_ids_file提供支持
|
|
@@ -155,8 +169,27 @@ def pytest_collection_modifyitems(config, items):
|
|
|
155
169
|
"""
|
|
156
170
|
settings = get_env_settings(config)
|
|
157
171
|
forced_nodeids = _collect_forced_nodeids(settings)
|
|
158
|
-
|
|
159
|
-
|
|
172
|
+
# 预先快照强制环境检查用例,供后续无视 -m / -k 过滤使用。
|
|
173
|
+
if env_checks_enabled(settings) and settings.collect_mode == 'force':
|
|
174
|
+
forced_items: List[pytest.Item] = []
|
|
175
|
+
seen: Set[str] = set()
|
|
176
|
+
for item in items:
|
|
177
|
+
if _is_forced_item(item.nodeid, forced_nodeids) and item.nodeid not in seen:
|
|
178
|
+
forced_items.append(item)
|
|
179
|
+
seen.add(item.nodeid)
|
|
180
|
+
config.stash[FORCED_ITEMS_KEY] = forced_items
|
|
181
|
+
yield
|
|
182
|
+
# 缺失检查告警:force 模式下使用 pre-deselect 的快照判断,避免被 -m/-k 误判。
|
|
183
|
+
if env_checks_enabled(settings) and settings.collect_mode == 'force':
|
|
184
|
+
forced_items_snapshot = config.stash.get(FORCED_ITEMS_KEY, [])
|
|
185
|
+
available_ids = {item.nodeid for item in forced_items_snapshot}
|
|
186
|
+
else:
|
|
187
|
+
available_ids = {item.nodeid for item in items}
|
|
188
|
+
missing_forced: List[str] = []
|
|
189
|
+
for prefix in forced_nodeids:
|
|
190
|
+
if not any(n == prefix or n.startswith(prefix + "::") for n in available_ids):
|
|
191
|
+
missing_forced.append(prefix)
|
|
192
|
+
for missing in sorted(missing_forced):
|
|
160
193
|
logger.warning(f"配置的环境检查用例 {missing} 未被收集,检查 NodeID 是否正确")
|
|
161
194
|
|
|
162
195
|
target_ids = get_target_test_ids(config)
|
|
@@ -164,7 +197,7 @@ def pytest_collection_modifyitems(config, items):
|
|
|
164
197
|
deselected = []
|
|
165
198
|
for item in items:
|
|
166
199
|
nodeid = item.nodeid
|
|
167
|
-
should_force_run = nodeid
|
|
200
|
+
should_force_run = _is_forced_item(nodeid, forced_nodeids)
|
|
168
201
|
title = allure_title(item)
|
|
169
202
|
test_id = get_test_id_from_title(title)
|
|
170
203
|
if not target_ids or should_force_run or test_id in target_ids:
|
|
@@ -182,6 +215,16 @@ def pytest_collection_modifyitems(config, items):
|
|
|
182
215
|
if deselected:
|
|
183
216
|
config.hook.pytest_deselected(items=deselected)
|
|
184
217
|
items[:] = selected
|
|
218
|
+
|
|
219
|
+
# force 模式下无视 -m / -k 的 deselect:把缓存的环境检查重新插回来
|
|
220
|
+
if env_checks_enabled(settings) and settings.collect_mode == 'force':
|
|
221
|
+
forced_items = config.stash.get(FORCED_ITEMS_KEY, [])
|
|
222
|
+
current_ids = {item.nodeid for item in items}
|
|
223
|
+
for forced_item in forced_items:
|
|
224
|
+
if forced_item.nodeid not in current_ids:
|
|
225
|
+
items.append(forced_item)
|
|
226
|
+
current_ids.add(forced_item.nodeid)
|
|
227
|
+
|
|
185
228
|
selected_ids = [get_test_id_from_title(allure_title(item)) for item in items]
|
|
186
229
|
test_stats['total'] = len(items) # 更新总用例数
|
|
187
230
|
if target_ids:
|
|
@@ -337,8 +380,37 @@ def pytest_configure(config):
|
|
|
337
380
|
'--scan'), config.getini('platform_ip'), config.getini('platform_port'), config.getini(
|
|
338
381
|
'platform_path'), config.getini('platform_use_https')
|
|
339
382
|
settings = build_env_check_settings(config)
|
|
383
|
+
if config.getoption('--scan'):
|
|
384
|
+
# 扫描模式下禁用环境检查,避免强制收集影响正常用例收集。
|
|
385
|
+
settings.mode = 'off'
|
|
340
386
|
config.stash[ENV_SETTINGS_KEY] = settings
|
|
341
387
|
config.stash[ENV_RUNTIME_KEY] = EnvCheckRuntime()
|
|
388
|
+
# 在强制模式下,将声明的环境检查 NodeID 注入到 pytest 收集参数中,
|
|
389
|
+
# 以保证即使用户只选择了业务目录也能收集到检查用例。
|
|
390
|
+
if env_checks_enabled(settings) and settings.collect_mode == 'force':
|
|
391
|
+
try:
|
|
392
|
+
from pathlib import Path
|
|
393
|
+
|
|
394
|
+
existing_args = set(config.args or [])
|
|
395
|
+
rootpath = getattr(config, "rootpath", Path.cwd())
|
|
396
|
+
forced_args: List[str] = []
|
|
397
|
+
for nodeid in _collect_forced_nodeids(settings):
|
|
398
|
+
if nodeid in existing_args:
|
|
399
|
+
continue
|
|
400
|
+
# 仅对文件路径存在的 NodeID 进行注入,避免明显的 not found。
|
|
401
|
+
path_part = nodeid.split("::", 1)[0]
|
|
402
|
+
p = Path(path_part)
|
|
403
|
+
if not p.is_absolute():
|
|
404
|
+
p = rootpath / p
|
|
405
|
+
if p.exists():
|
|
406
|
+
forced_args.append(nodeid)
|
|
407
|
+
else:
|
|
408
|
+
logger.warning("强制收集环境检查失败:文件不存在 %s", nodeid)
|
|
409
|
+
if forced_args:
|
|
410
|
+
config.args.extend(forced_args)
|
|
411
|
+
logger.debug("已强制注入环境检查收集参数: %s", forced_args)
|
|
412
|
+
except Exception as e:
|
|
413
|
+
logger.warning("强制收集环境检查参数注入异常:%s", e)
|
|
342
414
|
pipeline_name = os.environ.get("JOB_NAME")
|
|
343
415
|
build_number = os.environ.get("BUILD_NUMBER")
|
|
344
416
|
handler = logging.StreamHandler()
|
|
@@ -412,6 +484,16 @@ def build_env_check_settings(config) -> EnvCheckSettings:
|
|
|
412
484
|
if fail_action not in {'skip', 'xfail', 'none'}:
|
|
413
485
|
logger.warning("platform_env_fail_action=%s 不受支持,改用 skip", fail_action_raw)
|
|
414
486
|
fail_action = 'skip'
|
|
487
|
+
collect_mode_opt = config.getoption('--env-check-collect-mode')
|
|
488
|
+
collect_mode_raw = collect_mode_opt or config.getini('platform_env_collect_mode')
|
|
489
|
+
collect_mode = (collect_mode_raw or 'force').strip().lower()
|
|
490
|
+
if collect_mode in {'强制'}:
|
|
491
|
+
collect_mode = 'force'
|
|
492
|
+
elif collect_mode in {'自动'}:
|
|
493
|
+
collect_mode = 'auto'
|
|
494
|
+
if collect_mode not in {'force', 'auto'}:
|
|
495
|
+
logger.warning("platform_env_collect_mode=%s 不受支持,改用 force", collect_mode_raw)
|
|
496
|
+
collect_mode = 'force'
|
|
415
497
|
global_nodes = _normalize_nodeids(config.getini('platform_env_global_checks'))
|
|
416
498
|
behavior_nodes = _normalize_nodeids(config.getini('platform_env_behavior_checks'))
|
|
417
499
|
if mode not in {'off', 'global', 'behavior', 'all'}:
|
|
@@ -421,6 +503,7 @@ def build_env_check_settings(config) -> EnvCheckSettings:
|
|
|
421
503
|
mode=mode,
|
|
422
504
|
behavior_scope=scope,
|
|
423
505
|
fail_action=fail_action,
|
|
506
|
+
collect_mode=collect_mode,
|
|
424
507
|
global_nodeids=global_nodes,
|
|
425
508
|
behavior_nodeids=behavior_nodes,
|
|
426
509
|
)
|
|
@@ -462,40 +545,54 @@ def _collect_forced_nodeids(settings: Optional[EnvCheckSettings]) -> Set[str]:
|
|
|
462
545
|
return forced
|
|
463
546
|
|
|
464
547
|
|
|
548
|
+
def _is_forced_item(nodeid: str, forced_nodeids: Set[str]) -> bool:
|
|
549
|
+
"""支持用父级 NodeID(如模块/类)声明的强制收集。"""
|
|
550
|
+
if nodeid in forced_nodeids:
|
|
551
|
+
return True
|
|
552
|
+
for forced in forced_nodeids:
|
|
553
|
+
if nodeid.startswith(forced + "::"):
|
|
554
|
+
return True
|
|
555
|
+
return False
|
|
556
|
+
|
|
557
|
+
|
|
465
558
|
def _apply_env_check_collection_logic(config, settings: EnvCheckSettings, items: List[pytest.Item]) -> None:
|
|
466
|
-
node_map = {item.nodeid: item for item in items}
|
|
467
559
|
ordered: List[pytest.Item] = []
|
|
468
560
|
consumed: Set[str] = set()
|
|
469
561
|
missing_behaviors: List[str] = []
|
|
470
562
|
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
563
|
+
# 1) 全局检查:支持使用模块/类 NodeID 作为前缀声明。
|
|
564
|
+
for prefix in settings.global_nodeids:
|
|
565
|
+
for item in items:
|
|
566
|
+
if item.nodeid in consumed:
|
|
567
|
+
continue
|
|
568
|
+
if item.nodeid == prefix or item.nodeid.startswith(prefix + "::"):
|
|
569
|
+
ordered.append(item)
|
|
570
|
+
consumed.add(item.nodeid)
|
|
571
|
+
item.stash[ITEM_KIND_KEY] = 'global_check'
|
|
572
|
+
item.stash[BEHAVIOR_KEY] = None
|
|
479
573
|
|
|
574
|
+
# 2) 特性级检查:同样支持前缀声明,按行为(epic/feature/story)绑定。
|
|
480
575
|
behavior_checks: Dict[str, pytest.Item] = {}
|
|
481
|
-
for
|
|
482
|
-
item
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
576
|
+
for prefix in settings.behavior_nodeids:
|
|
577
|
+
for item in items:
|
|
578
|
+
if item.nodeid in consumed:
|
|
579
|
+
continue
|
|
580
|
+
if item.nodeid != prefix and not item.nodeid.startswith(prefix + "::"):
|
|
581
|
+
continue
|
|
582
|
+
behavior = _ensure_behavior_stashed(item, settings.behavior_scope)
|
|
583
|
+
if not behavior:
|
|
584
|
+
missing_behaviors.append(item.nodeid)
|
|
585
|
+
continue
|
|
586
|
+
if behavior in behavior_checks:
|
|
587
|
+
logger.warning(
|
|
588
|
+
"特性级检查 %s 重复定义,沿用首次声明的用例 %s",
|
|
589
|
+
behavior,
|
|
590
|
+
behavior_checks[behavior].nodeid,
|
|
591
|
+
)
|
|
592
|
+
continue
|
|
593
|
+
behavior_checks[behavior] = item
|
|
594
|
+
consumed.add(item.nodeid)
|
|
595
|
+
item.stash[ITEM_KIND_KEY] = 'behavior_check'
|
|
499
596
|
|
|
500
597
|
if missing_behaviors:
|
|
501
598
|
logger.warning(
|
|
@@ -504,6 +601,7 @@ def _apply_env_check_collection_logic(config, settings: EnvCheckSettings, items:
|
|
|
504
601
|
missing_behaviors,
|
|
505
602
|
)
|
|
506
603
|
|
|
604
|
+
# 3) 按业务用例的行为插入对应检查。
|
|
507
605
|
behavior_inserted: Set[str] = set()
|
|
508
606
|
for item in items:
|
|
509
607
|
if item.nodeid in consumed:
|
|
@@ -516,10 +614,12 @@ def _apply_env_check_collection_logic(config, settings: EnvCheckSettings, items:
|
|
|
516
614
|
behavior_inserted.add(behavior)
|
|
517
615
|
ordered.append(item)
|
|
518
616
|
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
behavior_inserted
|
|
617
|
+
# 4) 未匹配到业务用例的特性级检查:force 模式下不执行;auto 模式保持原行为(放到末尾执行)。
|
|
618
|
+
if settings.collect_mode != 'force':
|
|
619
|
+
for behavior, check_item in behavior_checks.items():
|
|
620
|
+
if behavior not in behavior_inserted:
|
|
621
|
+
ordered.append(check_item)
|
|
622
|
+
behavior_inserted.add(behavior)
|
|
523
623
|
|
|
524
624
|
if ordered:
|
|
525
625
|
items[:] = ordered
|
{pytest_platform_adapter-1.1.0.dist-info → pytest_platform_adapter-1.2.1.dist-info}/METADATA
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pytest_platform_adapter
|
|
3
|
-
Version: 1.1
|
|
3
|
+
Version: 1.2.1
|
|
4
4
|
Summary: Pytest集成自动化平台插件
|
|
5
5
|
Author-email: BlackYau <blackyau426@gmail.com>
|
|
6
6
|
Maintainer-email: BlackYau <blackyau426@gmail.com>
|
|
@@ -22,6 +22,7 @@ Classifier: Programming Language :: Python :: 3.8
|
|
|
22
22
|
Classifier: Programming Language :: Python :: 3.9
|
|
23
23
|
Classifier: Programming Language :: Python :: 3.10
|
|
24
24
|
Classifier: Programming Language :: Python :: 3.11
|
|
25
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
25
26
|
Classifier: Topic :: Software Development
|
|
26
27
|
Classifier: Topic :: Software Development :: Testing
|
|
27
28
|
Classifier: Topic :: Software Development :: Testing :: Acceptance
|
|
@@ -87,7 +88,8 @@ pip install -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple pytest-platf
|
|
|
87
88
|
然后在命令行中使用以下命令安装(你需要提前安装 `pytest` 和 `allure-pytest`)
|
|
88
89
|
|
|
89
90
|
```
|
|
90
|
-
|
|
91
|
+
# 需要把下面的 x.x.x 替换为实际的版本号
|
|
92
|
+
pip install pytest_platform_adapter-x.x.x-py3-none-any.whl
|
|
91
93
|
```
|
|
92
94
|
|
|
93
95
|
#### 国内镜像站下载离线安装
|
|
@@ -99,7 +101,8 @@ pip install pytest_platform_adapter-1.1.0-py3-none-any.whl
|
|
|
99
101
|
然后在命令行中使用以下命令安装(你需要提前安装 `pytest` 和 `allure-pytest`)
|
|
100
102
|
|
|
101
103
|
```
|
|
102
|
-
|
|
104
|
+
# 需要把下面的 x.x.x 替换为实际的版本号
|
|
105
|
+
pip install pytest_platform_adapter-x.x.x-py3-none-any.whl
|
|
103
106
|
```
|
|
104
107
|
|
|
105
108
|
## 使用方法
|
|
@@ -193,17 +196,22 @@ platform_env_behavior_checks =
|
|
|
193
196
|
tests/env_check/test_function_env_check.py::TestFunctionEnvCheck
|
|
194
197
|
platform_env_behavior_scope = epic # epic / feature / story
|
|
195
198
|
platform_env_fail_action = skip # skip / xfail / none
|
|
199
|
+
platform_env_collect_mode = force # force / auto
|
|
196
200
|
```
|
|
197
201
|
|
|
198
202
|
- `platform_env_global_checks`:在每次用例执行前跑一遍的检查用例列表。
|
|
199
203
|
- `platform_env_behavior_checks`:特性级检查用例列表,插件会读取这些用例标签并在同一特性的首个用例前插入执行。
|
|
200
204
|
- `platform_env_behavior_scope`:定义特性的级别可选的有 epic/feature/story(分别对应 Allure Report 的 behaviors 中的一级目录、二级目录、三级目录)
|
|
201
205
|
- `platform_env_fail_action`:检查失败后对后续业务用例的处理方式,`skip` 为直接跳过、`xfail` 为继续执行并动态加上 `xfail`(失败记为 XFAIL、通过记为 XPASS)、`none` 仅记录日志不干预执行。
|
|
206
|
+
- `platform_env_collect_mode`:环境检查收集模式,默认 `force`。
|
|
207
|
+
- `force`(强制):即使本次命令行只收集了业务目录,也会强制把 `platform_env_global_checks` / `platform_env_behavior_checks` 声明的 NodeID 注入收集范围;环境检查用例不受 `-m`/`-k` 等筛选影响永远执行;全局检查永远执行;特性级检查仅在本次业务用例中存在同一行为标签(scope 对应 epic/feature/story)的情况下才执行,没有匹配的特性级检查不会执行。
|
|
208
|
+
- `auto`(自动):不额外注入收集参数,仅执行本次 pytest 收集到的检查用例;如果声明的 NodeID 没有被收集到则不会执行。
|
|
202
209
|
|
|
203
210
|
#### 命令行
|
|
204
211
|
|
|
205
212
|
- `--env-check-mode={off,global,behavior,all}`:快速控制启用的检查范围。
|
|
206
213
|
- `--env-check-scope=<epic|feature|story>`:临时覆盖行为层级设定。
|
|
214
|
+
- `--env-check-collect-mode={force,auto}`:临时覆盖 `platform_env_collect_mode`,控制环境检查的收集/执行策略。
|
|
207
215
|
- 当 `platform_env_fail_action=xfail` 时,会在受影响的业务用例上自动添加 `pytest.mark.xfail(run=True, strict=False)`,用例依旧执行,只是失败时记为 XFAIL。
|
|
208
216
|
|
|
209
217
|
当检查用例失败时,插件会在 `pytest_runtest_setup` 阶段统一对后续业务用例执行 `skip` 或 `xfail`,并在日志中说明对应的检查节点。检查用例自身依旧遵循 pytest 原生语义,可继续使用 `skip/xfail/flaky` 等标记。
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
pytest_platform_adapter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
+
pytest_platform_adapter/plugin.py,sha256=GBZSJZEa6KZD2zTjN4qbtgkxLUX0js7q9QRjldRf1Qk,26791
|
|
3
|
+
pytest_platform_adapter-1.2.1.dist-info/licenses/LICENSE,sha256=QOkNlcvUHENY86LE8OEpmtwMM24v76pgF4FmkEk8aXI,1064
|
|
4
|
+
pytest_platform_adapter-1.2.1.dist-info/METADATA,sha256=Wh81pUMUEjEkecFrtyBlk6SwOAOpX5_xfDixeNeq-4A,11480
|
|
5
|
+
pytest_platform_adapter-1.2.1.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
6
|
+
pytest_platform_adapter-1.2.1.dist-info/entry_points.txt,sha256=VorMHllVSkGNUUsVJOCrDMeW0-oLco5XcrmdfxND48c,61
|
|
7
|
+
pytest_platform_adapter-1.2.1.dist-info/top_level.txt,sha256=OnTaKf7GCc7yqBHQ4H2XLK8PAz7oHslUZKEsd1t5BpA,24
|
|
8
|
+
pytest_platform_adapter-1.2.1.dist-info/RECORD,,
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
pytest_platform_adapter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
-
pytest_platform_adapter/plugin.py,sha256=KAnSugCo9L8uceSO22LRi28myAclU3WSOo0Tpfiupp4,21604
|
|
3
|
-
pytest_platform_adapter-1.1.0.dist-info/licenses/LICENSE,sha256=QOkNlcvUHENY86LE8OEpmtwMM24v76pgF4FmkEk8aXI,1064
|
|
4
|
-
pytest_platform_adapter-1.1.0.dist-info/METADATA,sha256=wSKR3CVr40S3fNRTUDcCTNDXMWG_-yi2GP9vdiHBXLE,10437
|
|
5
|
-
pytest_platform_adapter-1.1.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
6
|
-
pytest_platform_adapter-1.1.0.dist-info/entry_points.txt,sha256=VorMHllVSkGNUUsVJOCrDMeW0-oLco5XcrmdfxND48c,61
|
|
7
|
-
pytest_platform_adapter-1.1.0.dist-info/top_level.txt,sha256=OnTaKf7GCc7yqBHQ4H2XLK8PAz7oHslUZKEsd1t5BpA,24
|
|
8
|
-
pytest_platform_adapter-1.1.0.dist-info/RECORD,,
|
{pytest_platform_adapter-1.1.0.dist-info → pytest_platform_adapter-1.2.1.dist-info}/entry_points.txt
RENAMED
|
File without changes
|
{pytest_platform_adapter-1.1.0.dist-info → pytest_platform_adapter-1.2.1.dist-info}/licenses/LICENSE
RENAMED
|
File without changes
|
{pytest_platform_adapter-1.1.0.dist-info → pytest_platform_adapter-1.2.1.dist-info}/top_level.txt
RENAMED
|
File without changes
|