{"id":15980731,"url":"https://github.com/vitalets/sheeva","last_synced_at":"2025-07-27T01:09:26.644Z","repository":{"id":66272982,"uuid":"73734652","full_name":"vitalets/sheeva","owner":"vitalets","description":"Concurrent Automation Test Runner","archived":false,"fork":false,"pushed_at":"2017-08-09T09:17:34.000Z","size":544,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-04T18:48:11.033Z","etag":null,"topics":["test-automation","test-runner","testing"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vitalets.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":["vitalets"]}},"created_at":"2016-11-14T18:28:20.000Z","updated_at":"2025-03-29T02:29:23.000Z","dependencies_parsed_at":"2024-02-13T09:32:17.085Z","dependency_job_id":null,"html_url":"https://github.com/vitalets/sheeva","commit_stats":{"total_commits":340,"total_committers":2,"mean_commits":170.0,"dds":0.0117647058823529,"last_synced_commit":"c8a8f2a1b9119139004fc24b9987727db75f9fa3"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/vitalets/sheeva","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vitalets%2Fsheeva","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vitalets%2Fsheeva/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vitalets%2Fsheeva/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vitalets%2Fsheeva/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vitalets","download_url":"https://codeload.github.com/vitalets/sheeva/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vitalets%2Fsheeva/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267279174,"owners_count":24063308,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-26T02:00:08.937Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["test-automation","test-runner","testing"],"created_at":"2024-10-08T00:22:06.781Z","updated_at":"2025-07-27T01:09:26.627Z","avatar_url":"https://github.com/vitalets.png","language":"JavaScript","funding_links":["https://github.com/sponsors/vitalets"],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://cloud.githubusercontent.com/assets/1473072/25825444/b3095b02-344b-11e7-93b8-aa3244c33923.png\"/\u003e\n\u003c/p\u003e\n\u003ch1 align=\"center\"\u003eSheeva\u003c/h1\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca title='build status' href=\"https://travis-ci.org/vitalets/sheeva\"\u003e\u003cimg src='https://travis-ci.org/vitalets/sheeva.svg?branch=master'/\u003e\u003c/a\u003e\n  \u003ca title='npm version' href=\"https://npmjs.org/package/sheeva\"\u003e\u003cimg src='http://img.shields.io/npm/v/sheeva.svg'/\u003e\u003c/a\u003e\n  \u003ca title='License' href=\"https://opensource.org/licenses/MIT\"\u003e\u003cimg src='https://img.shields.io/badge/license-MIT-blue.svg'/\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003ch4 align=\"center\"\u003e\n  Concurrent Automation Test Runner\n\u003c/h4\u003e\n\n***\n\n## Intro\nSheeva is a test-runner with focus on optimal test execution on parallel targets with limited concurrency.\nTargets are browsers, mobile phones, tablets and any other configurable entities.\n\n## Features  \n- **Parallelization** \n  - per browser \n  - per mobile device\n  - per suite \n  - per test\n- **Annotations** \n  - ignore/run test for particular target  \n  - automatically re-try with increasing timeout \n  - run subset of tests by tag\n  - attach custom data to test\n- **Syntax**\n  - BDD compatible with [Mocha](https://mochajs.org), [Jasmine]() and [Jest]()\n  - Nested groups allowed\n- **Integrations**\n  - [Selenium-webdriver](https://www.npmjs.com/package/selenium-webdriver)\n  - [Webdriverio](http://webdriver.io)\n  - [Sauce Labs](https://saucelabs.com)\n- **Can run in**\n  - Node.JS\n  - Browser\n\n## Contents\n * [Demo](#demo)\n * [Install](#)\n * [Getting started](#)\n * [Configuration](#)\n * [API](#)\n   * [Tests](#)\n   * [Annotations](#)\n * [Examples](#)\n * [Why special runner?](#whyspecialrunner)\n\n## Demo\n\n## Why special runner?\nAutomation tests are different from unit tests.\nTheir requirements to runner are:\n\n* **Parallelization per environment**  \n   Run the same tests on different browsers, smartphones and platforms.\n\n* **Parallelization per test**   \n   Split suites and run each test/sub-suite in parallel.\n   \n* **Conditional skip/only**  \n   Skip or run particular test in particular environment.\n   \n* **Concurrency limit**  \n   Run on pre-defined number of concurrent sessions.\n   \n* **Nested groups**   \n   Create nested test groups with common before/after hooks to reduce boilerplate code.\n\n* **Smart tests splitting**  \n   Smart algorithm for splitting tests between parallel sessions to have minimal execution time.\n   \n* **Progressive retries**  \n   Give test a chance to re-run if it tightly depends on extra conditions (e.g. network state).\n   \n* **Tags**   \n   Group and run tests by tags (e.g. *smoke*, *normal*, *full*) \n      \nSheeva tries to fulfill all these requirements.\n\n## Errors handling\nThere are several types of errors that may occur while running tests:  \n\n1. **Error in test**  \n  It can be assertion error or error in test code itself. In that case all `afterEach` hooks are called,\n  error is reported via `TEST_END` event and runner goes to the next test.\n \n2. **Error in beforeEach hook**  \n   Runner will not call test itself but will call all needed `afterEach` \n   hooks for proper cleanup. Then runner goes to the end of error suite, calls all needed `after` hooks\n   and starts next suite.\n   \n2. **Error in afterEach hook**  \n   Runner will anyway call all needed `afterEach` hooks for proper cleanup. \n   Then runner goes to the end of error suite, calls all needed `after` hooks\n   and starts next suite. \n \n3. **Error in before hook**  \n   Runner will not call any tests of that suite. Instead it goes to the end of that suite, \n   calls all needed `after` hooks and starts next suite.\n\n3. **Error in after hook**  \n   Runner will anyway call all needed `after` hooks for proper cleanup and start next suite.\n\n4. **Error in runner**  \n   This may be internal error in Sheeva itself or in configuraiton methods such as `config.startSession`. \n   In that case runner terminates immediately and `sheeva.run()` rejects with that error.\n  \n*Note 1:* reporter is responsible for displaying all errors except runner error.  \n*Note 2:* if `config.breakOnError` is enabled then runner will terminate on any error.  \n*Note 3:* there can be several errors at once, e.g. error in `before` hook can cause error in `after` hook.  \n\n## License\nMIT @ [Vitaliy Potapov](https://github.com/vitalets)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvitalets%2Fsheeva","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvitalets%2Fsheeva","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvitalets%2Fsheeva/lists"}