如何使用Gatling 2.2.0调用SOAP Web服务

时间:2016-04-14 10:45:15

标签: soap gatling

我是Gatling和Scala的新手。如何使用Gatling 2.2.0调用/测试java SOAP Web服务?我搜索过google和gatling文档,但找不到任何链接

代码                 val httpProtocol = http             .baseURL( “http://PUNITP83267L:8081/WebServiceProject/services/MyService”)         val headers_0 =地图(             “accept-encoding” - > “gzip,deflate”,             “内容类型” - > “文本/ XML;字符集= UTF-8”,             “SOAPAction” - > “”             “内容长度” - > “275”,             “主持人” - > “PUNITP83267L:8081”             “连接” - > “活”,             “接受语言” - > “EN-US,连接; Q = 0.8”,             “user-agent” - > “Mozilla / 5.0(Windows NT 6.1; Win64; x64)AppleWebKit / 537.36(KHTML,与Gecko一样)Chrome / 49.0.2623.112 Safari / 537.36”)

    val scn = scenario("SOAPRecordedSimulation")
        .exec(http("simple Soap Request")
        .post("<?xml version=\"1.0\" encoding=\"UTF-8\"?><soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"><soapenv:Body><greetMeResponse xmlns=\"http://ws.star.fs.infosys.com\"><greetMeReturn>Hello uMESH</greetMeReturn></greetMeResponse></soapenv:Body></soapenv:Envelope>\"\r\n")
        .headers(headers_0))
    setUp(scn.inject(atOnceUsers(1))).protocols(httpProtocol)
}

2 个答案:

答案 0 :(得分:1)

我不确定是否有录音机可用。但是,您可以对脚本进行如下更改:

class testSOAP extends Simulation {

val httpProtocol = http
            .baseURL("http://PUNITP83267L:8081/WebServiceProject/services/")

    val header = Map(
    "accept-encoding" -> "gzip, deflate", 
    "Content-Type" -> "text/xml;charset=UTF-8", 
    "SOAPAction" -> "", "Content-Length" -> "275", 
    "Host" -> "PUNITP83267L:8081", 
    "Connection" -> "alive", 
    "accept-language" -> "en-US,en;q=0.8", 
    "user-agent" -> "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36")

    val scn = scenario("SOAPRecordedSimulation")
            .exec(http("simple Soap Request")
            .post("MyService")
            .headers(header)
            .body(StringBody("""<?xml version=\"1.0\" encoding=\"UTF-8\"?><soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"><soapenv:Body><greetMeResponse xmlns=\"http://ws.star.fs.infosys.com\"><greetMeReturn>Hello uMESH</greetMeReturn></greetMeResponse></soapenv:Body></soapenv:Envelope>\"\r\n""")))
        setUp(scn.inject(atOnceUsers(1))).protocols(httpProtocol)
}

答案 1 :(得分:0)

我认为SAOP代码必须在文件中,并且基本URL不包含url上下文。它只是基本网址(localhost:7001)。将url上下文放在post函数中。

以下是代码:

package my.package

import scala.concurrent.duration._

import io.gatling.core.Predef._
import io.gatling.http.Predef._
import io.gatling.jdbc.Predef._

class MyClass extends Simulation {

  val httpProtocol = http
    .baseURL("http://127.0.0.1:7001")
    .inferHtmlResources()
    .acceptEncodingHeader("gzip,deflate")
    .contentTypeHeader("text/xml;charset=UTF-8")
    .userAgentHeader("Apache-HttpClient/4.1.1 (java 1.5)")

  val headers_0 = Map("SOAPAction" -> """""""")

  val uri1 = "http://127.0.0.1:7001/my-project/my-service"

  val scn = scenario("ScenarioName")
    .exec(http("request_0")
      .post("/my-project/my-service")
      .headers(headers_0)
      .body(RawFileBody("MyService_0000_request.txt")))

  setUp(scn.inject(atOnceUsers(1))).protocols(httpProtocol)
}

“MyService_0000_request.txt”是hosts文件夹中的文件,包含soap请求正文。