非常感谢社区就如何最好地处理加重情况提出建议。
我有一个R package可以掠夺国家飓风中心的档案并返回整洁的风暴数据。该网站通常不回应。
这方面的一个例子是this Appveyor failure,然后是subsequent 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
我有很多测试,因为在几个被刮的产品中存在轻微的差异或拼写错误。因此,当我修改正则表达式模式以适应这些差异时,我想确保我不会无意中破坏其他内容。
我添加了多次尝试的选项,请求和超时选项之间的延迟。不幸的是,如果有的话,他们似乎没有多大帮助。
我向社区提出的问题:您能否提供建议或建议作为处理这种情况的更好方法?我知道将测试与生产环境隔离是不好的形式。但是我并不需要对整个包装进行所有这些测试。
你会如何处理这些问题?
答案 0 :(得分:0)
如果您在超时时偶尔跳过测试就可以了,那么如果响应表明存在超时,我会像here和skip 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/")
这种方法可以阻止构建中断。