Определенно ДА, я использую scalatest для unit- тестирование, integration-testing, component-testing и shakedown-testing мой микросервис.
Я не использовал много JMeter, я попробовал его для проверки производительности моего микросервиса, это меня немного разочаровало, и я сразу же сдался.
Scalatest оказался для меня очень f#*$_&g продуктивным.
Пример очень простого интеграционного тестирования (я использую https://jsonplaceholder.typicode.com/posts/1 в качестве конечной точки API, которая является онлайн-API)
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))
}
}
}
Я написал свой собственный HttpFlowSpecs как утилиту для выполнения HTTP-вызовов и обработки ответов. Звонки синхронны для меня, в отличие от того, что вы говорите Future ответов. Я использую хорошо известную apache httpclient для связи по http.
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
}
}
Вот очень простой conifers-spec, который я использую для тестирования.
Я использую pegdown - процессор Java Markdown со скалатестом для отчетов html, как показано ниже,
а>
Кроме того, вы можете увидеть все свои сценарии в удобном для чтения формате, посмотреть один из моих тестов компонентов в моем проекте,
а>
Как я запускаю свои тесты
mvn clean test
Надеюсь, это будет полезно, дайте мне знать, если возникнут вопросы, буду рад помочь.
person
prayagupd
schedule
10.03.2017