Init
This commit is contained in:
commit
c394677d07
59 files changed
+5149
No files matched your search
@@ -0,0 +1,54 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""Автотесты лабораторной 6 (asyncio)."""
|
||||
import asyncio
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from conftest import load_solution, source_of # noqa: E402
|
||||
|
||||
LAB = "lab06_asyncio"
|
||||
|
||||
|
||||
def test_variant_number_set():
|
||||
mod = load_solution(LAB)
|
||||
assert 1 <= getattr(mod, "VARIANT_NUMBER", 0) <= 20, (
|
||||
"Укажите свой VARIANT_NUMBER (1..20) в solution.py")
|
||||
|
||||
|
||||
def test_fetch_all_async_correct_and_concurrent():
|
||||
mod = load_solution(LAB)
|
||||
results, seconds = asyncio.run(mod.fetch_all_async(8, 0.1))
|
||||
assert results == [(i, i * i) for i in range(8)], (
|
||||
"результаты должны быть (item, item*item) и упорядочены по item")
|
||||
assert seconds < 0.5, (
|
||||
f"8 запросов по 0.1 c заняли {seconds:.2f} c — конкурентности нет; "
|
||||
"проверьте, что используется asyncio.sleep и await")
|
||||
|
||||
|
||||
def test_fetch_all_limited_respects_limit():
|
||||
mod = load_solution(LAB)
|
||||
results, seconds = asyncio.run(mod.fetch_all_limited(10, 0.1, 2))
|
||||
assert results == [(i, i * i) for i in range(10)]
|
||||
assert seconds >= 0.45, (
|
||||
f"10 запросов по 0.1 c при лимите 2 заняли {seconds:.2f} c "
|
||||
"— лимит не соблюдается (должно быть ~0.5 c)")
|
||||
# и без лимита было бы ~0.1 c
|
||||
_, t_all = asyncio.run(mod.fetch_all_limited(10, 0.1, 10))
|
||||
assert t_all < seconds * 0.5, "при большем лимите время должно заметно упасть"
|
||||
|
||||
|
||||
def test_blocking_mistake_is_sequential():
|
||||
"""time.sleep в корутине должен дать время ≈ items*delay."""
|
||||
mod = load_solution(LAB)
|
||||
seconds = mod.measure_blocking_mistake(5, 0.1)
|
||||
assert seconds >= 0.45, (
|
||||
f"заняло {seconds:.2f} c вместо ~0.5 c — time.sleep внезапно "
|
||||
"конкурентен? Проверьте, что в _fetch_blocking именно time.sleep")
|
||||
|
||||
|
||||
def test_uses_async_syntax():
|
||||
src = source_of(LAB)
|
||||
assert "async def" in src, "нужны корутины (async def)"
|
||||
assert "asyncio.gather" in src, "нужен asyncio.gather"
|
||||
Reference in new issue
Block a user