devtools::test() 并行?
devtools::test() in parallel?
我有一个使用 testthat
的测试套件,其中包含 R/tests
中的多个文件,我想并行测试它们以加快测试速度。 devtools
、testthat
或其他地方是否有实现此目的的方法?
我尝试使用 future
包“手动”执行此操作,但 stdout
的文本呈现不可读:
# Get a vector of test files without "test-" and ".R"
test_files = list.files("tests/testthat", "test-")
test_filters = stringr::str_replace_all(test_files, c("test-|\.R"), "")
# Run test for each file in parallel
future::plan(future::multiprocess)
future.apply::future_mapply(devtools::test, filter = test_filters)
根据 RUnit
的长期用户最近切换到 tinytest
的警告,您正在寻找的功能已经存在于 tinytest
中。我认为有人已经或可能会在某个时候为 testthat
构建一个并行测试 运行ner,但在 'here and now' 中我们确实有 tinytest
具有非常好的行为,很好从 RUnit
或 testthat
.
转换的文档和线索
我最喜欢 tinytest
的功能是包中默认安装测试、缺少其他依赖项和并行 运行ner。
还有一个警告:与 R 提示符相比,我更喜欢这个 的命令行 因为可能总会有某种形式的副作用。所以我加了一点测试 运行ner wrappre tt.r to littler:
edd@rob:~$ tt.r -h
Usage: tt.r [-h] [-x] [-a] [-b] [-d] [-f] [-n NCPUS] [-p] [-s] [-z] [ARG...]
-a --all use test_all mode [default: FALSE]
-b --build use build-install-test mode [default: FALSE]
-d --directory use directory mode [default: FALSE]
-f --file use file mode [default: FALSE]
-n --ncpus NCPUS use 'ncpus' in parallel [default: getOption]
-p --package use package mode [default: FALSE]
-s --silent use silent and do not print result [default: FALSE]
-z --effects suppress side effects [default: FALSE]
-h --help show this help text
-x --usage show help and short example usage
edd@rob:~$
(我应该在这里补充一点,由于 docopt
,编写这样的包装器很容易。)
然后我们简单地做
edd@rob:~$ tt.r -n 4 -p anytime
starting worker pid=642068 on localhost:11092 at 17:11:25.636
starting worker pid=642067 on localhost:11092 at 17:11:25.654
starting worker pid=642065 on localhost:11092 at 17:11:25.687
starting worker pid=642066 on localhost:11092 at 17:11:25.689
Running test_gh_issue_12.R............ 2 tests OK
Running test_gh_issue_56.R............ 7 tests OK
Running test_gh_issue_33.R............ 2 tests OK
Running test_all_formats.R............ 0 tests ris or Windows or Release
Running test_assertions.R............. 2 tests OK
Running test_calc_unique.R............ 4 tests OK
Running test_gh_issue_100.R........... 2 tests OK
Running test_simple.R................. 34 tests OK
Running test_utilities.R.............. 2 tests OK
Running test_bulk.R................... 2328 tests OK
[1] "All ok, 2383 results"
edd@rob:~$
你看到有一点输出被吞没了。
你当然也可以 运行 手工从 R:
R> tinytest::test_package("anytime", ncpu=4)
starting worker pid=651865 on localhost:11762 at 17:14:45.970
starting worker pid=651864 on localhost:11762 at 17:14:45.980
starting worker pid=651863 on localhost:11762 at 17:14:45.980
starting worker pid=651862 on localhost:11762 at 17:14:45.984
Running test_gh_issue_12.R............ 2 tests
Exited 'test_all_formats.R' at line 24. Skipping Solaris or Windows or ReleaseOK
Running test_all_formats.R............ 0 tests
Running test_gh_issue_56.R............ 7 tests OK
Running test_assertions.R............. 2 tests OK
Running test_gh_issue_33.R............ 2 tests OK
Running test_calc_unique.R............ 4 tests OK
Running test_gh_issue_100.R........... 2 tests OK
Running test_simple.R................. 34 tests OK
Running test_utilities.R.............. 2 tests OK
Running test_bulk.R................... 2328 tests OK
[1] "All ok, 2383 results"
R>
文件、目录、构建+安装+测试周期等还有其他运行程序。嘿,如果在这一切之后你仍然不喜欢它,马克会把钱还给你:)
PS 在这里和例如 Rcpp
我有一些测试“变暗”,因为它们会产生大量的 cmdline 噪音,所以只有在设置了 opt-in var 时才会在包测试中发生.因此上面的几个'zero tests run'。这是我的设置,不是 tinytest
问题。
我有一个使用 testthat
的测试套件,其中包含 R/tests
中的多个文件,我想并行测试它们以加快测试速度。 devtools
、testthat
或其他地方是否有实现此目的的方法?
我尝试使用 future
包“手动”执行此操作,但 stdout
的文本呈现不可读:
# Get a vector of test files without "test-" and ".R"
test_files = list.files("tests/testthat", "test-")
test_filters = stringr::str_replace_all(test_files, c("test-|\.R"), "")
# Run test for each file in parallel
future::plan(future::multiprocess)
future.apply::future_mapply(devtools::test, filter = test_filters)
根据 RUnit
的长期用户最近切换到 tinytest
的警告,您正在寻找的功能已经存在于 tinytest
中。我认为有人已经或可能会在某个时候为 testthat
构建一个并行测试 运行ner,但在 'here and now' 中我们确实有 tinytest
具有非常好的行为,很好从 RUnit
或 testthat
.
我最喜欢 tinytest
的功能是包中默认安装测试、缺少其他依赖项和并行 运行ner。
还有一个警告:与 R 提示符相比,我更喜欢这个 的命令行 因为可能总会有某种形式的副作用。所以我加了一点测试 运行ner wrappre tt.r to littler:
edd@rob:~$ tt.r -h
Usage: tt.r [-h] [-x] [-a] [-b] [-d] [-f] [-n NCPUS] [-p] [-s] [-z] [ARG...]
-a --all use test_all mode [default: FALSE]
-b --build use build-install-test mode [default: FALSE]
-d --directory use directory mode [default: FALSE]
-f --file use file mode [default: FALSE]
-n --ncpus NCPUS use 'ncpus' in parallel [default: getOption]
-p --package use package mode [default: FALSE]
-s --silent use silent and do not print result [default: FALSE]
-z --effects suppress side effects [default: FALSE]
-h --help show this help text
-x --usage show help and short example usage
edd@rob:~$
(我应该在这里补充一点,由于 docopt
,编写这样的包装器很容易。)
然后我们简单地做
edd@rob:~$ tt.r -n 4 -p anytime
starting worker pid=642068 on localhost:11092 at 17:11:25.636
starting worker pid=642067 on localhost:11092 at 17:11:25.654
starting worker pid=642065 on localhost:11092 at 17:11:25.687
starting worker pid=642066 on localhost:11092 at 17:11:25.689
Running test_gh_issue_12.R............ 2 tests OK
Running test_gh_issue_56.R............ 7 tests OK
Running test_gh_issue_33.R............ 2 tests OK
Running test_all_formats.R............ 0 tests ris or Windows or Release
Running test_assertions.R............. 2 tests OK
Running test_calc_unique.R............ 4 tests OK
Running test_gh_issue_100.R........... 2 tests OK
Running test_simple.R................. 34 tests OK
Running test_utilities.R.............. 2 tests OK
Running test_bulk.R................... 2328 tests OK
[1] "All ok, 2383 results"
edd@rob:~$
你看到有一点输出被吞没了。
你当然也可以 运行 手工从 R:
R> tinytest::test_package("anytime", ncpu=4)
starting worker pid=651865 on localhost:11762 at 17:14:45.970
starting worker pid=651864 on localhost:11762 at 17:14:45.980
starting worker pid=651863 on localhost:11762 at 17:14:45.980
starting worker pid=651862 on localhost:11762 at 17:14:45.984
Running test_gh_issue_12.R............ 2 tests
Exited 'test_all_formats.R' at line 24. Skipping Solaris or Windows or ReleaseOK
Running test_all_formats.R............ 0 tests
Running test_gh_issue_56.R............ 7 tests OK
Running test_assertions.R............. 2 tests OK
Running test_gh_issue_33.R............ 2 tests OK
Running test_calc_unique.R............ 4 tests OK
Running test_gh_issue_100.R........... 2 tests OK
Running test_simple.R................. 34 tests OK
Running test_utilities.R.............. 2 tests OK
Running test_bulk.R................... 2328 tests OK
[1] "All ok, 2383 results"
R>
文件、目录、构建+安装+测试周期等还有其他运行程序。嘿,如果在这一切之后你仍然不喜欢它,马克会把钱还给你:)
PS 在这里和例如 Rcpp
我有一些测试“变暗”,因为它们会产生大量的 cmdline 噪音,所以只有在设置了 opt-in var 时才会在包测试中发生.因此上面的几个'zero tests run'。这是我的设置,不是 tinytest
问题。