2017-06-13 53 views
0

希望得到社区关于如何最好地处理恶化情况的建议。处理波动的网站时出现不一致的测试结果

我有一个R package,它刮擦国家飓风中心档案并返回整齐的风暴数据。该网站通常不会回应。

一个例子是this Appveyor failure然后是subsequent pass(同一分支,相同的提交)。

眼下却始终无法在连续四项测试:

构建1.0.141和1.0.143通过第一119个测试。 Build 1.0.142通过了第142次测试。构建1.0.144仅在66次测试后失败。这些错误是一致的:

错误卷曲:: curl_fetch_memory(URL,手柄=手柄):

Timeout was reached 

电话:test_check ... request_fetch - > request_fetch.write_memory - > - > .CALL

我有这么多的测试,因为有几个产品被刮掉有小的差异或错别字。所以,当我修改正则表达式来适应这些差异时,我想确保我不会无意中破坏别的东西。

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

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

你会如何处理这些问题?

回答

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/") 

这种方法将停止从打破基础之上。