Skip to content

Commit 50f1074

Browse files
authored
Add query settings in benchmarks (#10295)
1 parent 1ff318c commit 50f1074

File tree

2 files changed

+28
-4
lines changed

2 files changed

+28
-4
lines changed

ydb/tests/olap/load/conftest.py

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,28 @@
1+
from __future__ import annotations
12
import pytest
23
import allure
34
import json
45
from ydb.tests.olap.lib.ydb_cli import YdbCliHelper, WorkloadType
56
from ydb.tests.olap.lib.allure_utils import allure_test_description
67
from ydb.tests.olap.lib.results_processor import ResultsProcessor
78
from time import time
9+
from typing import Optional
810
from allure_commons._core import plugin_manager
911
from allure_pytest.listener import AllureListener
1012

1113

1214
class LoadSuiteBase:
15+
class QuerySettings:
16+
def __init__(self, iterations: Optional[int] = None, timeout: Optional[float] = None) -> None:
17+
self.iterations = iterations
18+
self.timeout = timeout
19+
1320
iterations: int = 5
1421
workload_type: WorkloadType = None
1522
timeout: float = 1800.
1623
refference: str = ''
17-
check_canonical = False
24+
check_canonical: bool = False
25+
query_settings: dict[int, LoadSuiteBase.QuerySettings]
1826

1927
@property
2028
def suite(self) -> str:
@@ -23,6 +31,16 @@ def suite(self) -> str:
2331
return result[4:]
2432
return result
2533

34+
@classmethod
35+
def _get_iterations(cls, query_num: int) -> int:
36+
q = cls.query_settings.get(query_num, None)
37+
return q.iterations if q is not None and q.iterations is not None else cls.iterations
38+
39+
@classmethod
40+
def _get_timeout(cls, query_num: int) -> float:
41+
q = cls.query_settings.get(query_num, None)
42+
return q.timeout if q is not None and q.timeout is not None else cls.timeout
43+
2644
@classmethod
2745
def _test_name(cls, query_num: int) -> str:
2846
return f'Query{query_num:02d}'
@@ -58,7 +76,7 @@ def _attach_plans(plan: YdbCliHelper.QueryPlan) -> None:
5876
_attach_plans(result.explain_plan)
5977

6078
if result.plans is not None:
61-
for i in range(iterations):
79+
for i in range(self._get_iterations(query_num)):
6280
try:
6381
with allure.step(f'Iteration {i}'):
6482
_attach_plans(result.plans[i])
@@ -123,9 +141,9 @@ def run_workload_test(self, path: str, query_num: int) -> None:
123141
result = YdbCliHelper.workload_run(
124142
path=path,
125143
query_num=query_num,
126-
iterations=self.iterations,
144+
iterations=self._get_iterations(query_num),
127145
workload_type=self.workload_type,
128-
timeout=self.timeout,
146+
timeout=self._get_timeout(query_num),
129147
check_canonical=self.check_canonical
130148
)
131149
allure_test_description(self.suite, self._test_name(query_num), refference_set=self.refference, start_time=start_time, end_time=time())

ydb/tests/olap/load/test_tpcds.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,15 @@ class TestTpcds10(TpcdsSuiteBase):
2929

3030
class TestTpcds100(TpcdsSuiteBase):
3131
size: int = 100
32+
iterations: int = 2
3233
timeout = max(TpcdsSuiteBase.timeout, 3600.)
34+
query_settings = {
35+
14: LoadSuiteBase.QuerySettings(timeout=max(TpcdsSuiteBase.timeout, 7200.)),
36+
72: LoadSuiteBase.QuerySettings(timeout=max(TpcdsSuiteBase.timeout, 7200.)),
37+
}
3338

3439

3540
class TestTpcds1000(TpcdsSuiteBase):
3641
size: int = 1000
42+
iterations: int = 2
3743
timeout = max(TpcdsSuiteBase.timeout, 3*3600.)

0 commit comments

Comments
 (0)