docs: add whl_from_dir to dev guide docs (#3067)

Mentions the whl_from_dir repository rule in our dev guide.
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 8f985c5..e1bd11b 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -234,11 +234,13 @@
 ## Binary artifacts
 
 Checking in binary artifacts is not allowed. This is because they are extremely
-problematic to verify and ensure they're safe
+problematic to verify and ensure they're safe. This is true even in
+test contexts.
 
 Examples include, but aren't limited to: prebuilt binaries, shared libraries,
 zip files, or wheels.
 
+See the dev guide for utilities to help with testing.
 
 (breaking-changes)=
 ## Breaking Changes
diff --git a/docs/devguide.md b/docs/devguide.md
index 345907b..43120bf 100644
--- a/docs/devguide.md
+++ b/docs/devguide.md
@@ -37,6 +37,12 @@
 factored into a more generally reusable piece. Copying and pasting is fine. It's
 more important for tests to balance understandability and maintainability.
 
+### Test utilities
+
+General code to support testing is in {gh-path}`tests/support`. It has a variety
+of functions, constants, rules etc, to make testing easier. Below are some
+common utilities that are frequently used.
+
 ### sh_py_run_test
 
 The {gh-path}`sh_py_run_test <tests/support/sh_py_run_test.bzl` rule is a helper to
@@ -68,6 +74,12 @@
   list, then modify the transition's logic to check the attribute and set
   the flag value if the attribute is set.
 
+### whl_from_dir_repo
+
+The `whl_from_dir_repo` repository rule in {gh-path}`tests/support/whl_from_dir`
+takes a directory tree and turns it into a `.whl` file. This can be used to
+create arbitrary whl files to verify functionality.
+
 ### Integration tests
 
 An integration test is one that runs a separate Bazel instance inside the test.