vc tem o seguinte cenario
Sistema1 (invoca metodo via SOAP + …)----> Sistema2
Imagino os seguintes testes
- Teste de código, isolando os sistemas, nos dois sistemas
- Teste funcional no Sistema2 com um client de teste invocando todos os metodos e fazendo Coverage no Sistema2
- Teste funcional no Sistema1 simulando o Sistema2 em todos os metodos e todas as respostas possiveis (incluindo mensagens de erro, etc).
- Teste de integração full onde os sistemas efetivamente se falam.
- Teste de carga (baseado no 4) durante a noite para ver comportamentos do sistema, memória, load da maquina, numero de file descriptors abertos, etc.
Imagine que o Teste 4 quebrou. Onde esta o problema? Provavelmente os testes 2 e 3 devem responder. Para este BUG vc adiciona um teste unitario no passo 1, pois vc não identificou este problema.
Faça muitas combinações. E meça os tempos de forma a identificar perda de performance a cada commit ou release, importante para identificar algum problema sério no futuro (mas não seja xiita, um bom teste com uma boa estatistica durante um bom tempo - tipo 5 - pode te dar esta informação mais detalhada).
Dessa forma vc tem controle do seu sistema e sabe qual a capacidade máxima, sabe como ele escala, sabe quando precisará comprar mais maquinas ou fazer algum refactoring E não é pego de calças na mão.
Importante falar sobre os testes unitarios: facá uso de mocks e de alguma framework de BDD, se possivel use linguagem natural mapeada para testes como usando FIT e/ou Cucumber (é ruby, mas se vc pesquisar um pouco vai saber tirar proveito da parada). Eu pensaria em integração continua com 1 (obrigatorio) e 2,3 se não atrasar muito (ou use alguma forma de paralelizar os testes, rode em varias maquinas ou varias threads, etc).