2016-06-21 42 views
2

聲明:我對Scala並不熟悉,所以我可能會做一些愚蠢的事情。類型不匹配:找到字符串,要求io.gatling.core.validation.Validation [String]

我們正在使用Gatling進行性能測試。目前,我想要得到它提交POST請求我們的API,使用類似以下內容:

exec(http("post request") 
    .post("http://ourApi") 
    .body(
     StringBody(
      session => """{ "myContent": "value" }""" // 1 
    ) 
) 
    .asJSON 
    .check(status.is(200)) 
) 

正如你所看到的,我使用的是表達功能爲StringBody在行標// 1 ,這應該是可能的according to the Gatling documentation

當我嘗試運行,但是,我得到一個錯誤ZincCompiler對確切行:

type mismatch; 
found : String("{ \"myContent\": \"value\" }") 
required: io.gatling.core.validation.Validation[String] 

爲什麼期待Validation[String]?在本文檔中我只看到字符串,以及...

+0

我們需要看你的進口。你有沒有包含'import io.gatling.core.Predef._'? –

+0

@Ivan你應該發佈這個答案,而不是評論,因爲它很可能是正確的。 –

+0

這似乎是@IvanBalashov,猜測它真的是時間來修復我壞了的IDE ...任何指向什麼導入以及它如何神奇地將我的字符串轉換爲正確的類型?我很想知道它是如何在斯卡拉實際工作的... – Vincent

回答

1

您鏈接的網頁顯示

表達

大多數加特林DSL方法,其實需要表達[T]參數,這是一個類型別名會話=>驗證[T]。

那麼人們還可以傳遞字符串和其他值呢?

的原因是,有隱式轉換:

  • 傳遞一個字符串時,它就會自動地解析他們變成歸功於加特林EL表達式的編譯器。

  • 當傳遞另一個類型的值時,它會自動包裝到一個將始終返回此靜態值的Expression中。

所以問題是,隱式轉換是沒有得到觸發出於某種原因。從http://gatling.io/docs/2.2.2/session/validation.html#validation,你可以嘗試:

  1. 添加import io.gatling.commons.validation._

  2. 如果這沒有幫助,請明確使用Success("""{ "myContent": "value" }""")

+0

導入應該是'import io.gatling.commons.validation._' –

+0

@ZdenekF你是對的,謝謝(對於Gatling 2.2)。 –

相關問題