Skip to content

Commit

Permalink
Playwright: get console logs without trace (#28972)
Browse files Browse the repository at this point in the history
* Playwright: get console logs without trace

Signed-off-by: Michael Telatynski <[email protected]>

* Add page url to log

Signed-off-by: Michael Telatynski <[email protected]>

* Skip empty logs

Signed-off-by: Michael Telatynski <[email protected]>

* Iterate

Signed-off-by: Michael Telatynski <[email protected]>

* Reset page counter

Signed-off-by: Michael Telatynski <[email protected]>

---------

Signed-off-by: Michael Telatynski <[email protected]>
  • Loading branch information
t3chguy authored Jan 13, 2025
1 parent e14a3b6 commit 11a8723
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 48 deletions.
63 changes: 63 additions & 0 deletions playwright/logger.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
/*
Copyright 2024 New Vector Ltd.
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial
Please see LICENSE files in the repository root for full details.
*/

import { BrowserContext, Page, TestInfo } from "@playwright/test";
import { Readable } from "stream";
import stripAnsi from "strip-ansi";

export class Logger {
private pages: Page[] = [];
private logs: Record<string, string> = {};

public getConsumer(container: string) {
this.logs[container] = "";
return (stream: Readable) => {
stream.on("data", (chunk) => {
this.logs[container] += chunk.toString();
});
stream.on("err", (chunk) => {
this.logs[container] += "ERR " + chunk.toString();
});
};
}

public async onTestStarted(context: BrowserContext) {
this.pages = [];
for (const id in this.logs) {
if (id.startsWith("page-")) {
delete this.logs[id];
} else {
this.logs[id] = "";
}
}

context.on("console", (msg) => {
const page = msg.page();
let pageIdx = this.pages.indexOf(page);
if (pageIdx === -1) {
this.pages.push(page);
pageIdx = this.pages.length - 1;
this.logs[`page-${pageIdx}`] = `Console logs for page with URL: ${page.url()}\n\n`;
}
const type = msg.type();
const text = msg.text();
this.logs[`page-${pageIdx}`] += `${type}: ${text}\n`;
});
}

public async onTestFinished(testInfo: TestInfo) {
if (testInfo.status !== "passed") {
for (const id in this.logs) {
if (!this.logs[id]) continue;
await testInfo.attach(id, {
body: stripAnsi(this.logs[id]),
contentType: "text/plain",
});
}
}
}
}
10 changes: 5 additions & 5 deletions playwright/services.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import { Network, StartedNetwork } from "testcontainers";
import { PostgreSqlContainer, StartedPostgreSqlContainer } from "@testcontainers/postgresql";

import { SynapseConfigOptions, SynapseContainer } from "./testcontainers/synapse.ts";
import { ContainerLogger } from "./testcontainers/utils.ts";
import { Logger } from "./logger.ts";
import { StartedMatrixAuthenticationServiceContainer } from "./testcontainers/mas.ts";
import { HomeserverContainer, StartedHomeserverContainer } from "./testcontainers/HomeserverContainer.ts";
import { MailhogContainer, StartedMailhogContainer } from "./testcontainers/mailhog.ts";
Expand All @@ -21,7 +21,7 @@ interface TestFixtures {
}

export interface Services {
logger: ContainerLogger;
logger: Logger;

network: StartedNetwork;
postgres: StartedPostgreSqlContainer;
Expand All @@ -37,7 +37,7 @@ export const test = base.extend<TestFixtures, Services>({
logger: [
// eslint-disable-next-line no-empty-pattern
async ({}, use) => {
const logger = new ContainerLogger();
const logger = new Logger();
await use(logger);
},
{ scope: "worker" },
Expand Down Expand Up @@ -132,8 +132,8 @@ export const test = base.extend<TestFixtures, Services>({

context: async ({ logger, context, request, homeserver }, use, testInfo) => {
homeserver.setRequest(request);
await logger.testStarted(testInfo);
await logger.onTestStarted(context);
await use(context);
await logger.testFinished(testInfo);
await logger.onTestFinished(testInfo);
},
});
43 changes: 0 additions & 43 deletions playwright/testcontainers/utils.ts

This file was deleted.

0 comments on commit 11a8723

Please sign in to comment.