I wouldn't ignore those results.
TestMy.net performs its upload test different. Where other speed tests upload many streams TMN uses normal form submission. Much like when you upload normal files to any website like youtube, gmail, facebook, etc. Currently on TestMy.net there is no multithread upload test, when you enable multithread it's only for the download.
I've been developing a new version, which multithreads, graphs the result live and tests latency under load. If you'd like to be the first to test it visit the following thread.
Vote or reply on that topic and you'll be invited when it's released.
Comparing the current upload test to the new multithread test will be important for my users to understand their connections. Personally in regards to upload I score nearly identical on both tests. But in many cases when there's an issue you can see the multithread way out perform single thread. This is because although single threads are slowed down, when they're combined you may get full speed. But knowing just the aggregate alone doesn't really help, especially if you're trying to understand how much data your connection can reliably stream. And especially if you're troubleshooting.
You're in TX pretty much on top of the servers in Dallas, there are currently 18 test servers in Dallas. That's the best selection for you but I'd still test against the other United States locales. It's a good practice to compare against other routes to show that the issue you're displaying isn't localized to one route. https://testmy.net/mirror
If your connection was 20 Mbps for real, TestMy.net will tell you it's 20 Mbps. I personally don't feel like it's 20 Mbps unless it can save me time and upload a single file at 20 Mbps or stream video at 2.5 MB/s.
My results can be confirmed easily. Get your stopwatch app ready, go upload a large file (100 MB+) to Google Drive (or anywhere). Start the time when you click to initiate the upload and click stop as soon as it's finished. Formula is size in MB / Time. e.g. w/ 100 MB file taking 50 seconds 100 / 50 = 2 MB/s -- to convert to Mbps just *8, so 16 Mbps.
It can also be that your connection, once it's moving, gets up to 20 Mbps. But it may have a large delay in the beginning (for instance). Other speed tests don't count this, they're most often just trying to achieve the best (highest) result. TestMy.net counts EVERYTHING. If it wastes my test's time then it will waste your time in the real world.
I see you're still testing on a regular basis, so you must feel that what TMN is telling you is important. TestMy.net doesn't always show my users what they want to see, it's programmed to show them what they need to see. At least, that's my goal.
Sorry I was slow to respond on your topic. A lot of irons on the fire and I wanted to take the time to properly respond.