Well, everyone might put their own meaning to the terms mentioned by you, but as it seems to me what you have listed is ranged by the product awareness: 1. **Customer support engineer** is usually a kind of operational engineer who knows how to use the system. Hence they might perform support tasks: some maintenance or managing the users, or accessing the database directly to investigate what could cause the issue. 2. **Customer's test engineer** is an engineer that is hired on customer side. They have the expertise in test and they perform acceptance testing (not the same as User Acceptance Testing). They have to have more technical skills that support engineers have and they have to know the system better. But still not so good since they are outside the development process.For example, customer's test engineers might test how well the system can be installed in customer's infrastructure. Vendor's test engineers cannot do that effectively due to access limitations. 3. **Onsite test engineers** are the test engineers which are hired by the software vendor, but physically work in customer's office. They are inside development process so that they have the deepest awareness of the product. They also have testing expertise but normally having such kind of engineers is more expensive than having own engineers.