All Projects → makhshari → StressThing

makhshari / StressThing

Licence: MIT License
a software testing platform to perform stress test on web of things

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to StressThing

jmeter-grpc-plugin
A JMeter plugin supports load test gRPC
Stars: ✭ 36 (+200%)
Mutual labels:  load-testing, jmeter, stress-testing
wotcity-wot-framework
wotcity.io: the Web of Things programming framework
Stars: ✭ 17 (+41.67%)
Mutual labels:  internet-of-things, web-of-things, iot-framework
IoT-Technical-Guide
🐝 IoT Technical Guide --- 从零搭建高性能物联网平台及物联网解决方案和Thingsboard源码分析 ✨ ✨ ✨ (IoT Platform, SaaS, MQTT, CoAP, HTTP, Modbus, OPC, WebSocket, 物模型,Protobuf, PostgreSQL, MongoDB, Spring Security, OAuth2, RuleEngine, Kafka, Docker)
Stars: ✭ 2,565 (+21275%)
Mutual labels:  internet-of-things, iot-platform
load-testing-toolkit
Collection of open-source tools for debugging, benchmarking, load and stress testing your code or services.
Stars: ✭ 65 (+441.67%)
Mutual labels:  load-testing, stress-testing
thingspeak-esp-examples
ESP8266 / NodeMCU Examples for https://ThingSpeak.com
Stars: ✭ 76 (+533.33%)
Mutual labels:  internet-of-things, iot-platform
code-examples
Code examples from the https://sttp.site book
Stars: ✭ 19 (+58.33%)
Mutual labels:  software-engineering, software-testing
vscp
VSCP (Very Simple Control Protocol) IoT/m2m framework
Stars: ✭ 47 (+291.67%)
Mutual labels:  iot-platform, iot-framework
Neon
Similar to 🏡 HomeAssistant and OpenHAB, but made with .net core and ❤️ in Florence, Italy
Stars: ✭ 32 (+166.67%)
Mutual labels:  iot-platform, iot-framework
tg
Trident Genesis
Stars: ✭ 14 (+16.67%)
Mutual labels:  software-engineering, software-testing
ab-go
apache ab testing tool port in golang
Stars: ✭ 20 (+66.67%)
Mutual labels:  load-testing, stress-testing
mqtg-bot
MQTT Client Telegram Bot
Stars: ✭ 67 (+458.33%)
Mutual labels:  internet-of-things, iot-platform
QSimpleScada
Qt based simple SCADA framework, with dashboard, static and dynamic components
Stars: ✭ 152 (+1166.67%)
Mutual labels:  iot-platform, iot-framework
IoT-Modelling-Tool
IoT Modelling Tool is a platform which allows users to have their own devices and components modeled in order to represent and manage a physical environment.
Stars: ✭ 16 (+33.33%)
Mutual labels:  internet-of-things, iot-framework
jmeter-aci-terraform
Scalable cloud load/stress testing pipeline solution with Apache JMeter and Terraform to dynamically provision and destroy the required infrastructure on Azure.
Stars: ✭ 114 (+850%)
Mutual labels:  load-testing, jmeter
AeonNodeEditor
No description or website provided.
Stars: ✭ 22 (+83.33%)
Mutual labels:  iot-platform, iot-framework
fd-vue-webapp
A Vue.js web application for Freedomotic Open IoT framework
Stars: ✭ 63 (+425%)
Mutual labels:  internet-of-things, iot-platform
IOThook
IOT, Restful, Web service, Web Api
Stars: ✭ 25 (+108.33%)
Mutual labels:  internet-of-things, iot-platform
jmeter-to-k6
Converts JMeter .jmx files to k6 JS code
Stars: ✭ 57 (+375%)
Mutual labels:  load-testing, jmeter
SEPA
Get notifications about changes in your SPARQL endpoint.
Stars: ✭ 21 (+75%)
Mutual labels:  internet-of-things, web-of-things
thinkimf
thinkimf 一个基于PHP7的创新互联网框架,驱动物联网,智联网,职业规划 hinkIMF ,PHP IOT FRAMEWORK
Stars: ✭ 29 (+141.67%)
Mutual labels:  iot-platform, iot-framework

StressThing

A testing platform to perform stress test on the Web of Things(WoT). WoT systems and users' ideal stress config can be defined explicitly for test execution. Results will be presented as below:

Alt text

Alt text

Description

This testing platform uses Taraus, Blazemeter and JMeter as testing tools. Given the advantages of Blazemeter, tests are executed in the cloud and results would be available in a webpage accessible for everyone so you can share the results with your teammates. It also uses W3C WoT Thing Description as the primary standard for defining your WoT system.

This project aims to overcome different barriers of load and stress testing for Web of Things(WoT) by using the best testing tools and web standards defined for the Internet of Things(IoT). A notable approach of StressThing is to restrict users to use formal web standards defined for WoT in order to help increase the interoperability of the IoT.

Installation

You need to have node installed. By running this command in the project directory, all the dependencies of the project will be installed.

npm install

Documentation

Test Execution Parameters

You can tune your test with these parameters (from Taraus official Website ):

  • concurrency: number of target concurrent virtual users
  • ramp-up: ramp-up time to reach target concurrency
  • hold-for: time to hold target concurrency
  • iterations: limit scenario iterations number
  • throughput: apply Request per Second (RPS) shaper, limiting maximum RPS to throughput, requires ramp-up and hold-for
  • scenario: name of scenario that described in scenarios part
  • steps: allows users to apply stepping ramp-up for concurrency and rps, requires ramp-up

Define the WoT System

  • You should define each thing in your Web of Things system based on JSON format of the W3C standard for WoT things. This standard is defined explicitly in WoT Thing Description.
  • Put all things as the value of the "things" key in the input JSON file.
  • Save the JSON file as "WoT_Input.json" in the root directory of the project.
  • Here we have a short TD example:
"things": [
{
    "id": "@redLight507",
    "name": "redLight507",
    "description" : "redLight507 is a red light for the 507 street",
    "properties": {
        "getTrafficStatus": {
            "description" : "Shows the current status of the traffic in front of red light",
            "type": "string",
            "forms": [{
                "href": "https://6fb72f98-04cb-4010-b8ba-051062303e55.mock.pstmn.io/redLights/redLight507/getTrafficStatus",
                "http:methodName": "GET"
            }]
        }
    },
    "actions": {
        "putTrafficStatus": {
            "description" : "update Traffic Status",
            "input": {
            "type": "object",
            "properties": {
                "density": {
                    "type": "integer",
                    "minimum": "1",
                    "maximum": "30"
                },
                "volume": {
                    "type": "integer",
                    "minimum": "1",
                    "maximum": "500"
                  },
                "trafficLevel": {
                    "type": "integer",
                    "minimum": "0",
                    "maximum": "10"
                }
            },
            "required": ["density","volume"]
        },
            "forms": [{
                "href": "https://6fb72f98-04cb-4010-b8ba-051062303e55.mock.pstmn.io/redLights/redLight507/putTrafficStatus",
                "http:methodName": "PUT"
            }]
        }
    },
     "events": {
        "overheating": {
            "description" : "Lamp reaches a critical temperature (overheating)",
            "type": "string",
            "forms": [{
                "href": "http://yahoo.com"
            }]
        }
    }
},
{
  "name": "Another Thing"
}
]
  • You can see more input file samples in the "input_samples" directory.

Define Manual Test Configs (Optional)

StressThing generates customizable stress scenarios by itself as well as getting user's scenarios as input. You can also take advantage of both of them to gather a complete stress scenario for your WoT system.

You can define arbitrary scenarios with their corresponding settings. StressThing would put your scenarios in place to be ready to run for each of your WoT endpoints. You should define your scenarios as the value of "scenarios" key as the JSON below.

  "scenarios":[
    {
     "concurrency": "1",
      "ramp-up": "10",
      "hold-for": "10",
      "throughput": "1",
      "scenario": "BeginerScenario"
    },
    {
     "concurrency": "300",
      "ramp-up": "10",
      "hold-for": "30",
      "throughput": "30",
      "scenario": "ExtremeScenario"
  }
  ]

You can also limit the maximum users and throughput for scenarios generated by stressThing. These settings are available under "scenarioConfigs" key:

"scenarioConfigs":{
    "maxUser":"400",
    "maxThroughput":"50",
      "rampUp":"30",
    "holdFor":"20"
  }

Usage

The modern ES2017 code is written in ./src directory. You can compile it by doing this command:

npm run build #you need to run this command if you have changed any code in ./src directory

This will save JavaScript ES5 code version in ./public directory. To avoid compatibility issues the ES5 code will be used for execution.

To execute the code you have to run this command:

npm run execute #This command will create the JSON file as the input for the test tool

The JSON file is named 'Tool_Input.json' You can view it after running the above command.

Now you have all the ingredients to perform stress test on your WoT system. By running the command below, the test tool starts to execute the input file created in the previous step.

npm run stress #This command will run the test

After running this command, you will see test tool messages appear on your terminal. After a few seconds, the test tool report window will open automatically, and you can see the final results of the stress test.

Support

Reach out to me at one of the following places!

Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

Authors

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].