Init
This commit is contained in:
commit
c394677d07
59 files changed
+5149
No files matched your search
@@ -0,0 +1,56 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""Автотесты лабораторной 7 (сводная).
|
||||
|
||||
solution.py запускается подпроцессом с LAB_SMOKE=1 (как в лабе 4),
|
||||
т.к. в решении используется multiprocessing.
|
||||
"""
|
||||
import json
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
sys.path.insert(0, str(ROOT))
|
||||
|
||||
LAB_DIR = "lab07_comparison"
|
||||
|
||||
|
||||
def run_smoke():
|
||||
env = dict(os.environ)
|
||||
env["LAB_SMOKE"] = "1"
|
||||
env["PYTHONIOENCODING"] = "utf-8"
|
||||
proc = subprocess.run(
|
||||
[sys.executable, str(ROOT / LAB_DIR / "solution.py")],
|
||||
capture_output=True, text=True, env=env, timeout=120,
|
||||
cwd=str(ROOT))
|
||||
if proc.returncode != 0:
|
||||
raise AssertionError(
|
||||
f"solution.py упал:\n--- stdout ---\n{proc.stdout}\n--- stderr ---\n{proc.stderr}")
|
||||
for line in proc.stdout.splitlines():
|
||||
if line.startswith("LAB_SMOKE_JSON:"):
|
||||
return json.loads(line[len("LAB_SMOKE_JSON:"):])
|
||||
raise AssertionError(f"нет LAB_SMOKE_JSON. stdout:\n{proc.stdout}")
|
||||
|
||||
|
||||
def test_smoke_all_approaches_work():
|
||||
out = run_smoke()
|
||||
assert out.get("ok") is True
|
||||
assert out.get("cpu_ok") is True, (
|
||||
"CPU-подходы дают неверный checksum (потоки и/или процессы)")
|
||||
assert out.get("io_ok") is True, "I/O-подходы вернули неверный объём результатов"
|
||||
|
||||
|
||||
def test_smoke_io_times_present():
|
||||
out = run_smoke()
|
||||
times = out.get("io_times", {})
|
||||
assert all(k in times for k in ("seq", "threads", "async")), times
|
||||
assert all(t >= 0 for t in times.values())
|
||||
|
||||
|
||||
def test_uses_all_four_models():
|
||||
src = (ROOT / LAB_DIR / "solution.py").read_text(encoding="utf-8")
|
||||
assert "ThreadPoolExecutor" in src, "нужны потоки"
|
||||
assert "Pool" in src or "ProcessPoolExecutor" in src, "нужны процессы"
|
||||
assert "asyncio" in src and "gather" in src, "нужен asyncio"
|
||||
assert 'if __name__ == "__main__"' in src, "нужен __main__-guard"
|
||||
Reference in new issue
Block a user