什么可能是微服务回归套件的最佳方法,可以使用Scala吗?

时间:2017-03-10 05:54:53

标签: scala testing junit jmeter scalatest

我被要求准备一个用于测试微服务的回归套件,因为我需要: - 运行脚本 - 运行不同的API(对于下一个API中使用的场景,可以是多个) - 以一些可呈现的格式发布结果

我自己的第一选择是Jmeter这个,但高级资源没有达成一致,我被要求使用SCALA,在与Scalatest合作时,由于我的大部分测试都围绕着调用Restful API而被困在期货中。

我仍然认为Jmeter对于我正在做的事情更好,但是没有坚实的基础,有人可以建议我应该选择哪一个吗?

2 个答案:

答案 0 :(得分:3)

肯定是的,我使用scalatest进行我的微服务。

没有使用太多的JMeter,我尝试过对我的微服务进行性能测试,对我来说有点沮丧,立即放弃了。

Scalatest对我来说非常有用{/ p}。

非常简单的集成测试示例,(我使用f#*$_&g作为我的API端点,即在线API)

https://jsonplaceholder.typicode.com/posts/1

我编写了自己的class SomeHttpFlowSpecs extends HttpFlowSpecs { feature("Getting user posts on my API server") { scenario("As a software engineer, I want to receive the user posts when I call the endpoint") { When("I send a GET request to the http endpoint") val response = doHttpGet("https://jsonplaceholder.typicode.com/posts/1") Then("I receive 200 response back with the user posts") assert(response.getStatusLine.getStatusCode == 200) val expectedJson = """ |{ | "userId": 1, | "id": 1, | "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit", | "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto" |} """.stripMargin assert(JSON.parseRaw(responseContent(response)) == JSON.parseRaw(expectedJson)) } } } 作为Util来进行http调用和处理响应。与您说HttpFlowSpecs响应不同,这些电话与我同步。我使用非常着名的Future进行http通信。

apache httpclient

这是我用于测试的非常简单的conifers-spec

我使用pegdown - Java Markdown processor和scalatest进行html报告,如下所示

pegdown

此外,您可以以非常易读的格式查看所有场景,请参阅我的项目中的一个组件测试

reports

我如何运行测试

class HttpFlowSpecs extends extends FeatureSpec with GivenWhenThen with BeforeAndAfterAll {

  def doHttpGet(endpoint: String): CloseableHttpResponse = {
    val httpRequest = new HttpGet(endpoint)
    val response = (new DefaultHttpClient).execute(httpRequest)
    response
  }

  def doHttpPost(endpoint: String, content: String, contentType: String = "application/json"): CloseableHttpResponse = {
    val httpRequest = new HttpPost(endpoint)
    httpRequest.setHeader("Content-type", contentType)
    httpRequest.setEntity(new StringEntity(content))

    val response = (new DefaultHttpClient).execute(httpRequest)
    response
  }

  def responseContent(response: CloseableHttpResponse): String = {
    val responseBody: String = new BufferedReader(new InputStreamReader(response.getEntity.getContent))
      .lines().collect(Collectors.joining("\n"))

    println("Response body = " + responseBody)
    responseBody
  }
}

希望这很有用,如果有任何问题,请告诉我,我们乐意为您提供帮助。

答案 1 :(得分:0)

我宁愿选择JMeter,主要功能是:

  • 您拥有开箱即用的所有东西(采样器,前/后处理器,断言,reporting等)
  • JMeter测试可以scaled在多台计算机上运行
  • 可以使用GUI创建JMeter测试,无需编程语言知识

还有Gatling工具,其中使用基于Scala的DSL创建测试,但是根据Open Source Load Testing Tools: Which One Should You Use?,JMeter在协议支持,可伸缩性和吞吐量方面更好。