# cypress-parallel-retrier

> 🛠 Development in progress, beta version

Latest version **0.0.1** (published 2020-09-09) · MIT license · 0 weekly downloads

## Install

```sh
npm install cypress-parallel-retrier
pnpm add cypress-parallel-retrier
yarn add cypress-parallel-retrier
bun add cypress-parallel-retrier
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.0.1 |
| Published | 2020-09-09 |
| First published | 2020-09-09 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 1 |
| Unpacked size | 14.7 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | Dmytro Potapov |
| Maintainers | potapovdim |
| Keywords | flaky, flaky-tests, cypress threads, rerun, failed-tests, cypress-rerun, cypress parallel execution |

## Links

- npm: https://www.npmjs.com/package/cypress-parallel-retrier
- Repository: https://github.com/Simple-Automation-Testing/cypress-parallel-retrier
- Homepage: https://github.com/Simple-Automation-Testing/cypress-parallel-retrier#readme
- Issues: https://github.com/Simple-Automation-Testing/cypress-parallel-retrier/issues
- npm.io page: https://npm.io/package/cypress-parallel-retrier

## Dependencies (1)

- [process-rerun](https://npm.io/package/process-rerun.md) ^0.1.10

## Alternatives

- [@snazzah/davey](https://npm.io/package/@snazzah/davey.md) — 1.5M weekly downloads
- [@vendure/testing](https://npm.io/package/@vendure/testing.md) — 8.3K weekly downloads
- [vue-simple-context-menu](https://npm.io/package/vue-simple-context-menu.md) — 6.6K weekly downloads
- [cypress-webpack-preprocessor-v5](https://npm.io/package/cypress-webpack-preprocessor-v5.md) — 2.1K weekly downloads
- [@backstage/plugin-catalog-backend-module-puppetdb](https://npm.io/package/@backstage/plugin-catalog-backend-module-puppetdb.md) — 1.3K weekly downloads

## Recent versions

- 0.0.1 (latest) — 2020-09-09

## README

# cypress-parallel-retrier

🛠 Development in progress, beta version

![npm downloads](https://img.shields.io/npm/dm/cypress-parallel-retrier.svg?style=flat-square)

## This library is a wrapper around ```process-rerun```

### The purpose of this library is - build simple and flexible interface for cypress framework parallel execution with rerun (on fail) possibility

[Usage and Example](#usage)

<br>

[Documentation](#documentation)
* [buildExecutor](#buildexecutor)
* [byFile](#byfile)
* [executor](#executor)
* [execute](#execute)

### usage

```js
const {buildExecutor} = require('cypress-parallel-retrier');

executeByFile();
async function executeByFile() {
  const cwd = process.cwd();
  const result = await buildExecutor(resolve(cwd, './path/to/specs'))
    .byFile()
    .command({'--process-argument': 'process-argument-value'}, {ENV_VARIABLE: 'en-varialbe-value'})
    .executor({attemptsCount: 2, maxThreads: 5, logLevel: 'VERBOSE', longestProcessTime: 60 * 1000, pollTime: 100})
    .execute();

  console.log(result);
  if(result.retriable.length || result.notRetriable.length) {
    process.exit(1);
  }
}
```

## Documentation

<br>
<br>

## buildExecutor

**`buildExecutor('./path/to/specs/folder')`**

arguments | description
--- | ---
**`pathToSpecFolderOrSpecsFilesList`** | Type: `string` or `string[]` <br> Path to specs folder, or list (array) with specs files path;

**`returns {byFile: function;}`**

<br>
<br>

## byFile

**`buildExecutor(...args).byFile()`**

#### no arguments here

**`returns {command: function}`**

<br>
<br>


## command

arguments | description
--- | ---
**`processArgs`** | Type: `undefined` or `null` or `{[prop: string]: string}` <br> Object with required process argumentss, use format prop name with - or --, example '--prop' or '-p'
**`processEnvVars`** | Type: `undefined` or `null` or `{[prop: string]: string}` <br> Object with required process env variables, use format prop name upper snake_case, LOG_LEVEL

**`returns {executor: function}`**

<br>
<br>

## executor

**`buildExecutor(...args).byFile(...args1).command().executor({maxThreads: 1, attemptsCount: 2, logLevel: 'ERROR'})`**

arguments | description
--- | ---
**`buildOpts`** | Type: `object` <br> Options for executor
**`buildOpts.maxThreads`** | Type: `number`,  <br> How many threads can be executed in same time <br> **Default threads count is 5**
**`buildOpts.attemptsCount`** | Type: `number`,  <br> How many times can we try to execute command for success result **in next cycle will be executed only faild command, success commands will not be reexecuted** <br> **Default attempts count is 2**
**`buildOpts.pollTime`** | Type: `number` ,  <br> Period for recheck about free thread <br> **Default is 1 second**
**`buildOpts.logLevel`** | Type: `string`, one of 'ERROR', 'WARN', 'INFO', 'VERBOSE', <br> ERROR - only errors, WARN -  errors and warnings, INFO - errors, warnings and information, VERBOSE - full logging <br> **Default is 'ERROR'**
**`buildOpts.currentExecutionVariable`** | Type: `string`, will be execution variable with execution index for every cycle will be ++ <br>
**`buildOpts.everyCycleCallback`** | Type: `function`,  <br> Optional. everyCycleCallback will be executed after cycle, before next execution cycle.<br> **Default is false**
**`buildOpts.processResultAnalyzer`** | Type: `function`,  <br> Optional. processResultAnalyzer is a function where arguments are original command, execution stack trace and notRetriable array processResultAnalyzer should return a new command what will be executed in next cycle or **null** - if satisfactory result <br>
**`buildOpts.longestProcessTime`** | Type: `number`,  <br> In case if command execution time is longer than longest Process Time - executor will kill it automatically and will try to execute this command again. <br> **Default time is 45 seconds**

**`returns {execute: async function}`**

<br>
<br>

## execute

**`buildExecutor(...args).byFile(...args1).command().executor(...args2).execute()`**

#### no arguments here

**`returns {retriable: string[]; notRetriable: string[]}`**

---
_Source: https://npm.io/package/cypress-parallel-retrier · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
