1. A method comprising: receiving, by a computing device, a plurality of application blueprints for a plurality of versions of an application, wherein each application blueprint for each version of the application includes at least one different feature; selecting, by the computing device, one of the versions of the application for testing; loading, by the computing device, the application blueprint for the first version of the application, the application blueprint defining a first set of features supported by the first version of the application; loading, by the computing device, the first set of features and a first set of interfaces for the features, wherein interfaces in the first set of interfaces describe what a corresponding feature does; building, by the computing device, the application model by connecting the first set of interfaces to the first set of features at runtime when a test is to be executed, wherein features in the first set of features loosely define dependencies without pre-defining which feature satisfies the dependency, and wherein, at runtime, the application blueprint inserts which feature satisfies the dependency for features in the first set of features to dynamically generate the dependencies; connecting, by the computing device, the application model to the version of the application and a test case for the version of the application; and testing, by the computing device, the version of the application by executing a test case against the application model, wherein the first set of interfaces are used to test the first set of features of the version of the application.