I've found this site useful for creating a word list of errors to practice on:
It isn't perfect. For example, as you hit the space between words, the word you just type disappears so you might not see what you missed in time. You can back space to previous words, but in this situation, that isn't ideal. And the words are random rather than sentences. Finally, they seem to just be common words, not more challenging ones or symbols or numbers. But still, for finding letters that give you trouble, it is pretty good because at the end of the test, they give you a list of that words you misspelled and how you misspelled them. So I take those and put them in a text file to practice later.
Another one, actually linked from the one above, is:
This focuses on dvorak though I suppose you can set it to whatever you want. The only benefit of this over the first is that it gives much harder words (though still no symbols or numbers). Weird words, like "asterisking" or "hifalutin"! And the words are relatively long rather than the average of 5 characters including spaces. But it is bad for scoring. Rather than a timed test, you do 100 of these long words. It won't let you go past a misspelled word either. As soon as you hit space, if there is an error, it starts the word over. So you have to pay attention to where the screen shows you are. But the worst thing is, when you get to the end, you get almost no useful feedback. You don't know how many letters you typed with these 100 long words. You don't know your wpm. You only get a vague time like, "You took about 5 minutes".
So it's only real benefit is to learn to handle odd words more easily. Still, that can be useful practice.
I use a bunch of different online typing programs. Just can't find one that does everything I want. Wish I could create one myself. It would let me set how long I want the test. Select whether I just want letters (with or without uppercase included) or include basic symbols (comma, quotes, apostrophes, periods, question marks, exclamation points) or less common ones as well. It would let me choose whether to force corrections or not. It would let me see the last 2-3 words I typed so if an error is made, I could still see it. It would give total characters typed, wpm based on the standard 5 characters, a list of misspelled words and how I typed them - maybe structured I could select just the words, spelled correctly, and let me copy and paste them as a group into a text file. Or even same them within the test so it could access them for later tests to better focus on specific problems. If it also kept track of how many times you missed certain words, it could give you those more often. Over time, it would track that some words are less of a problem and so give those to you less often.