Performance Testing Using hey

hey is a tiny program that sends some load to a web application. You can use it to run simple performance testing. Please check hey usage manual for command line options.

  • Setup environment variables.

    export SERVICE_REGISTRY_BASE_URL="http://service-registry-service.test.svc:8080"
    export SCHEMA_GROUP="performance-test"

    NOTE: The base URL in your cluster might be different than this. Also, if you're running hey outside the cluster then the base URL should be the same as Service Registry's route.

  • Testing create artifact API.

    • Create a payload i.e. json-schema.json file to be used for testing.

    • Run hey command to execute the test.

      ./hey -n 1000 -c 50 \
      -m POST \
      -D "json-schema.json" \
      -T "application/json" \
      -H "X-Registry-ArtifactType: JSON" \
      $SERVICE_REGISTRY_BASE_URL/apis/registry/v2/groups/$SCHEMA_GROUP/artifacts

      Sample output:

      Summary:
      Total:        2.4149 secs
      Slowest:      0.2732 secs
      Fastest:      0.0126 secs
      Average:      0.1107 secs
      Requests/sec: 414.0978
      
      Total data:   261000 bytes
      Size/request: 261 bytes
      
      Response time histogram:
      0.013 [1]     |
      0.039 [68]    |■■■■■
      0.065 [29]    |■■
      0.091 [122]   |■■■■■■■■■
      0.117 [534]   |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
      0.143 [58]    |■■■■
      0.169 [9]     |■
      0.195 [141]   |■■■■■■■■■■■
      0.221 [35]    |■■■
      0.247 [2]     |
      0.273 [1]     |
      
      
      Latency distribution:
      10% in 0.0668 secs
      25% in 0.0932 secs
      50% in 0.1032 secs
      75% in 0.1164 secs
      90% in 0.1834 secs
      95% in 0.1919 secs
      99% in 0.2095 secs
      
      Details (average, fastest, slowest):
      DNS+dialup:   0.0003 secs, 0.0126 secs, 0.2732 secs
      DNS-lookup:   0.0001 secs, 0.0000 secs, 0.0062 secs
      req write:    0.0002 secs, 0.0000 secs, 0.0115 secs
      resp wait:    0.1102 secs, 0.0125 secs, 0.2730 secs
      resp read:    0.0001 secs, 0.0000 secs, 0.0009 secs
      
      Status code distribution:
      [200]   1000 responses
  • Testing get artifact API.

    • Grab one of schema ID from the Service Registry web console and export as an environment variable.

      export SCHEMA_ID="000427c8-080f-4300-9ea6-cb8aee64b922"
    • Run hey command to execute the test.

      ./hey -n 10000 -c 100 \
        -m GET $SERVICE_REGISTRY_BASE_URL/apis/registry/v2/groups/$SCHEMA_GROUP/artifacts/$SCHEMA_ID

      Sample output:

      Summary:
      Total:         8.9206 secs
      Slowest:       0.3318 secs
      Fastest:       0.0037 secs
      Average:       0.0860 secs
      Requests/sec:  1121.0042
      
      Total data:    65910000 bytes
      Size/request:  6591 bytes
      
      Response time histogram:
      0.004 [1]      |
      0.037 [2194]   |■■■■■■■■■■■■■■■■■■
      0.069 [84]     |■
      0.102 [4878]   |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
      0.135 [2018]   |■■■■■■■■■■■■■■■■■
      0.168 [9]      |
      0.201 [741]    |■■■■■■
      0.233 [61]     |■
      0.266 [7]      |
      0.299 [5]      |
      0.332 [2]      |
      
      
      Latency distribution:
      10% in 0.0127 secs
      25% in 0.0804 secs
      50% in 0.0949 secs
      75% in 0.1036 secs
      90% in 0.1146 secs
      95% in 0.1846 secs
      99% in 0.1981 secs
      
      Details (average, fastest, slowest):
      DNS+dialup: 0.0001 secs, 0.0037 secs, 0.3318 secs
      DNS-lookup: 0.0000 secs, 0.0000 secs, 0.0123 secs
      req write:  0.0001 secs, 0.0000 secs, 0.0639 secs
      resp wait:  0.0855 secs, 0.0036 secs, 0.3317 secs
      resp read:  0.0003 secs, 0.0000 secs, 0.0983 secs
      
      Status code distribution:
      [200] 10000 responses

Last updated