Skip to content

wix-incubator/allure-store

Repository files navigation

Allure Store logo

allure-store

A flexible and extensible store for reading, writing, and transforming Allure test results 1.

npm version License: MIT CI Status

Introduction

allure-store provides a standardized interface (the AllureStore) to:

  • Read existing Allure test results from a variety of sources (e.g., local filesystem, remote storage).
  • Write new Allure data (results, categories, environment info, etc.) for downstream consumers or tools.
  • Transform, aggregate, or customize Allure test data before generating a final Allure report.

By abstracting the data access behind AllureReader and AllureWriter interfaces, allure-store makes it simple to plug in custom storage backends, apply custom transformations, or integrate seamlessly into your CI/CD pipeline.

🌟 Key Features

  • Unified API: Interact with Allure test results, containers, categories, environment, and executor info using a single, simple API (AllureStore).
  • Filesystem Integration: Use built-in utilities to read from/write to a traditional allure-results directory.
  • Custom Integration Points: Implement AllureReader and AllureWriter interfaces to read from or write to any storage backend—databases, cloud storage, etc.
  • Result Aggregation: Merge parent test containers and child results to produce enriched test data for Allure-compatible tools.
  • Flexible Composition: Combine multiple data sources or transform results before finalizing your Allure report.

🚀 Installation

Install with your preferred package manager:

npm install allure-store
# or
yarn add allure-store

📖 Quick Start

Reading Results from a Directory

If you have an existing allure-results directory (produced by Allure or a tool that supports it):

import { fromDirectory } from 'allure-store';

(async () => {
  const store = await fromDirectory('allure-results');

  const allResults = await store.getAllResults();
  console.log('All test results:', allResults);

  const latestResults = await store.getLatestResults();
  console.log('Latest results per historyId:', latestResults);

  const categories = await store.getCategories();
  console.log('Categories:', categories);
})();

Writing Data Back

You can also write categories, environment info, or even individual test results:

import { fromDirectory } from 'allure-store';

(async () => {
  const store = await fromDirectory('allure-results', { overwrite: true });

  await store.writeEnvironmentInfo({
    NODE_ENV: 'production',
    SERVICE_URL: 'https://api.example.com',
  });

  await store.writeCategories([
    { name: 'Product defects', matchedStatuses: ['failed'] },
    { name: 'Test defects', matchedStatuses: ['broken'] },
  ]);
})();

Using Custom Readers/Writers

If your results are stored in a different system, implement the AllureReader and AllureWriter interfaces and provide them to fromConfig:

import { fromConfig, AllureReader, AllureWriter } from 'allure-store';

const customReader: AllureReader = {
  async getContainerIds() { /* ... */ },
  async getResultIds() { /* ... */ },
  async readContainer(id: string) { /* ... */ },
  async readResult(id: string) { /* ... */ },
  async readCategories() { /* ... */ },
  async readEnvironmentInfo() { /* ... */ },
  async readExecutorInfo() { /* ... */ },
};

const customWriter: AllureWriter = {
  async writeCategories(categories) { /* ... */ },
  async writeEnvironmentInfo(env) { /* ... */ },
  async writeExecutorInfo(info) { /* ... */ },
  async writeContainer(container) { /* ... */ },
  async writeResult(result) { /* ... */ },
};

(async () => {
  const store = await fromConfig({ reader: customReader, writer: customWriter });
  const results = await store.getAllResults();
  console.log('Custom source results:', results);
})();

When to Use allure-store

  • Custom CI Integrations: Integrate Allure data from multiple pipelines or artifact stores, then produce a final Allure report.
  • Data Transformation: Filter, enrich, or modify Allure results before final reporting.
  • Non-File Storage: If your Allure data isn’t file-based, allure-store provides an abstraction to still leverage Allure’s ecosystem.

Additional Documentation

🌐 Contributing

Contributions are welcome! Please see CONTRIBUTING.md for details on how to get started.

📃 License

This project is licensed under the MIT License.

Footnotes

  1. Note: allure-store is not affiliated with the official Allure framework. It aims to provide a compatible and convenient way to handle Allure data.

About

Reading, writing, and querying Allure test results

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

No packages published