【问题标题】:Handling inconsistent test results when scraping a fluctuating website抓取波动的网站时处理不一致的测试结果
【发布时间】:2017-07-09 09:09:16
【问题描述】:

希望社区提供有关如何最好地处理加重情况的建议。

我有一个R package,它会抓取国家飓风中心的档案并返回整齐的风暴数据。网站经常没有反应。

this Appveyor failuresubsequent pass 就是一个例子(相同的分支,相同的提交)。

现在连续四次测试都失败了:

内部版本 1.0.141 和 1.0.143 通过了前 119 次测试。 Build 1.0.142 通过了前 142 个测试。构建 1.0.144 仅在 66 次测试后失败。错误是一致的:

curl::curl_fetch_memory(url, handle = handle) 中的错误:

Timeout was reached

调用:test_check ... request_fetch -> request_fetch.write_memory -> -> .Call

我有这么多的测试,因为在一些被刮掉的产品中存在细微的差异或拼写错误。因此,当我修改正则表达式模式以适应这些差异时,我想确保我不会无意中破坏其他东西。

我为多次尝试、请求之间的延迟和超时选项添加了选项。不幸的是,他们似乎没有太大帮助,如果有的话。

我向社区提出的问题:您能否提供建议或建议作为处理这种情况的更好方法?我知道将测试与生产环境隔离是一种不好的形式。但我不需要对整个包进行所有这些测试。

您将如何处理这些问题?

【问题讨论】:

    标签: r rvest testthat


    【解决方案1】:

    如果您可以在超时时偶尔跳过测试,那么我会像hereskip the test 那样捕获超时,如果响应表明存在超时。就像是:

    safe_GET <- purrr::safely(httr::GET)
    
    skip_if_cant_get <- function(url) {
      resp <- safe_GET(url)
    
      if (is.null(resp$result)) {
        testthat::skip(paste0("Couldn't get ", url, " for testing"))
      }
    
      resp
    }
    
    resp <- skip_if_cant_get("http://www.nhc.noaa.gov/archive/1998/1998archive.shtml")
    httr::http_status(resp$result)
    #> $category
    #> [1] "Success"
    #> 
    #> $reason
    #> [1] "OK"
    #> 
    #> $message
    #> [1] "Success: (200) OK"
    
    # The timeout on this one will trigger the skip()
    # resp <- skip_if_cant_get("http://deadbeefdeadbeef.org/")
    

    这种方法将阻止构建中断。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-25
      • 2021-11-20
      • 1970-01-01
      • 1970-01-01
      • 2013-05-13
      • 2016-12-22
      • 1970-01-01
      • 2016-10-09
      相关资源
      最近更新 更多