Giter Site home page Giter Site logo

intuit / tank Goto Github PK

View Code? Open in Web Editor NEW
81.0 17.0 62.0 48.6 MB

Tank is a downloadable application that can be used to load test websites

License: Eclipse Public License 1.0

Java 76.13% Shell 0.05% JavaScript 12.76% CSS 0.35% HTML 3.44% Batchfile 0.01% Lex 7.28%
performance-testing java hacktoberfest

tank's Introduction

Build Status Build Status GitHub release java tomcat

Intuit Tank

Intuit Tank is a load test platform that runs in a cloud environment. It currently supports Amazon web interfaces and utilizes services from EC2, S3, CloudWatch (Logs/Metrics).

Intuit Tank has two main components: A controller and agents.

The Controller is the central hub in the deployment. It supports the GUI for managing tests and for orchestrating. It utilizes Apache Tomcat for a web container and communicates with the agents via http. It exposes a RESTful interface for invoking services. Data is stored in a MySql database, on the file system, and reporting metrics can be stored in CloudWatch Metrics, S3, DynamoDB or Wavefront.

Agents are instantiated on demand and exist for the duration of a test. They communicate with the controller via RESTful interfaces.

Documentation

You can find all the Documentation for Tank at Tank Documentation

Building Intuit Tank

Intuit Tank uses Maven and should be able to be built using public repositories. You may need to increase the default memory settings for maven to build. e.g. export MAVEN_OPTS="-Xmx1g"

There are several profiles (for the initial build you should build the release profile so that the installation guide is built. e.g. mvn clean install -P release)

  • default -- builds source but does not build the docs or package tools.
  • release -- default plus docs and all tools and signs them using a self signed certificate.
  • coverage -- runs jacoco code coverage.
  • static-analysis -- runs checkstyle and findbugs.

There are several artifacts that are important.

  • web/web_ui/target/tank.war -- the main deployment file. Intended for deployment to a tomcat web server.
  • agent/agentManager_pkg/target/agent-startup-pkg.zip -- the agent app that gets started when the agent starts and manages communicating with the tank controller and coordinating the tests.
  • tools/agent_debugger_pkg/target/Tank-Debugger-all.jar -- the visual debugger jar. can be launched to debug scripts or projects.
  • tools/script_filter_pkg/target/Tank-Script-Runner-all.jar -- the visual script filter tool for writing scripts to filter or manipulate scripts on import.
  • proxy-parent/proxy_pkg/target/Tank-Proxy-pkg.jar -- the proxy recording tool. A Tool to record scripts using your browser.

Quickstart

There is a shell script to install and configure a standalone controller and agent and configured with a java database for Mac and Linux. Windows users should install some POSIX tooling such as Babun or Cygwin. It can be downloaded from our public site or in the root of the distribution. You can use this version for small tests to try out the tools but should not use it for large scale or production testing.

Guides

Installation guide and User guide can be found in the docs folder and are built with the source. and can also be found on our wiki.

Issues & Contributions

Please open an issue here on GitHub if you have a problem, suggestion, or other comment.

Pull requests are welcome and encouraged! There are eclipse code format templates in the dev_environment folder. Any contributions should include new or updated unit tests as necessary to maintain thorough test coverage.

License

Tank is provided under the Eclipse Public License - Version 1.0

FAQ

Please see our FAQ on our wiki.

tank's People

Contributors

bhylan avatar bryaan avatar dangleton avatar dependabot[bot] avatar girijasameera avatar kevin-mcgoldrick avatar kevinmcgoldrick avatar kmarquardsen avatar mani-sreekakula avatar maspen avatar mayhs19 avatar sarthakgupta072 avatar shawn-h-park avatar srujana4 avatar tonyhernandez avatar zakaria-kofiro avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

tank's Issues

Build creation unsuccessful

Hi,

Can we have a .exe build for intuit/tank.

We tried to create the build and we are getting error as given below:

[ERROR] Some problems were encountered while processing the POMs:
[ERROR] Unresolveable build extension: Plugin org.apache.maven.wagon:wagon-webdav-jackrabbit:1.0-beta-7 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.wagon:wagon-webdav-jackrabbit:jar:1.0-beta-7 @
[ERROR] Non-resolvable import POM: Could not transfer artifact org.jboss.arquillian:arquillian-bom:pom:1.1.5.Final from/to jboss-repo (http://repository.jboss.org/nexus/content/groups/public): Connect to repository.jboss.org:80 [repository.jboss.org/209.132.182.33] failed: Connection refused: connect @ line 415, column 19

Please help us to complete the build creation.

Athul Jose
[email protected]

Switch database query building to JTA rather than RESOUCE_LOCAL

Ideal State

The current data_access module is built with a lot of custom database query building content. While this is a tightly controlled model of database access, I feel like this interface could be handed over to a JTA provider for better longterm support.

Invalid Maven Repos

It appears that two Maven repos have moved/changed. Specifically the codehaus (gone?) and the ibiblio (moved).

The modification is a simple changing of the URLs

<repository>
  <id>codehaus</id>
  <name>Codehaus Repo</name>
  <url>https://repository-master.mulesoft.org/nexus/content/groups/public/</url>
</repository>
<repository>
  <id>ibiblio</id>
  <name>Main Ibiblio Repo</name>
  <url>http://maven.ibiblio.org/maven2/</url>
</repository>

Store script as an S3 object, not a database blob

Existing

scripts are stored in ugly database blobs that abuse the database server on any input/output operation. This requires regular database restarts to recover memory and stop swapping.

Ideal

scripts should be written as an S3 object with the bucket defined in the configuration, and the key should be stored in the database in place of the current reference.

Async Http Client

Existing State

Tank currently supports two blocking httpClients (apache httpclient 3.1 and 4.5). These httpclients make a request and wait for the response and parse the response before continuing on the the next call.

Issue

The existing state fails to produce conistent TPS, as the server endpoint changes performance. Faster RT equals higher TPS, and vise-versa. A completely non-blocking solution would not work because certain calls rely on the response data from a previous call.

Solution Stage 1

Include a Non-blocking Async http client like netty that would execute requests with a non-blocking futures form. This is a backward compatible state.

Solution Stage 2

Add an extra boolean to the request data_model, xml, gui, etc. So that requests can be marked async or not. The ultimate outcome would allow may flow events to be blocking, while beaconing/uilogger calls would be sent off and processes the responses when ever, without blocking the primary flow.

Add Authentication

I have need to authenticate using either Basic or NTLM authentication. Please add a way to specify authentication.

Remove redundancy of port number in url from agent calls

Currently the extra port number in the url makes it hard to use a full url redirect variable from the previous call. Since the http or https already implies a port, don't think it's needed.

TANK/agent/apiharness/src/main/java/com/intuit/tank/http/BaseRequestHandler.java

REMOVE
// no default port specified for http
-->// if (protocol.equalsIgnoreCase("http") && port == -1)
-->// port = 80;
-->// else if (protocol.equalsIgnoreCase("https") && port == -1)
-->// port = 443;

REPLACE
return new URL(protocol, host, port, path

WITH
return new URL(protocol, host, path

Allow variable regions

As a performance engineer, I would like to run test traffic from any AWS region so that traffic patterns can be shaped accordingly and to disperse the traffic in a more natural manner. Currently Tank use only two hard coded regions.

Acceptance Criteria:

  1. The system will display user entry boxes for all regions configured.
  2. Instances will be run in all regions configured.
  3. If a region is removed from the global configuration and there was a project that has users configured, they will be automatically removed when the project is viewed.

Add color hilighting to debugger for status codes >= 400

As a Performance Engineer, while using the debugger, I would like to be able to easily see which requests returned response codes greater than or equal to 400 so that I can easily see if there are errors in the script.

Acceptance criteria:

  1. Any requests that result in status >= 400 are hi lighted in some way in the debugger UI.

all-in-one.sh: No such file or directory error

In the process of setting up Tank and ran into the below error when running all-in-one.sh.

OS: Ubuntu 18.04
Bash: GNU bash, version 4.4.20

No install dir supplied. Using /home/username/github/Tank
Installing all in one in /home/username/github/Tank
downloading and extracting tomcat 6...
downloading and extracting agent-standalone...
downloading and extracting support libraries...
downloading and installing tank war file...
Creating start script at /home/username/github/Tank/start.sh ...
Creating stop script at /home/username/github/Tank/stop.sh...
all-in-one.sh: line 58: /home/username/github/Tank/agent-standalone/run.sh: No such file or directory
all-in-one.sh: line 59: /home/username/github/Tank/agent-standalone/run.sh: No such file or directory
all-in-one.sh: line 60: /home/username/github/Tank/agent-standalone/run.sh: No such file or directory
all-in-one.sh: line 61: /home/username/github/Tank/agent-standalone/run.sh: No such file or directory
all-in-one.sh: line 62: /home/username/github/Tank/agent-standalone/run.sh: No such file or directory
Installing all in one in /home/username/github/Tank
Run /home/username/github/Tank/start.sh to start the all in one server and /home/username/github/Tank/stop.sh to kill it```

Support a Non-linear ramp rate

Existing linear ramp - single service

Is perfect for testing an individual service because all the calls go to a single destination, thus the load on that service scales linearly.

Existing linear ramp - multi service

Once you consider multiple services than a problem appears. For example a login as the first step to a set of scripts. In the first minute you will start x news sessions, in the second minute you will start x new sessions, etc. This means the login service will go from zero to 100% test load in that one minute. Beyond just login we see large scripts that call many services will spike services with few calls from zero to 100% load.

Solution

Add a job configuration setting that allows you to choose a linear or non-linear ramp.
The non-linear ramp would shrink the wait between starts over half the ramp time, producing an S-curve to steady state. The S-curve from the client perspective, would produce the desired linear ramp on login and other rarely called endpoints.

switchable themes

allow the theme used to be switchable and configurable vi config.

Update to AWS JAVA SDK v2

Utilize the new AWS SDK v2

      <dependency>
        <groupId>software.amazon.awssdk</groupId>
        <artifactId>bom</artifactId>
        <version>${version.aws-sdk-bom}</version>
        <scope>import</scope>
        <type>pom</type>
      </dependency>

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.