1. A system comprising: a processor and a memory including a module configured to cause the processor to: execute a test engine that receives a test case for testing software, wherein the test case comprises an abstraction of a testing intent, the testing intent specified by declarative statements that are independent of implementation of the software, the declarative statements specifying at least one of a plurality of actions, wherein the plurality of actions are stored in at least one of a plurality of libraries, wherein actions associated with a first implementation of the software are stored in a first library of the plurality of libraries and actions associated with a second implementation of the software are stored in a second library of the plurality of libraries, so that the test engine tests the first implementation of the software by performing the actions specified by the test case by calling actions in the first library and wherein the test engine tests the second implementation of the software by performing the actions specified by the test case by calling actions in the second library.