Hoppa till huvudinnehåll

Slack Reporter Rapportör

wdio-slack-reporter är ett tredjepartspaket, för mer information se GitHub | npm

version downloads license webdriverio

Rapportör från WebdriverIO som använder Incoming webhook och Web API för att skicka resultat till Slack.

📢 Viktigt meddelande

Migrering till filesUploadV2 på grund av files.upload-utfasning

Slack notifikation skärmbild

Notification

WebdriverIO versionsstödpolicy

De WebdriverIO-versioner som stöds i detta projekt följer WebdriverIOs stödpolicy. WebdriverIOs stödpolicy kan kontrolleras här.

Installation

Det enklaste sättet är att behålla @moroo/wdio-slack-reporter som en devDependency i din package.json.

{
"devDependencies": {
"@moroo/wdio-slack-reporter": "^9.0.0"
}
}

Du kan enkelt göra det genom:

  • NPM
npm install @moroo/wdio-slack-reporter --save-dev
  • Yarn
yarn add -D @moroo/wdio-slack-reporter

Instruktioner om hur man installerar WebdriverIO finns här.

Konfiguration

För att använda rapportören behöver du lägga till slack i din reporters array i wdio.conf.js

// wdio.conf.js
import SlackReporter from '@moroo/wdio-slack-reporter';

export const config: WebdriverIO.Config = {
reporters: [
[
SlackReporter,
{
slackOptions: {
type: 'web-api',
channel: process.env.SLACK_CHANNEL || 'Cxxxxxxxxxx',
token: process.env.SLACK_BOT_TOKEN || 'xoxb-xxxxxxxxxx-xxxxxx...',
},
},
],
],
};

Konfigurationsalternativ

Följande konfigurationsalternativ stöds. För att notifikationer ska skickas måste du ställa in webhook eller web-api. Om både web-api och webhook är inställda används web-api.

Webhook (Incoming Webhook)

webhook (Obligatorisk)

Incoming Webhook för Slack-kanalen till vilken notifikationer ska skickas. Om URL:en inte är konfigurerad kommer inga notifikationer att skickas.

  • Omfattning: webhook
  • Typ: string

username (Valfri)

Värdet på username kommer att visas i slack-notifikationen som den användare som skickade den.

  • Omfattning: webhook
  • Typ: string
  • Standard: "WebdriverIO Reporter"

icon_url (Valfri)

URL:en för ikonen som ska visas i slack

  • Omfattning: webhook
  • Typ: string
  • Standard: "https://webdriver.io/img/webdriverio.png"

[!TIP] Förutom dessa kan alla alternativ som definieras i Slack Incoming Webhook-specifikationen också användas.

Web API (Slack Bot)

token (Obligatorisk)

Web API för Slack-kanalen till vilken notifikationer ska skickas. En bot-användartoken krävs. Bot-åtkomsttokens börjar alltid med xoxb. Bot-token kräver OAuth-omfattning av chat:write, files:write. Se nedan för mer detaljer.

  • Omfattning: web-api
  • Typ: string

channel (Obligatorisk)

Kanal, privat grupp eller IM-kanal att skicka meddelande till. Kan vara ett kodat ID eller ett namn. Se nedan för mer detaljer. "Hur man hittar kanal-ID" - stackoverflow -

  • Omfattning: web-api
  • Typ: string

[!TIP] Förutom dessa kan alla alternativ som definieras i Slack Web API-specifikationen också användas.

uploadScreenshotOfFailedCase (Valfri)

Ställ in detta alternativ till true för att bifoga en skärmbild till det misslyckade fallet.

  • Omfattning: web-api
  • Typ: boolean
  • Standard: true

notifyDetailResultThread (Valfri)

Detta alternativ fungerar endast när alternativet notifyTestFinishMessage är true.

Ställ in detta alternativ till true om du vill lägga till tråd med detaljer om resultat till notifikation av testresultat som skickas till Slack.

  • Omfattning: web-api
  • Typ: boolean
  • Standard: true

filterForDetailResults (Valfri)

Detta alternativ fungerar endast när alternativet notifyDetailResultThread är true.

Lägg till filtret du vill ha till det här alternativet i arrayen och de detaljerade resultaten kommer att filtreras ut i Slack och skickas till tråden. (Om det inte finns några filter (arrayen är tom eller odefinierad) tillämpas alla filter.) Filterlista: passed, failed, pending, skipped

  • Omfattning: web-api
  • Typ: array (passed | failed | pending | skipped)
  • Standard: ['passed', 'failed', 'pending', 'skipped']

createScreenshotPayload (Valfri)

Detta alternativ anpassar nyttolasten som laddas upp av skärmbilden för testmisslyckandet.

  • Omfattning: web-api
  • Typ: function

createResultDetailPayload (Valfri)

Detta alternativ anpassar nyttolasten som notifierar om de detaljerade resultaten av testet.

  • Omfattning: web-api
  • Typ: function

Gemensamt

title (Valfri)

Ställ in detta alternativ till testtiteln.

  • Omfattning: webhook, web-api
  • Typ: string

resultsUrl (Valfri)

Tillhandahåll en länk till testresultaten. Det är en klickbar länk i notifikationen.

  • Omfattning: webhook, web-api
  • Typ: string

notifyTestStartMessage (Valfri)

Ställ in detta alternativ till true för att skicka notifikationer vid teststart.

  • Omfattning: webhook, web-api
  • Typ: boolean
  • Standard: true

notifyFailedCase (Valfri)

Ställ in detta alternativ till true för att bifoga misslyckade fall i testresultaten som rapporteras till Slack.

  • Omfattning: webhook, web-api
  • Typ: boolean
  • Standard: true

notifyTestFinishMessage (Valfri)

Ställ in detta alternativ till true för att skicka notifikationer när testet är avslutat.

  • Omfattning: webhook, web-api
  • Typ: boolean
  • Standard: true

useScenarioBasedStateCounts (Valfri) - Endast Cucumber

Ställ in detta alternativ till true för att ändra tillståndsräkningen från test (steg) baserad till scenariobaserad. (Endast Cucumber)

  • Omfattning: webhook, web-api
  • Typ: boolean
  • Standard: false

emojiSymbols (Valfri)

Detta alternativ ändrar emoji-uppsättningen som är standard.

  • Omfattning: webhook, web-api
  • Typ: object
  • Standard:
    • passed - ✅ :white_check_mark:
    • failed - ❌ :x:
    • skipped - ⏸ :double_vertical_bar:
    • pending - ❔ :grey_question:
    • start - 🚀 :rocket:
    • finished - 🏁 :checkered_flag:
    • watch - ⏱ :stopwatch:

createStartPayload (Valfri)

Detta alternativ anpassar nyttolasten som notifieras vid testets start.

  • Omfattning: webhook, web-api
  • Typ: function

createFailedTestPayload (Valfri)

Detta alternativ anpassar nyttolasten som notifieras vid testets misslyckande.

  • Omfattning: webhook, web-api
  • Typ: function

createResultPayload (Valfri)

Detta alternativ anpassar nyttolasten som notifierar om testets resultat.

  • Omfattning: webhook, web-api
  • Typ: function

Använd Incoming Webhook

Om du använder webhook kan du inte ha trådar och uppladdningar.
Därför är funktioner relaterade till upload och thread inte tillgängliga.

Konfigurationsexempel

// wdio.conf.js
import SlackReporter from "@moroo/wdio-slack-reporter";

export.config = {
reporters: [
[
SlackReporter, {
// Ställ in Slack Options som används webhook.
slackOptions: {
type: 'webhook',
webhook: process.env.SLACK_WEBHOOK_URL || "https://hooks.slack.com/........",
username: "WebdriverIO Reporter",
"icon-url": "https://webdriver.io/img/webdriverio.png",
},
// Ställ in titeln för testet.
title: 'Slack Reporter Test',
// Ställ in URL för testresultaten.
resultsUrl: process.env.JENKINS_URL,
// Ställ in notifikation för testslut
notifyTestFinishMessage: true,
// Ställ in scenariobaserad tillståndsräkning (endast Cucumber)
useScenarioBasedStateCounts: true,
// Anpassa Slack Emoji-symboler.
emojiSymbols: {
passed: ':white_check_mark:',
failed: ':x:',
skipped: ':double_vertical_bar:',
pending: ':grey_question:',
start: ':rocket:',
finished: ':checkered_flag:',
watch: ':stopwatch:'
},
// Åsidosätt createStartPayload-funktionen.
createStartPayload: function (runnerStats: RunnerStats): IncomingWebhookSendArguments {
const payload: IncomingWebhookSendArguments = {
// gör något...
}
return payload;
},
// Åsidosätt createFailedTestPayload-funktionen.
createFailedTestPayload: function (testStats: TestStats): IncomingWebhookSendArguments {
const payload: IncomingWebhookSendArguments = {
// gör något...
}
return payload;
},
// Åsidosätt createResultPayload-funktionen.
createResultPayload: function (runnerStats: RunnerStats, stateCounts: StateCount): IncomingWebhookSendArguments {
const payload: IncomingWebhookSendArguments = {
// gör något...
}
return payload;
}
}
],
],
};

Använd Web API

För att använda API:et behöver du omfattningar som den nedan.
chat:write, files:write. Se nedan för mer detaljer.

Konfigurationsexempel

// wdio.conf.js
import SlackReporter from "@moroo/wdio-slack-reporter";

export.config = {
reporters: [
[
SlackReporter, {
// Ställ in Slack Options som används web-api.
slackOptions: {
type: 'web-api',
token: process.env.SLACK_BOT_TOKEN || "xoxb-xxxxxxxxxx-xxxxxx...",,
channel: process.env.SLACK_CHANNEL || "Cxxxxxxxxxx",
// Ställ in detta alternativ till true för att bifoga en skärmbild till det misslyckade fallet.
uploadScreenshotOfFailedCase: true,
// Ställ in detta alternativ till true om du vill lägga till tråd med detaljer om resultat till notifikation av testresultat som skickas till Slack.
notifyDetailResultThread: true,
// Ställ in Filter för detaljerade resultat. (array är tom eller odefinierad, alla filter tillämpas.)
filterForDetailResults: [
'passed',
'failed',
'pending',
'skipped'
],
// Åsidosätt createScreenshotPayload-funktionen.
createScreenshotPayload: function (testStats: TestStats, screenshotBuffer: string | Buffer<ArrayBufferLike>): FilesUploadArguments {
const payload: FilesUploadArguments = {
// gör något...
}
return payload;
},
// Åsidosätt createResultDetailPayload-funktionen.
createResultDetailPayload: function (runnerStats: RunnerStats, stateCounts: StateCount): ChatPostMessageArguments {
const payload: ChatPostMessageArguments = {
// gör något...
}
return payload;
}
},
// Ställ in titeln för testet.
title: 'Slack Reporter Test',
// Ställ in URL för testresultaten.
resultsUrl: process.env.JENKINS_URL,
// Ställ in notifikation för testslut
notifyTestFinishMessage: true,
// Ställ in scenariobaserad tillståndsräkning (endast Cucumber)
useScenarioBasedStateCounts: true,
// Anpassa Slack Emoji-symboler.
emojiSymbols: {
passed: ':white_check_mark:',
failed: ':x:',
skipped: ':double_vertical_bar:',
pending: ':grey_question:',
start: ':rocket:',
finished: ':checkered_flag:',
watch: ':stopwatch:'
},
// Åsidosätt createStartPayload-funktionen.
createStartPayload: function (runnerStats: RunnerStats): IncomingWebhookSendArguments {
const payload: IncomingWebhookSendArguments = {
// gör något...
}
return payload;
},
// Åsidosätt createFailedTestPayload-funktionen.
createFailedTestPayload: function (testStats: TestStats): IncomingWebhookSendArguments {
const payload: IncomingWebhookSendArguments = {
// gör något...
}
return payload;
},
// Åsidosätt createResultPayload-funktionen.
createResultPayload: function (runnerStats: RunnerStats, stateCounts: StateCount): IncomingWebhookSendArguments {
const payload: IncomingWebhookSendArguments = {
// gör något...
}
return payload;
}
}
],
],
};

Stödda API

getResultsUrl

typ: () => string | undefined

Hämta resultat-URL:en.

// getResultsUrl.spec.ts
import SlackReporter from '@moroo/wdio-slack-reporter';

describe('Hämta resultsUrl-värdet', function () {
before(function () {
const resultsUrl = SlackReporter.getResultsUrl();
if (resultsUrl) {
// gör något...
}
});
it('Gör något', function () {
// gör något...
});
});

setResultsUrl

typ: (url: string) => void

Ställ in resultat-URL:en.
(Detta är användbart om URL:en med testresultat ändras varje gång.)

// setResultsUrl.spec.ts
import SlackReporter from '@moroo/wdio-slack-reporter';
import { RESULTS_URL } from '../constants';

describe('Ställ in resultsUrl-värdet', function () {
before(function () {
const resultsUrl = RESULTS_URL + new Date().toISOString();
SlackReporter.setResultsUrl(resultsUrl);
});
it('Gör något', function () {
// gör något...
});
});

uploadFailedTestScreenshot

typ: (data: string | Buffer<ArrayBufferLike>) => void

Lägg till en skärmbild som en tråd till notifikationen om misslyckat test.
(Om du använder en webhook kommer detta att skriva ut en varning och göra ingenting.)

// terminal console
WARN @moroo/slack-wdio-reporter: Not using web-api or disabled notifyFailedCase or uploadScreenshotOfFailedCase options.
// wdio.conf.js
export.config = {
afterTest: async function (test, context, result) {
if (error) {
const result = await browser.takeScreenshot();
SlackReporter.uploadFailedTestScreenshot(result);
}
}
}

postMessage

typ: (payload: ChatPostMessageArguments) => Promise<WebAPICallResult>

Posta ett meddelande till Slack.
(Om du använder en webhook kommer detta att kasta ett fel.)

// terminal console
ERROR @moroo/slack-wdio-reporter: Not using web-api.
// post.spec.ts
import SlackReporter, {
ChatPostMessageArguments,
WebAPICallResult,
} from '@moroo/wdio-slack-reporter';

describe('Post funktionstest', function () {
it('Posta ett meddelande', async function () {
const payload: ChatPostMessageArguments = {
// gör något...
};
const result: WebAPICallResult = await SlackReporter.post(payload);
});
});

upload

typ: ({ payload: FilesUploadArguments; options: FilesUploadV2Options }) => Promise<WebAPICallResult & {files: FilesCompleteUploadExternalResponse[];}>

Ladda upp en fil till Slack.
(Om du använder en webhook kommer detta att kasta ett fel.)

// terminal console
ERROR @moroo/slack-wdio-reporter: Not using web-api.
// upload.spec.ts
import SlackReporter, {
FilesUploadArguments,
WebAPICallResult,
} from '@moroo/wdio-slack-reporter';

describe('Upload-funktionstest', function () {
it('Ladda upp filer', async function () {
const payload: FilesUploadArguments = {
// gör något...
};
const options: FilesUploadV2Options = {
waitForUpload: true,
retry: 3,
interval: 1000,
};
const result: WebAPICallResult = await SlackReporter.upload({
payload,
options,
});
});
});

send

typ: (payload: IncomingWebhookSendArguments) => Promise<IncomingWebhookResult>

Skicka ett meddelande till Slack.
(Om du använder en web-api kommer detta att kasta ett fel.)

// terminal console
ERROR @moroo/slack-wdio-reporter: Not using webhook.
// send.spec.ts
import SlackReporter, {
IncomingWebhookSendArguments,
IncomingWebhookResult,
} from '@moroo/wdio-slack-reporter';

describe('Send-funktionstest', function () {
it('Skicka ett meddelande', async function () {
const payload: IncomingWebhookSendArguments = {
// gör något...
};
const result: IncomingWebhookResult = await SlackReporter.send(payload);
});
});

Lägg till skärmbild

Om du vill lägga till en skärmbild som en tråd till notifikationen om misslyckat test, använd funktionen uploadFailedTestScreenshot efter att ha tagit skärmbilden.

// wdio.conf.js
export.config = {
afterTest: async function (test, context, result) {
if (error) {
const result = await browser.takeScreenshot();
SlackReporter.uploadFailedTestScreenshot(result);
}
}
}

Kända problem

Osynkroniserad

Om följande fel uppstår, ställ in reporterSyncInterval, reporterSyncTimeout i wdio.conf.js.

ERROR @wdio/runner: Error: Some reporters are still unsynced: SlackReporter
//wdio.conf.js
export.config = {
//
// Bestämmer i vilket intervall rapportören ska kontrollera om de är synkroniserade om de rapporterar sina loggar asynkront (t.ex. om loggar strömmas till en tredjepartsleverantör).
reporterSyncInterval: 500,
// Bestämmer den maximala tid rapportörer har att avsluta uppladdningen av alla sina loggar tills ett fel kastas av testkörararen.
reporterSyncTimeout: 20000,
}

Jasmine-alternativ - expectationResultHandler

Att lägga till funktionen uploadFailedTestScreenshot här fungerar inte heller.
Detta beror på att funktionen fungerar efter varje test, så det aktuella testet är okänt.

// wdio.conf.js
export.config = {
jasmineOpts: {
// Jasmine default timeout
defaultTimeoutInterval: 60000,
//
// Jasmine-ramverket tillåter avlyssning av varje påstående för att logga tillståndet för applikationen
// eller webbplatsen beroende på resultatet. Till exempel är det ganska användbart att ta en skärmbild varje gång
// ett påstående misslyckas.
expectationResultHandler: function (passed, assertion) {
if (passed) {
return;
}
/*
Att lägga till funktionen uploadFailedTestScreenshot här fungerar inte heller.
Detta beror på att funktionen fungerar efter varje test, så det aktuella testet är okänt.

[x] const result = await browser.takeScreenshot();
[x] SlackReporter.uploadFailedTestScreenshot(result);
*/
},
},

// Lägg till det här istället.
afterTest: async function (test, context, result) {
if (result.error) {
const result = await browser.takeScreenshot();
SlackReporter.uploadFailedTestScreenshot(result);
}
}
}

Welcome! How can I help?

WebdriverIO AI Copilot