The time the estimates of the executed cases add up to
const url = 'https://beta-api.plune.ai/v1/analytics/saved-time?by=run&format=json';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url 'https://beta-api.plune.ai/v1/analytics/saved-time?by=run&format=json' \ --header 'Authorization: Bearer <token>'The saved time report (#1882, BH-D2). The executed results of the period: the current result of a case in a run, status passed, failed or broken; blocked, skipped and one a retest replaced are not counted. Each is weighed with the estimate the case has now, not one frozen at the run. estimatedSeconds: their sum. savedSeconds: those executed by a machine (a reporter’s result, no executedBy) that passed. manualSeconds: those a person marked. notEstimated: executed cases nobody estimated, counted here and never as 0 seconds in a sum. by=run (default) gives a row per run, newest first; by=suite a row per suite of the case, the longest estimate first (name: null is cases in no suite). Up to 200 rows, truncated when there are more; totals always cover everything. The period, the projects and the filters are those of GET /v1/analytics; 120 requests a minute per caller.
Authorizations
Section titled “Authorizations ”Parameters
Section titled “ Parameters ”Query Parameters
Section titled “Query Parameters ”How the rows are grouped.
xlsx answers the same report as a workbook (#1909): a sheet Saved time, a row per run or suite and a Total row, durations in minutes as numbers, up to 10 000 rows, a note row when cut. Any other value is a 400.
The start of the period, inclusive — ISO 8601 with a time zone; the started_at of the runs.
The end of the period, inclusive, as from.
Project ids, comma-separated — as on GET /v1/analytics.
Run labels. Repeat for any-of.
Case tags, verbatim and without @. Repeat for any-of.
Run environments. Repeat for any-of.
People, by userId — comma-separated or repeated.
A suite, or a folder with everything beneath it — only with exactly one project in the request.
Responses
Section titled “ Responses ”The totals and the rows; with format=xlsx the workbook
object
object
Executed results counted: passed, failed or broken, the current one of each case in its run.
The sum of the estimates of those cases, in seconds.
The part executed by a machine that passed.
The part a person marked, whatever it came to.
Executed cases with no estimate; left out of the sums, never counted as 0.
object
Executed results counted: passed, failed or broken, the current one of each case in its run.
The sum of the estimates of those cases, in seconds.
The part executed by a machine that passed.
The part a person marked, whatever it came to.
Executed cases with no estimate; left out of the sums, never counted as 0.
Example
{ "by": "run"}by that is not run or suite, or a filter GET /v1/analytics would refuse
object
Example generated
{ "error": "example"}No / invalid token or session
A project you are not a member of or one in the bin — the same answer as an id nobody has
object
Example
{ "error": "not found"}Rate-limited: the per-route throttle, or the per-minute request limit of the plan an API token counts by (#1442; the body names the plan, #2092). Retry-After carries the seconds until the window rolls over.
object
Example generated
{ "error": "example"}Headers
Section titled “Headers ”Seconds until the window rolls over