【问题标题】:how to handle pagination in rest api automation如何在rest api自动化中处理分页
【发布时间】:2021-03-29 06:56:24
【问题描述】:

如何在 REST API 中处理分页?

public getMethodForCenter(String baseUrl, String endpoint) {
    HttpURLConnection openConnection = new URL(baseUrl + endpoint).openConnection()
    def token = postAuthorization(Users.username, Users.password)
    openConnection.setRequestMethod("GET")
    openConnection.setRequestProperty("Authorization", "Bearer " + token)
    if(openConnection.getResponseCode() == 200) {
        assert openConnection.getResponseCode() == 200
        def responseBody = openConnection.getInputStream().getText()
        def parsedJson = slurper.parseText(responseBody)
        assert parsedJson.statusCode == 200
        return parsedJson
    } else {
        assert openConnection.getResponseCode() != 200
        def responseBody = openConnection.getErrorStream().getText()
        def parsedJson = slurper.parseText(responseBody)
        assert parsedJson.statusCode == 200
        return parsedJson
    }
}

我必须测试分页,但如何处理和创建分页链接?例如,我有 5 个可选字段:id、createDate、modifiedDate、Name 等。 我正在考虑使用 if/else 语句自己创建链接,但是会有太多变化,我认为这不是正确的方法。 这就是我对一个领域的意思: 添加一个值 - getMethodForCenter(String baseUrl, String endpoint, String name) 然后做一个 if/else 语句:

if(name == null) {
  HttpURLConnection openConnection = new URL(baseUrl + endpoint).openConnection
} else {
  HttpURLConnection openConnection = new URL(baseUrl + endpoint + "?Name=${name}"
}

**编辑:**另一种方法是添加String path并自己传递路径

【问题讨论】:

  • 为什么你使用过于复杂的 java sdk 而不是 groovy 标准 http-builder-ng.github.io/http-builder-ng/asciidoc/html5 来发出请求?
  • 嗯,我找到了这个方法,现在我觉得很舒服。我来看看http builder
  • 但是,如何处理这个问题?分页和过滤器?

标签: java api groovy automation pagination


【解决方案1】:

如果您申请http-builder,您的代码将减少到最低限度,因此您将能够轻松测试所有参数组合。

通常分页由可选的请求参数表示,例如maxoffsetfirst 等。

话虽如此,您的代码可以归结为:

def http = HttpBuilder.configure {
    request.uri = baseUrl + enpoint
    request.headers.Authorization = "Bearer $token"
    request.contentType = 'application/json'
}

def paginationCombos = [ [ 10, 0 ], [ 10, 1], [ 20, 1 ] ] // etc

paginationCombos.each{ pair ->
  def (max, offset) = pair
  def json = http.get {
    request.uri.query = [ max:max, offset:offset ] // here you can add filters
    response.success{ FromServer fs, Object jsonBody ->
        assert jsonBody.statusCode == 200
        jsonBody
    }
  }
}

【讨论】:

  • 感谢您的回答,我会尝试的。另外,我在描述中犯了一个错误。主要问题是“过滤器”。需要过滤的字段太多,变化也太多。
猜你喜欢
  • 2019-03-22
  • 2014-08-03
  • 1970-01-01
  • 1970-01-01
  • 2015-11-11
  • 1970-01-01
  • 1970-01-01
  • 2014-10-14
  • 2020-06-28
相关资源
最近更新 更多