@@ -116,36 +116,52 @@ def record_props(request, record_property):
116
116
117
117
def pytest_runtest_logreport (report ):
118
118
"""Send general test metrics to CloudWatch"""
119
- if report .when == "call" :
120
- METRICS .set_dimensions (
121
- {
122
- "test" : report .nodeid ,
123
- "instance" : global_props .instance ,
124
- "cpu_model" : global_props .cpu_model ,
125
- "host_kernel" : "linux-" + global_props .host_linux_version ,
126
- },
127
- # per host kernel
128
- {"host_kernel" : "linux-" + global_props .host_linux_version },
129
- # per CPU
130
- {"cpu_model" : global_props .cpu_model },
131
- # and global
132
- {},
133
- )
134
- METRICS .set_property ("result" , report .outcome )
135
- METRICS .set_property ("location" , report .location )
136
- for prop_name , prop_val in report .user_properties :
137
- METRICS .set_property (prop_name , prop_val )
138
- METRICS .put_metric (
139
- "duration" ,
140
- report .duration ,
141
- unit = "Seconds" ,
142
- )
143
- METRICS .put_metric (
144
- "failed" ,
145
- 1 if report .outcome == "failed" else 0 ,
146
- unit = "Count" ,
147
- )
148
- METRICS .flush ()
119
+
120
+ # The pytest's test protocol has three phases for each test item: setup,
121
+ # call and teardown. At the end of each phase, pytest_runtest_logreport()
122
+ # is called.
123
+ # https://github.com/pytest-dev/pytest/blob/d489247505a953885a156e61d4473497cbc167ea/src/_pytest/hookspec.py#L643
124
+ # https://github.com/pytest-dev/pytest/blob/d489247505a953885a156e61d4473497cbc167ea/src/_pytest/hookspec.py#L800
125
+ METRICS .set_dimensions (
126
+ # fine-grained
127
+ {
128
+ "test" : report .nodeid ,
129
+ "instance" : global_props .instance ,
130
+ "cpu_model" : global_props .cpu_model ,
131
+ "host_kernel" : "linux-" + global_props .host_linux_version ,
132
+ "phase" : report .when ,
133
+ },
134
+ # per test
135
+ {
136
+ "test" : report .nodeid ,
137
+ "instance" : global_props .instance ,
138
+ "cpu_model" : global_props .cpu_model ,
139
+ "host_kernel" : "linux-" + global_props .host_linux_version ,
140
+ },
141
+ # per phase
142
+ {"phase" : report .when },
143
+ # per host kernel
144
+ {"host_kernel" : "linux-" + global_props .host_linux_version },
145
+ # per CPU
146
+ {"cpu_model" : global_props .cpu_model },
147
+ # and global
148
+ {},
149
+ )
150
+ METRICS .set_property ("result" , report .outcome )
151
+ METRICS .set_property ("location" , report .location )
152
+ for prop_name , prop_val in report .user_properties :
153
+ METRICS .set_property (prop_name , prop_val )
154
+ METRICS .put_metric (
155
+ "duration" ,
156
+ report .duration ,
157
+ unit = "Seconds" ,
158
+ )
159
+ METRICS .put_metric (
160
+ "failed" ,
161
+ 1 if report .outcome == "failed" else 0 ,
162
+ unit = "Count" ,
163
+ )
164
+ METRICS .flush ()
149
165
150
166
151
167
@pytest .fixture ()
0 commit comments