I'm not sure from your explanation whether or not you are running these queries in the same window or in separate windows. If they are in the same window, the first operation is always completed before the second begins. But even if they are runnin in different windows, you are likely to see this behavior. That is due to lock escalation.
If an operation generates too many locks at the same level, by default it will escalate the locks. It does this because each lock takes some memory and too many of them eat up all your memory.
So when your first query starts running, each row inserted from tableA gets an exclusive row level lock in TestTable. But rapidly there are lots of these locks created. Very quickly, you exceed the escalation level and SQL changes the locks to an exclusive TABLE lock on TestTable. Now SQL no longer needs all those row level locks and that relieves a lot of memory pressure on the system.
But now the first process has a table lock on TestTable, so the second process is blocked until the first process finishes.
You can turn this behavior off. To do this run
Alter Table dbo.Testtable SET (LOCK_ESCALATION = DISABLE)
Now both processes can continue to insert rows at the same time. However, depending on what else is going on in your system, how much memory you have, etc, disabling lock escalation can slow your system significantly.
If you do disable lock escalation, it will remain off for that table until you turn it back on with
Alter Table dbo.testtable SET (LOCK_ESCALATION = AUTO)
Tom