lm (Load Measure)

pronounciation: [el em]

@hakaicode

2019-09-08

Problem

JMeter

- heavy

- complex configuration window

- xml config is hard to edit manually

 

Gatling

- Be able to write source code but not suitable for using IDE

- No server-client distribution model

- Can't handover to non-programmer

 

Solution: lm

- Light

- Use hocon for config file

- Both cli & web (needs http knowledge but simple setting)

- Server-client model

- proxy record mode (low priority cuz SPA can't record correctly)

lm.conf

{
  servers: {
    default: "htttp://example.com"
  },
  executors : {
    default: {
      threads: 10,
      rampUp: 10,
      loop: 100
    }
  },
  user-agents: {
  default: "lm/1.0",
  chrome77-mac: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3864.0 Safari/537.36"
}
  actions {
    main: {
      // you can omit default parameters
      // server: default
      // executor: default
      // cookies: on (send cookies received before)
      // user-agent: default
      
      // action <method> <url> [data]
      GET /
      GET /login
      POST /login email=user1@example.com&password=123456
      
}
}
}
{
  actions: {
    main: {
      server: "htttp://example.com",
      paths: [ 
        "GET /",
        "GET /login",
        "POST /login email=user1@example.com&password=123456"
      ]
    }
  }
}
actions.filter(::filter).map(::collect).waitAll().reduce(::sum)

//actions.map{a->a.collect}.reduce(Result.empty, {a,b -> a+b})
fun filter = a -> a.enabled
fun collect = a -> async { a.collect()} // TODO threads,rampUp
fun sum = a,b -> a+b

data class Results{
  oprator fun plus()
  values:List<Result>
}
  
data class Request(
  val server
  val method
  val url
  val headers
   fun cookies: Cookies = headers["cookie"]
);

data class Response(
  val time
  val headers
  val body
  fun cookies = headers["set-cookie"] 
)

run in Kotlin

config details

Q. Why Kotlin?

Stress tool must need resources. 

R U crazy?

Will you die?

A. Hmm, good question.

I will try to compile as Kotlin-native.

I may rewrite in Rust someday.

 

maybe.

lm: modern http stress tool

By hakaicode

lm: modern http stress tool

  • 525