1. A system, comprising: one or more computer processors; and system memory storing program instructions, wherein the system memory is coupled to at least one of the one or more computer processors, and when executed by the at least one of the one or more computer processors, the program instructions cause the one or more computer processors to: monitor a plurality of interactions among a first set of services in a production environment, wherein the first set of services comprises a first set of program code; determine a first set of call graphs based on the plurality of interactions among the first set of services in the production environment, wherein the first set of call graphs comprises a plurality of call paths between individual ones of the first set of services in the production environment; determine code coverage data indicating an amount of the first set of program code executed by the first set of services in generating the first set of call graphs; monitor a second plurality of interactions among a second set of services in a test environment, wherein the second set of services are based, at least in part, on the first set of services; determine a second set of call graphs based on the second plurality of interactions among the second set of services in the test environment, wherein the second set of call graphs comprises a second plurality of call paths between individual ones of the second set of services in the test environment; perform a comparison between the second set of call graphs and the first set of call graphs; determine a test coverage metric based on the comparison, wherein the test coverage metric indicates a percentage of the call paths in the first set of call graphs that have corresponding call paths in the second set of call graphs; and generate a code coverage report comprising the test coverage metric and the code coverage data indicating the amount of the first set of program code executed in generating the first set of call graphs.