Where communities thrive

  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
Repo info
        ifTrue: not "{{ $environment }}" == "localdev"
        ifTrue: not $environment == "localdev"
    i have tried every variation i can think of but can't seem to get this ifTrue to work for anything other than localdev. or make it skip if env = localdev
    2nd question: i randomly see my scenario run twice in parallel (arrival and duration both set to 1). it happens randomly and causes issues. i am expect the flow to run once and only once. is there something i am missing
    im looking to to call a function js function and pass parameters that i've captured on the payload section from a csv file, is that doable?
    Nevermind...i found the answer
    How do I test graphql queries written in c#
    using yml
    How can i post the XML request in the artlillery
    1 reply
    Is there a way to specify different phases to scenarios in a single file ?
    2 replies
    Harsha Kumar K S
    hi guys
    i need an help from you guys
    anyone one online
    why would the same exact request in postman (responding with a 200) respond back with a 500 in artillery?
    I then get the artillery request posted in debug and put it in postman and I get a 200
    Hello! After run test always returned failure: ensure.p95 < 200
    Thank you
    Artillery: 1.6.1
    Artillery Pro: not installed (https://artillery.io/pro)
    Node.js: v10.19.0
    OS: linux/x64
    As I understand it, you need to look here
    Response time (msec):
    min: 0.8
    max: 1434.4
    median: 3.2
    p95: 1434.4
    p99: 1434.4
    Dealt with this problem
    p95: 1450
    I need to send headers to the server before testing socket.io. How can i do this?
    I try, but the header I want is not sent to the server

    Greetings! I have a scenario where I make two requests

    • GET v1/product, which returns a code in response
    • POST v1/submit, which uses the code returned from GET

    Now, in report summary there are entries for response times (min, p95, p99, etc). Do these response times

    -reflect the times of the one scenario run? Or
    -reflect time of every call to endpoint.

    I am kind of new to artillery so I am still trying to make sense of the reports, and how can I use it to replace what we are using now. Thanks!

    PVJ Pavan Kumar

    Greetings, I have a scenario, where I need am taking the capture (output) of 1st get, which returns me an Array of Objects and passing it to second get request. I need to loop through these array of objects and make a request to all the object (by passing the value to 2nd GET request). Below is my flow

        - get:
             url: "/getList"
                 Content-Type: "application/json"
                 Authorization: "{{token}}"
                 - json: $.message
                   as: message
                 - json: $.status
                   as: status
                 - json: $.data.pagination.totalRecords
                   as: totalRecords
                 - json: $.data.list
                   as: list
                 - statusCode: 200
                 - equals:
                   - "{{message}}"
                   - "List retrived successfully!"
        - log: "getList - {{message}} - {{totalRecords}} - {{list}}"
        - loop:
          - get:
              url: "/updateStatus"
                  Content-Type: "application/json"
                  Authorization: "{{token}}"
                 code: {{$loopElement}}
                 isActive: true
                  - json: $.message
                    as: message
                  - json: $.status
                    as: status
                  - statusCode: 200
                  - equals:
                    - "{{message}}"
                    - "Status updated successfully!"
                  - equals:
                    - "{{status}}"
                    - true
          - log: "updateStatus - {{$loopElement}}"                    
        over: {{list.name}}

    However, I am unable to get the values of list.name in the loop.

    Neither over: {{list.name}} (OR) over: {{list}} and using the name in loopElement i.e., {{$loopElement.name}} worked.

    Can someone point me what is that I am doing wrong?

    Below is the error with which the invocation is failing.
    .. * GET /api/updateStatus
    ok statusCode 200
    not ok equals Not able to update status, status updated successfully!
    expected: all values to be equal
    got: Not able to update status, status updated successfully!

    G Naga Subrahmanyam

    how to add dynamic query string to target in ws engine?

    we want to load websocket test our server using 1000 plus user data
    "config": {
    "payload": {
    "path": "./names.csv",
    "fields": ["uniqueSlug", "userName"]
    "target": "wss://some.com/actions?uniqueSlug={{ uniqueSlug }}&userName={{ userName }}",
    "phases": [
    "arrivalRate": 1,
    "duration": 1
    "ws": {
    "subprotocols": [

    Hi. I'm new artillery user. Looks very good to me, esp. if you are coming from jmeter.
    At the moment I have a strange problem:
    the post runs, eveything is fine, but the get is never activated
        - name: "create and read airports"
            - post:
                name: "create airport"
                url: "/airport"
                    airport_name: "{{ ident }}"
                    json: "$.results[0].text"
                    as: airport_id
            - get:
                name: "get airport"
                url: "/airport/by_id/{{ airport_id }}"
                    json: "$.state"
                    as: "state"
    If I switch get and post, then the get will run, but not the post ...
    David Ankin
    anyone use this with intellij? thanks in advance
    Nadia Pryshchepa
    please can you help me? what are the system requirements to run 1000 flows on socket.io - CPU, memory, network throughput?

    I am getting the error: TypeError: Cannot read property 'capture' of null.
    Please help me understand the issue with my config.

    YAML file:

      target: "ws://localhost:8001/calls/live-calls"
      processor: "./binary-payload.js"
        - duration: 60
          arrivalRate: 5
        - engine: "ws"
            - send:
              rate: 48000
              format: 1
              language: "en-IN"
              user_id: "Test client"
            - think: 1
            - loop:
              - function: "sendBinaryData"
              - send: "{{payload}}"
              - think: 1
              count: 100

    binary-payload.js file:

    module.exports = {
    function sendBinaryData(userContext, events, done) {
      .getUserMedia({ audio: true, video: false })
      .then(stream => {
        const mediaRecorder = new MediaRecorder(stream, {
          mimeType: 'audio/webm',
        mediaRecorder.addEventListener('dataavailable', event => {
          if (event.data.size > 0) {
            userContext.vars.payload = event.data;
        setTimeout(event => {
          }, 100);
      return done();

    Please help.

    Nikhil M Ranka
    Hello Guys,
    Using artillery to test sockets implemented using socket.io.
    Any ideas on how to log the responses in a log file?
    Olubisi Akintunde
    Hi everyone, any advice or existing docs out there on how to use artillery to do udp tests?
    Charlie Rogers
    Hi, does artillery have a limit to the amount of requests you can send in a single flow? My flow seems to stop after 2 requests. Thanks
    Greetings folks! Is it possible to have artillery call or leverage some already pre-existing REST API tests written using another library, supertest or fetch, for example?
    Hello, I am new to artillery and I was attempting to use the artillery-engine-grpc plugin, but I am having some issues.
    1. it seems reletive paths are not supported? (../../some/path/myTest.yaml) Not sure if this is the plugin or the core artillery code
    2. when I move the proto file into the smae directory as the yaml file I get an error about not being able to read a property
      TypeError: Cannot read property '__name' of undefined
       at /usr/local/lib/node_modules/artillery/core/lib/runner.js:389:57
       at Array.find (<anonymous>)
       at /usr/local/lib/node_modules/artillery/core/lib/runner.js:389:43
       at arrayMap (/usr/local/lib/node_modules/artillery/node_modules/lodash/lodash.js:653:23)
       at Function.map (/usr/local/lib/node_modules/artillery/node_modules/lodash/lodash.js:9622:14)
       at runScenario (/usr/local/lib/node_modules/artillery/core/lib/runner.js:385:36)
       at EventEmitter.<anonymous> (/usr/local/lib/node_modules/artillery/core/lib/runner.js:274:7)
       at EventEmitter.emit (node:events:327:20)
       at maybeArrival (/usr/local/lib/node_modules/artillery/core/lib/phases.js:149:12)
       at fn (/usr/local/lib/node_modules/artillery/node_modules/driftless/lib/driftless.js:121:26)
    I have a REST artillery project running just fine
    So a little blind troublesooting has found that
    1. I needed package and not java_package in my proto file
    2. If I leave the metadata out of the grpc config there is an NPE on line 104 of the grpc index.js

    Last thing I found is:

      - name: "Find"
        engine: grpc
          - function: “setSymbol” <— this does not seem to be allowed
          - find: [
              symbol: "{{ symbol }}"

    it results in the following error:

    .   (node:98862) Warning: service.proto not found in any of the include paths 
    (Use `node --trace-warnings ...` to show where the warning was created)
    Started phase 0, duration: 60s @ 08:49:00(-0700) 2021-04-26
    .   /usr/local/lib/node_modules/artillery-engine-grpc/index.js:160
          client[rpcName](args, grpcMetadata, (error, response) => {
    TypeError: client[rpcName] is not a function
        at /usr/local/lib/node_modules/artillery-engine-grpc/index.js:160:22
        at Array.map (<anonymous>)
        at gRPCRequest (/usr/local/lib/node_modules/artillery-engine-grpc/index.js:157:22)
        at nextTask (/usr/local/lib/node_modules/artillery-engine-grpc/node_modules/async/dist/async.js:4576:27)
        at next (/usr/local/lib/node_modules/artillery-engine-grpc/node_modules/async/dist/async.js:4584:13)
        at /usr/local/lib/node_modules/artillery-engine-grpc/node_modules/async/dist/async.js:321:20
        at init (/usr/local/lib/node_modules/artillery-engine-grpc/index.js:179:14)
        at nextTask (/usr/local/lib/node_modules/artillery-engine-grpc/node_modules/async/dist/async.js:4576:27)
        at Object.waterfall (/usr/local/lib/node_modules/artillery-engine-grpc/node_modules/async/dist/async.js:4587:9)
        at Object.awaitable [as waterfall] (/usr/local/lib/node_modules/artillery-engine-grpc/node_modules/async/dist/async.js:208:32)
    however this seems to be ok:
      - name: "Find"
        function: "setSymbol"
        engine: grpc
          - find: [
              symbol: "{{ symbol }}"
    I’m not sure how many of these are bugs vs my inexperience but I would appreciate any feed back that anyone could provide.
    does the artillery grpc plugin have some special folder structure restrictions? I have the proto file and that is puting all the code in a build/generated/ folder. That module is built and then used by another module for creating an artifactory deployable artifact that is used by callers of the service. The current problem though is that the artillery grpc plugin is saying the methods are not found.
    grpcurl works fine for calling the procedure but artillery grpc plugin can’t seem to find it. artillery grpc plugin consistently throws :
    Error: 12 UNIMPLEMENTED: Method not found: com.proto.AggregatorService/find
    user error as per the usual, I had the array brakets in the wrong place
    Hello all, I am new to this room and artillery too, we have an app that uses AWS-amplify and AWS-Cognito for user authorization and authentication, is it possible to use artillery in this case as the backend is serverless. Any help will be grateful.