Files
dibbler/tests/benchmark/test_benchmark_product_price.py
2026-01-09 04:25:00 +09:00

93 lines
2.5 KiB
Python

import pytest
from sqlalchemy.orm import Session
from dibbler.models import Product, TransactionType
from dibbler.queries import product_price, update_cache
from tests.benchmark.benchmark_settings import BENCHMARK_ITERATIONS, BENCHMARK_ROUNDS
from tests.benchmark.helpers import generate_random_transactions, insert_users_and_products
# @pytest.mark.benchmark(group="product_price")
# @pytest.mark.parametrize(
# "transaction_count",
# [
# 100,
# 500,
# 1000,
# 2000,
# 5000,
# 10000,
# ],
# )
# def test_benchmark_product_price(benchmark, sql_session: Session, transaction_count):
# _users, products = insert_users_and_products(sql_session)
# transactions = generate_random_transactions(
# sql_session,
# transaction_count,
# transaction_type_filter=[
# TransactionType.ADD_PRODUCT,
# TransactionType.ADJUST_STOCK,
# TransactionType.BUY_PRODUCT,
# TransactionType.JOINT,
# TransactionType.THROW_PRODUCT,
# ],
# )
# sql_session.add_all(transactions)
# sql_session.commit()
# benchmark.pedantic(
# query_all_products_price,
# args=(sql_session, products),
# iterations=BENCHMARK_ITERATIONS,
# rounds=BENCHMARK_ROUNDS,
# )
@pytest.mark.benchmark(group="product_price")
@pytest.mark.parametrize(
"transaction_count",
[
1000,
2000,
5000,
10000,
],
)
def test_benchmark_product_price_cache_every_500(
benchmark,
sql_session: Session,
transaction_count: int,
):
users, _products = insert_users_and_products(sql_session)
transactions = generate_random_transactions(
sql_session,
transaction_count,
transaction_type_filter=[
TransactionType.ADD_PRODUCT,
TransactionType.ADJUST_STOCK,
TransactionType.BUY_PRODUCT,
TransactionType.JOINT,
TransactionType.THROW_PRODUCT,
],
)
for i in range(0, len(transactions), 500):
update_cache(sql_session)
sql_session.add_all(transactions[i : i + 500])
sql_session.commit()
benchmark.pedantic(
query_all_products_price,
args=(sql_session, users),
iterations=BENCHMARK_ITERATIONS,
rounds=BENCHMARK_ROUNDS,
)
def query_all_products_price(sql_session: Session, products: list[Product]) -> None:
for product in products:
product_price(sql_session, product, use_cache=False)