The first three batters in the Diamondbacks' lineup accounted for eight of the team's 11 hits and scored five runs.
Max Scherzer (5-4) won his third consecutive start by yielding two runs on seven hits and striking out seven in six innings.
Matt Harrison (4-5) took the loss after being roughed up for seven runs on seven hits in a 2 2/3-inning start. The loss equaled a season-high five-game losing streak for the Rangers.
Upton started things with a two-run homer in the first inning. The Diamondbacks added two more in the second on Lopez's bases-loaded single.
Texas chipped away with single runs in the third and fourth innings on RBI hits by Ian Kinsler and Marlon Byrd, but Arizona broke the inter-league game open with three in the bottom of the fourth. Lopez and Stephen Drew notched RBI singles in the uprising and Upton capped it with a run-scoring double.
"After four innings we were down 7-2, we had to play catch up all night, so we just didn't have it," conceded Rangers Manager Ron Washington.
Lopez scored the final run of the game in the eighth on a throwing error by Jarrod Saltalamacchia.