End-to-end integration tests quickly become complex and difficult to maintain. Contract testing simplifies this problem by focussing only on the communication between applications.
In contract testing, a contract describes the messaging between applications (eg. HTTP requests and responses, or messages sent via a queue). This means that each application is able to be tested independently, significantly improving development workflow and testing time.
Pact further improves this workflow by allowing users to implement consumer-driven contracts. This means that only the parts of an API that are actually used by each consumer are included in the contract, allowing the API provider to extend or modify unused parts of the API without failing tests.
You can read all about Pact at pact.io