soniq 0.0.1

  • Installing
  • Versions
  • 0


Multithreaded, futuristic HTTP benchmarking tool.

Use soniq to estimate your server's response latency under different levels of load.

soniq can be used from the command-line, but you can also embed its API into your own applications.


Install it to your PATH:

pub global activate soniq

Or add the API as a dependency in your pubspec.yaml:

  soniq: ^0.0.0


soniq is available an executable with the following usage:

usage: soniq [options...] <url>

-h, --[no-]help      Print this help information.
-f, --format         The format to print results in. Allowed: ["json", "stdout"]..
-j, --threads        The number of isolates (threads) to run tests in.
-c, --connections    The number of concurrent connections to maintain.
-x, --command        An optional shell command to run prior to testing.
-d, --duration       The length, in milliseconds, of the stress test.
-o, --out            A file path to write results to.
-p, --profile        The name of the profile to run, if any.

Instead of manually specifying options on each run, you can create a soniq.yaml file with multiple profiles.

A single profile takes this shape:

  format: stdout # Can also be "json"
  threads: 5 # Number of threads to spawn
  connections: 5 # Total number of HTTP connections to maintain. Each thread maintains (connections / threads).
  command: # Runs *asynchronously* before testing. Use this to start a server or other process whenever you test.
  duration: 30000 # In milliseconds. Converted to a Dart `Duration`.

Your soniq.yaml should look like this:

If you provide a default profile, then if you specify a different profile, its settings will be merged. This allows you to provide common characteristics among profile, like quasi-inheritance:

  connections: 10
  threads: 10
  url: http://localhost:3000
  url: http://localhost:3000/api/json

In the above case, running soniq -p json would be the same as running soniq -c 10 -t 10 http://localhost:3000/api/json.

Command-line options will override options from a soniq.yaml, you can still run something like soniq -p json -c 20.


To make integration easier on yourself, just use the Runner class, and pass it a Configuration object. The return value will be a RunnerResult report with statistics and tallied data attached.


import 'package:soniq/soniq.dart';

main() async {
  var config = new Configuration(
    url: 'http://localhost:3000',
    threads: 15,
    connections: 60,
    duration: new Duration(minutes: 3)
  var runner = new Runner(config);
  var report = await;
  print('Average latency (microseconds): ' + report.averageLatency.toStringAsFixed(2));

The Configuration class directly corresponds to the YAML configuration specified earlier in this document. There are several factory constructors available to build configurations at your convenience.

main() {
  var userConfig = new Configuration(...);
  // Merge with defaults
  var mergedConfig = new Configuration.merge(Configuration.DEFAULT, userConfig);
  // Merge multiple
  var multiMerged = new Configuration.mergeAll([...]);
  // Copy existing config
  var copy = new Configuration.copy(multiMerged);

Planned Features

  • WebSocket benchmarking
  • Running tests across multiple CPU's/computers

Use this package as an executable

1. Install it

You can install the package from the command line:

$ pub global activate soniq

2. Use it

The package has the following executables:

$ soniq

Use this package as a library

1. Depend on it

Add this to your package's pubspec.yaml file:

  soniq: ^0.0.1

2. Install it

You can install packages from the command line:

with pub:

$ pub get

Alternatively, your editor might support pub get. Check the docs for your editor to learn more.

3. Import it

Now in your Dart code, you can use:

import 'package:soniq/soniq.dart';
Version Uploaded Documentation Archive
0.0.1 Jun 8, 2017 Go to the documentation of soniq 0.0.1 Download soniq 0.0.1 archive
0.0.0 Jun 7, 2017 Go to the documentation of soniq 0.0.0 Download soniq 0.0.0 archive
Describes how popular the package is relative to other packages. [more]
Code health derived from static analysis. [more]
Reflects how tidy and up-to-date the package is. [more]
Weighted score of the above. [more]
Learn more about scoring.

We analyzed this package on Jan 15, 2019, and provided a score, details, and suggestions below. Analysis was completed with status completed using:

  • Dart: 2.1.0
  • pana: 0.12.10


Detected platforms:

Error(s) prevent platform classification:

Fix dependencies in pubspec.yaml.

Analysis issues and suggestions

Fix dependencies in pubspec.yaml.

Running pub upgrade failed with the following output:

ERR: The current Dart SDK version is 2.1.0.
 Because soniq depends on yamlicious ^0.0.1+1 which requires SDK version >=1.8.0 <2.0.0, version solving failed.

Health suggestions

Format lib/soniq.dart.

Run dartfmt to format lib/soniq.dart.

Format lib/src/runner.dart.

Run dartfmt to format lib/src/runner.dart.

Maintenance issues and suggestions

Fix platform conflicts. (-20 points)

Error(s) prevent platform classification:

Fix dependencies in pubspec.yaml.

Running dartdoc failed. (-10 points)

Make sure dartdoc runs without any issues.

Maintain (-20 points)

Changelog entries help clients to follow the progress in your code.

Package is getting outdated. (-60.55 points)

The package was released 83 weeks ago.

The description is too short. (-20 points)

Add more detail about the package, what it does and what is its target use case. Try to write at least 60 characters.

Package is pre-v0.1 release. (-10 points)

While there is nothing inherently wrong with versions of 0.0.*, it usually means that the author is still experimenting with the general direction of the API.

Maintain an example.

None of the files in your example/ directory matches a known example patterns. Common file name patterns include: main.dart, example.dart or you could also use soniq.dart. Packages with multiple examples should use example/


Package Constraint Resolved Available
Direct dependencies
Dart SDK >=1.19.0