Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Какой может быть лучший подход для регрессионного набора для микросервисов, можно ли использовать для этого Scala?

Автор вопроса: Saquib GulОтветов: 2

Меня попросили подготовить регрессионный набор для тестирования микросервисов, для этого мне нужно: - Запустить скрипты - Запустить разные API (может быть несколько для сценариев, которые будут использоваться в следующем API) - Публиковать результат в каком-то презентабельном формате

Моим собственным первым выбором был Jmeter для этого, но старший ресурс не согласился, и меня попросили использовать SCALA, работая со Scalastest, я застрял с Futures, так как большая часть моего тестирования вращается вокруг вызова Restful API.

Я все еще думаю, что Jmeter лучше для того, что я делаю, но у меня нет прочной базы для этого, может ли кто-нибудь предложить, какой из них мне выбрать?

  • Если вы хотите снизить производительность с помощью Scala, вы можете использовать Gatling gatling.io. Łukasz 10.03.2017

testingjunitscalajmeterscalatest

Ответы

Ответ 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 лучше с точки зрения поддержки протоколов, масштабируемости и пропускной способности.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы