npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@shelex/parallel-specs-client

v1.10.0

Published

api client for orchestrator service for your spec files during parallel testing across different machines

Downloads

15

Readme

parallel-specs-client

Build version
semantic-release License

API Client for Parallel Specs.
Service could be used as orchestrator for your spec files during parallel testing across different machines/containers.

Authorization

Registration

You can register your account at parallel-specs UI or use demo credentials - email: [email protected] and password: test.
Source code: parallel-specs.

Login

If you already have account at parallel-specs UI you can use email and password with this api client to obtain authorization token. Another way is to create specific api key (recommended) to avoid sharing credentials.

Install

  • yarn:
yarn add @shelex/parallel-specs-client
  • npm:
npm install @shelex/parallel-specs-client

Example

import { ParallelSpecsClient, filesToSpecInput } from '@shelex/parallel-specs-client';
// const { ParallelSpecsClient, filesToSpecInput } = require("@shelex/parallel-specs-client")

const client = new ParallelSpecsClient({
    project: 'test',
    email: '[email protected]',
    password: 'test'
    // or just use api key (email and password are not required in such case):
    token: 'api_key'
});

/**
 * specs are located in folder "specs"
 * files: "spec1.js", "spec2.js", "spec3.js", "spec5.js", "spec4.js"
 * take all js files in "specs" folder excepting "spec5.js"
 */
const specs = filesToSpecInput(['**/specs/*.js'], ['**/specs/spec5.js']);

// create new session (project will be created automatically, or link existing)
client.addSession(specs);
// or in case you have files as strings just pass them as array of objects:
// const specs = [{ filePath: 'spec1.js' }, { filePath: 'spec2.js' }, { filePath: 'spec3.js' }, { filePath: 'spec4.js' }]
// client.addSession(specs)

// query next spec for any of your runners
const next = client.next({ machineId: 'runner1' }); // start spec1, return spec1
const next = client.next({ machineId: 'runner2' }); // start spec2, return spec2
const next = client.next({ machineId: 'runner2' }); // finish spec2, start spec3, return spec3
const next = client.next({ machineId: 'runner1' }); // finish spec1, start spec4, return spec4
const next = client.next({ machineId: 'runner2' }); // finish spec3, return null
const next = client.next({ machineId: 'runner1' }); // finish spec4, return null

// get current state of project "test"
const project = client.project();
console.log(project);

CLI

Library also provides CLI interface

Create session

parallel-specs-cli create-session --project test --token $parallel_spec_token --include-specs '**/cypress/integration/**'

Use parallel-specs-cli create-session --help to check arguments available
Created session will be stored as json file or just console.log session id to catch from bash:

PARALLEL_SPECS_SESSION_ID=$(parallel-specs-cli create-session (args for parallel spec client) | tail -1)

API

const client = new ParallelSpecsClient({options})

Constructor. options may contain inital values for:

  • url, default: "https://parallel-specs.shelex.dev/api"; url for parallel-specs service queries
  • project, may be also passed as second argument to addSession
  • token, in case you have already obtained api key, login step will be skipped
  • email and password, in case token option is empty, constructor will call login method with this credentials to obtain token

client.addSession(specs: SpecInput[], projectName?: string): {sessionId: string}

Create a new session for project. Project will be reused, or created in case it still not exist.
Returns object with property sessionID that could be used for retrieving spec.

client.next({ machineId?: string, sessionId?: string, previousStatus?: string }): string;

Get next spec for machineId + sessionId, returns spec filePath.
Ends previous spec for this machineId + sessionId in case it exists.

project(id?: string): Project

Get project details with latest 15 sessions

Run Cypress

Prepare a script that uses Cypress module API, examples could be found in cypress-parallel-specs-locally repository.

You can have multiple machines\actions\containers with such runner (with different machineId) and each runner will ask service for next spec file to execute.

Motivation

Idea is to have separate service for orchestrating specs during test runs. Classical solution is to manually divide spec files in groups, however it may be not so efficient in terms of run duration as you have to edit such timings, and one group may finish long after another one thus execution time is unoptimised. Strategy used in this service is basically to run new specs and then from longest to shortest compared to previous session.
Potentially, some UI could be built on top of Parallel Specs service to track test sessions across the time.

License

Copyright © 2022-2024 Oleksandr Shevtsov [email protected]

This work is free. You can redistribute it and/or modify it under the terms of the MIT License. See LICENSE for full details.