我被要求准备一个用于测试微服务的回归套件,因为我需要: - 运行脚本 - 运行不同的API(对于下一个API中使用的场景,可以是多个) - 以一些可呈现的格式发布结果
我自己的第一选择是Jmeter这个,但高级资源没有达成一致,我被要求使用SCALA,在与Scalatest合作时,由于我的大部分测试都围绕着调用Restful API而被困在期货中。
我仍然认为Jmeter对于我正在做的事情更好,但是没有坚实的基础,有人可以建议我应该选择哪一个吗?
答案 0 :(得分:3)
肯定是的,我使用scalatest进行unit-testing,integration-testing,component-testing和shakedown-testing我的微服务。
没有使用太多的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报告,如下所示
此外,您可以以非常易读的格式查看所有场景,请参阅我的项目中的一个组件测试,
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,主要功能是:
还有Gatling工具,其中使用基于Scala的DSL创建测试,但是根据Open Source Load Testing Tools: Which One Should You Use?,JMeter在协议支持,可伸缩性和吞吐量方面更好。