2017-02-28 71 views
0

我能够从下面的代码中生成csv文件,但其中没有数据(它具有与sqlYog进行交叉检查并具有相同查询)的数据。它只在一列中打印“资产ID”并抛出ClassCastException。任何人都可以帮我解决这个问题吗?谢谢。从Gatling生成的.csv文件中有'No'数据

enter image description here

这里是我的脚本。

import java.io._ 
import au.com.bytecode.opencsv.CSVWriter 
import io.gatling.jdbc.Predef._ 
import scala.collection.mutable.ArrayBuffer 

import io.gatling.core.Predef._ 
import io.gatling.http.Predef._ 
import scala.concurrent.duration._ 

class generateCsv extends Simulation { 

    val username = System.getProperty("username", "user1") 
    val password = System.getProperty("password", "user1") 
    val testUrl = System.getProperty("testUrl", "https://someurl.net") 

    val csvFileLocation = "D:/myDir/myfile.csv" 
    val dbQuery = jdbcFeeder("jdbc:mysql://10.10.40.10:3306/master", "admin", "admin", "SELECT ID_ assetID FROM TableName") 

    var recordCount = dbQuery.records.length 

    val out = new BufferedWriter(new FileWriter(csvFileLocation)) 
    val writer = new CSVWriter(out) 
    var Ids = new Array[String](recordCount) 

    Ids(0) = "Asset Ids" 

    var i = 1 

    val httpProtocol = http 
     .baseURL(testUrl) 
     .inferHtmlResources() 
     .acceptHeader("""*/*""") 
     .basicAuth(username, password) 
     .acceptEncodingHeader("""gzip, deflate""") 
     .acceptLanguageHeader("""en-US,en;q=0.8""") 
     .connection("""keep-alive""") 
     .userAgentHeader("""Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.65 Safari/537.36""") 

    val scn = scenario("Database Query") 
    .repeat (recordCount) { 
     feed(dbQuery) 
     .exec { session => 
       Ids(i) = session("assetID").as[String] 
         i = i + 1 
         session 
      } 
    } 
    after{ 
       writer.writeNext(Ids) 
       writer.close() 
      } 

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

错误:

84057 [GatlingSystem-akka.actor.default-dispatcher-6] ERROR i.g.c.a.b.SessionHookBuilder$$anonfun$build$1$$anon$1 - 'sessionHook-2' crashed on session Session(Database Query,8451783577631963111-0,Map(b1075cf5-e3c8-47d6-96bd-ff74284b4e7c -> 4, timestamp.b1075cf5-e3c8-47d6-96bd-ff74284b4e7c -> 1488276658897, assetID -> 6),1488276658892,0,KO,List(ExitOnCompleteLoopBlock(b1075cf5-e3c8-47d6-96bd-ff74284b4e7c)),<function1>), forwarding to the next one 
java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.String 
    at com.abc.gatling.generateCsv$$anonfun$2.apply(generateCsv.scala:57) ~[na:na] 
    at com.abc.gatling.generateCsv$$anonfun$2.apply(generateCsv.scala:56) ~[na:na] 
    at io.gatling.core.action.SessionHook.executeOrFail(SessionHook.scala:35) ~[gatling-core-2.1.7.jar:2.1.7] 
    at io.gatling.core.action.Failable$class.execute(Actions.scala:71) ~[gatling-core-2.1.7.jar:2.1.7] 
    at io.gatling.core.action.SessionHook.execute(SessionHook.scala:28) ~[gatling-core-2.1.7.jar:2.1.7] 
    at io.gatling.core.action.Action$$anonfun$receive$1.applyOrElse(Actions.scala:29) ~[gatling-core-2.1.7.jar:2.1.7] 
    at scala.PartialFunction$OrElse.applyOrElse(PartialFunction.scala:171) ~[scala-library-2.11.7.jar:na] 
    at akka.actor.Actor$class.aroundReceive(Actor.scala:467) ~[akka-actor_2.11-2.3.12.jar:na] 
    at io.gatling.core.akka.BaseActor.aroundReceive(BaseActor.scala:22) ~[gatling-core-2.1.7.jar:2.1.7] 
    at akka.actor.ActorCell.receiveMessage(ActorCell.scala:516) ~[akka-actor_2.11-2.3.12.jar:na] 
    at akka.actor.ActorCell.invoke(ActorCell.scala:487) ~[akka-actor_2.11-2.3.12.jar:na] 
    at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:238) ~[akka-actor_2.11-2.3.12.jar:na] 
    at akka.dispatch.Mailbox.run(Mailbox.scala:220) ~[akka-actor_2.11-2.3.12.jar:na] 
    at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:397) [akka-actor_2.11-2.3.12.jar:na] 
    at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) [scala-library-2.11.7.jar:na] 
    at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339) [scala-library-2.11.7.jar:na] 
    at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) [scala-library-2.11.7.jar:na] 
    at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107) [scala-library-2.11.7.jar:na] 
84072 [GatlingSystem-akka.actor.default-dispatcher-6] INFO i.g.core.controller.Controller - End user #8451783577631963111-0 
84179 [main] INFO i.g.c.result.reader.FileDataReader - Collected List(D:\gatling-charts-highcharts-bundle-2.1.7\results\generateCsv-1488276658757\simulation.log) from generateCsv-1488276658757 

回答

1

在堆栈跟踪的第一行示出了其中错误正在发生的事情:在generateCsv.scala线57。因为你的代码示例没有行号和短于57线,我想这是行

Ids(i) = session("assetID").as[String] 

,你尝试方案A由assetid为String,但其是根据Long类型的值到错误消息。您可以使用toString方法将Long转换为字符串:

Ids(i) = session("assetID").as[Long].toString 
+0

是的,行号是正确的。我已将.as [String]替换为.toString。 输出我得到这个对所有行: SessionAttribute(会话(数据库查询,949002059540811697-0,地图(4a27dcfa-986d-41c6-81b9-c965ff0f6c40 - > 0,timestamp.4a27dcfa-986d-41c6-81b9- c965ff0f6c40 - > 1488284879536,assetID - > -1),1488284879532,0,OK,List(ExitOnCompleteLoopBlock(4a27dcfa-986d-41c6-81b9-c965ff0f6c40)),),assetID – Peter

+0

你可以试试Ids(i)= session “assetID”)。as [Long] .toString – Harald

+0

非常感谢Harald。这工作。请编辑你的答案。会接受它。 在excel文件数据列中打印,你知道如何将它改为列吗? – Peter