I have used a simple setup to do this. It uses the same principle as crystal resistance meters.
Take a signal generator and pad it down to give about a 1 ohm source resistance. From this source, put the signal thru a crystal in
series and then a 20 ohm resistor to ground. Tune the generator freq for MAXIMUM voltage on the 20 ohm resistor. This will be very very very sharp. Then substitute a resistor for the crystal to give the same voltage reading. The resistor value that gives the same reading as the crystal did is equal to the crystal esr.
You really need a tuneable generator with a good vernier to do this, but it works.
The reason I chose a 20 ohm resistor was because this was a ball park value of what I expect a 20Mhz crystal esr to be.
The reason I padded the generator down to 1 ohm was becaues I didn't want any interaction with the generator output impedance, and I had a lot of signal to work with anyway......it just seemed like a good idea at the time.
I used a spectrum analyzer across the 20 ohm resistor as a detector, cause it was handy, and plenty sensitive for the padded down generator signal. A Booton RF meter would work well with good sensitivity, also. Actually, since I was using a substitution method, almost anything would work..
Since I used the substitution method, all of the extraneous variables and impedance mismatches cancel out.......