I very much recommend that book as well. Much of what I know about Property-based testing I learned from that book.
After finishing it I looked into the implementations of Elixir’s StreamData, Erlang’s PropEr and Haskell’s QuickCheck and Hedgehog to get some of the final details down that are necessary to actually implement your own property-checking library (like how shrinking actually works under the hood. It is amazing ).