Меня попросили подготовить регрессионный набор для тестирования микросервисов, для этого мне нужно: - Запустить скрипты - Запустить разные API (может быть несколько для сценариев, которые будут использоваться в следующем API) - Публиковать результат в каком-то презентабельном формате
Моим собственным первым выбором был Jmeter для этого, но старший ресурс не согласился, и меня попросили использовать SCALA, работая со Scalastest, я застрял с Futures, так как большая часть моего тестирования вращается вокруг вызова Restful API.
Я все еще думаю, что Jmeter лучше для того, что я делаю, но у меня нет прочной базы для этого, может ли кто-нибудь предложить, какой из них мне выбрать?
Ответ 1 · рейтинг 3 · prayagupd
Определенно ДА, я использую 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
Надеюсь, это будет полезно, дайте мне знать, если возникнут вопросы, буду рад помочь.
Ответ 2 · Dmitri T
Я бы предпочел JMeter, основные функции:
- У вас есть все необходимое из коробки (сэмплеры, пре/постпроцессоры, утверждения, отчеты) и т. д.)
- Тесты JMeter можно масштабировать для запуска на нескольких машинах.
- Тесты JMeter можно создавать с помощью графического интерфейса пользователя, знание языка программирования не требуется.
Существует также инструмент Gatling, в котором тесты создаются с использованием DSL, однако согласно Инструменты нагрузочного тестирования с открытым исходным кодом: какой из них следует использовать? JMeter лучше с точки зрения поддержки протоколов, масштабируемости и пропускной способности.