Toulouse picked up their first win of the Ligue 1 campaign in sweltering conditions in the south-west of France.
Etienne Capoue put the hosts in front 10 minutes before the break and Wissam Ben Yedder doubled the lead just before the hour mark.
Capoue missed the chance to put it beyond doubt in the 74th minute when his penalty was saved, but Max Gradel's spot-kick was nothing more than consolation for the visitors.
Toulouse began brightly, with Pavle Ninko's long throw finding Daniel Braaten, but Stephane Ruffier was able to hold his header.
They took the lead in the 34th minute when Capuoe met Franck Tabanou's corner with a volley that went low and into the net.
St Etienne enjoyed little attacking joy in the first half, their best chance two minutes before the break, when Banel Nicolita sent a free-kick straight at goal.
Toulouse were quickly on the attack again in the second half, but Ben Yedder's header was kept out by Ruffier, who then also denied Moussa Sissoko who was through one-on-one.
The key second goal came in the 58th minute thanks to great work from Braaten and Tabanou, finding the unmarked Ben Yedder at the far post to turn the ball in.
Kurt Zouma's foul on Emmanuel Riviere gave Toulouse the chance to settle it in the 74th minute, but Ruffier got a firm hand to Capoue's penalty.
Gradel got one back from the spot at the death after Capoue fouled the Ivorian forward.