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.
- 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
andAllureWriter
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.
Install with your preferred package manager:
npm install allure-store
# or
yarn add allure-store
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);
})();
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'] },
]);
})();
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);
})();
- 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.
- API Documentation: Detailed information on the store design, available methods, and data types.
- CONTRIBUTING.md: Guidelines for contributing to this project.
- CODE_OF_CONDUCT.md: Our expectations for community interactions.
Contributions are welcome! Please see CONTRIBUTING.md for details on how to get started.
This project is licensed under the MIT License.
Footnotes
-
Note:
allure-store
is not affiliated with the official Allure framework. It aims to provide a compatible and convenient way to handle Allure data. ↩