Skip to content

Commit ccdaf0e

Browse files
adding ExecutionTime context manager for benchmarking load tests
1 parent b1995de commit ccdaf0e

File tree

2 files changed

+31
-18
lines changed

2 files changed

+31
-18
lines changed

load_tests/_utils.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import random
22
from datetime import datetime
3+
from timeit import default_timer as timer
34
from typing import Iterator
45

56
import boto3
@@ -11,6 +12,20 @@
1112
CFN_VALID_STATUS = ["CREATE_COMPLETE", "ROLLBACK_COMPLETE", "UPDATE_COMPLETE", "UPDATE_ROLLBACK_COMPLETE"]
1213

1314

15+
class ExecutionTimer:
16+
def __init__(self, msg="elapsed time"):
17+
self.msg = msg
18+
19+
def __enter__(self):
20+
self.before = timer()
21+
return self
22+
23+
def __exit__(self, type, value, traceback):
24+
self.elapsed_time = round((timer() - self.before), 3)
25+
print(f"{self.msg}: {self.elapsed_time:.3f} sec")
26+
return None
27+
28+
1429
def extract_cloudformation_outputs():
1530
outputs = {}
1631
client = boto3.client("cloudformation")

load_tests/test_s3.py

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,39 @@
1-
import time
2-
31
import pandas as pd
42
import pytest
53

64
import awswrangler as wr
75

6+
from ._utils import ExecutionTimer
7+
88

99
@pytest.mark.repeat(1)
1010
@pytest.mark.parametrize("benchmark_time", [150])
1111
def test_s3_select(benchmark_time):
12-
start = time.time()
1312

1413
path = "s3://ursa-labs-taxi-data/2018/1*.parquet"
15-
wr.s3.select_query(
16-
sql="SELECT * FROM s3object",
17-
path=path,
18-
input_serialization="Parquet",
19-
input_serialization_params={},
20-
scan_range_chunk_size=16 * 1024 * 1024,
21-
)
22-
end = time.time()
14+
with ExecutionTimer("elapsed time of wr.s3.select_query()") as timer:
15+
wr.s3.select_query(
16+
sql="SELECT * FROM s3object",
17+
path=path,
18+
input_serialization="Parquet",
19+
input_serialization_params={},
20+
scan_range_chunk_size=16 * 1024 * 1024,
21+
)
2322

24-
elapsed_time = end - start
25-
assert elapsed_time < benchmark_time
23+
assert timer.elapsed_time < benchmark_time
2624

2725

28-
def test_s3_delete_objects(path, path2):
26+
@pytest.mark.parametrize("benchmark_time", [15])
27+
def test_s3_delete_objects(path, path2, benchmark_time):
2928
df = pd.DataFrame({"id": [1, 2, 3]})
3029
objects_per_bucket = 505
3130
paths1 = [f"{path}delete-test{i}.json" for i in range(objects_per_bucket)]
3231
paths2 = [f"{path2}delete-test{i}.json" for i in range(objects_per_bucket)]
3332
paths = paths1 + paths2
3433
for path in paths:
3534
wr.s3.to_json(df, path)
36-
start = time.time()
37-
wr.s3.delete_objects(path=paths)
38-
end = time.time()
39-
print(f"elapsed time: {end - start}")
35+
with ExecutionTimer("elapsed time of wr.s3.delete_objects()") as timer:
36+
wr.s3.delete_objects(path=paths)
37+
assert timer.elapsed_time < benchmark_time
4038
assert len(wr.s3.list_objects(f"{path}delete-test*")) == 0
4139
assert len(wr.s3.list_objects(f"{path2}delete-test*")) == 0

0 commit comments

Comments
 (0)