Skip to content

Commit 54e9550

Browse files
committed
refactor(metrics): make test more explicit
1 parent 48085d5 commit 54e9550

File tree

3 files changed

+61
-18
lines changed

3 files changed

+61
-18
lines changed
Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
from aws_lambda_powertools import Metrics
2-
from aws_lambda_powertools.metrics import MetricUnit
32

4-
metrics = Metrics()
3+
my_metrics = Metrics()
54

65

7-
@metrics.log_metrics
6+
@my_metrics.log_metrics
87
def lambda_handler(event, context):
9-
metric = event.get("metric_name")
10-
metrics.namespace = "powertools-e2e-metric"
11-
metrics.service = event.get("service")
8+
metrics, namespace, service = event.get("metrics"), event.get("namespace"), event.get("service")
9+
10+
# Maintenance: create a public method to set these explicitly
11+
my_metrics.namespace = namespace
12+
my_metrics.service = service
13+
14+
for metric in metrics:
15+
my_metrics.add_metric(**metric)
1216

13-
metrics.add_metric(name=metric, unit=MetricUnit.Count, value=1)
1417
return "success"

tests/e2e/metrics/test_metrics.py

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,11 @@ def test_basic_lambda_metric_is_visible(basic_handler_fn):
2323
# GIVEN
2424
metric_name = helpers.build_metric_name()
2525
service = helpers.build_service_name()
26-
event = json.dumps({"metric_name": metric_name, "service": service, "namespace": METRIC_NAMESPACE})
26+
metrics = helpers.build_multiple_add_metric_input(metric_name=metric_name, value=1, quantity=3)
2727

2828
# WHEN
29-
ret, execution_time = helpers.trigger_lambda(lambda_arn=basic_handler_fn, payload=event)
29+
event = json.dumps({"metrics": metrics, "service": service, "namespace": METRIC_NAMESPACE})
30+
_, execution_time = helpers.trigger_lambda(lambda_arn=basic_handler_fn, payload=event)
3031

3132
metrics = helpers.get_metrics(
3233
start_date=execution_time,
@@ -37,18 +38,11 @@ def test_basic_lambda_metric_is_visible(basic_handler_fn):
3738
)
3839

3940
# THEN
40-
assert len(metrics.get("Timestamps", [])) == 1
4141
metric_data = metrics.get("Values", [])
42-
assert metric_data and metric_data[0] == 1
43-
44-
# for later... we could break the test early if the function failed
45-
# we could extend `trigger_lambda` with a default param to check on that
46-
# making the test less verbose. For explicit invoke failure, we could override
47-
assert ret is not None
42+
assert metric_data and metric_data[0] == 3.0
4843

4944

5045
# helpers: adjust retries and wait to be much smaller
5146
# helpers: make retry config adjustable
5247
# Infra: Add temporary Powertools Layer
53-
# Powertools: should have a method to set namespace at runtime
5448
# Create separate Infra class so they can live side by side

tests/e2e/utils/helpers.py

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,10 @@
1313
from pydantic import BaseModel
1414
from retry import retry
1515

16-
1716
# Helper methods && Class
17+
from aws_lambda_powertools.metrics import MetricUnit
18+
19+
1820
class Log(BaseModel):
1921
level: str
2022
location: str
@@ -174,3 +176,47 @@ def build_metric_query_data(
174176
"ReturnData": True,
175177
}
176178
]
179+
180+
181+
def build_add_metric_input(metric_name: str, value: float, unit: str = MetricUnit.Count.value) -> Dict:
182+
"""Create a metric input to be used with Metrics.add_metric()
183+
184+
Parameters
185+
----------
186+
metric_name : str
187+
metric name
188+
value : float
189+
metric value
190+
unit : str, optional
191+
metric unit, by default Count
192+
193+
Returns
194+
-------
195+
Dict
196+
Metric input
197+
"""
198+
return {"name": metric_name, "unit": unit, "value": value}
199+
200+
201+
def build_multiple_add_metric_input(
202+
metric_name: str, value: float, unit: str = MetricUnit.Count.value, quantity: int = 1
203+
) -> Dict:
204+
"""Create list of metrics input to be used with Metrics.add_metric()
205+
206+
Parameters
207+
----------
208+
metric_name : str
209+
metric name
210+
value : float
211+
metric value
212+
unit : str, optional
213+
metric unit, by default Count
214+
quantity : int, optional
215+
number of metrics to be created, by default 1
216+
217+
Returns
218+
-------
219+
List[Dict]
220+
List of metrics
221+
"""
222+
return [{"name": metric_name, "unit": unit, "value": value} for _ in range(quantity)]

0 commit comments

Comments
 (0)