Andrew Strauss (100), Alastair Cook (52) and Jonathan Trott (50) all retired before Kevin Pietersen was dismissed for 71 as England reached stumps on day one of the two-day game on 317 for five.
Strauss and Cook added 101 for the first wicket before Cook, who scored 81 in the first match against the same opposition, retired at lunch and Strauss went on to reach three figures before returning to the dressing room.
Trott overcame a slow start to reach 50 in 135 balls before he too stepped down but Pietersen, who had already reached his half-century, continued, and his 71 came in 101 deliveries with 12 fours before he was caught.
Ian Bell made just eight before he was the only other England batsman to be genuinely dismissed which left Matthew Prior, who made 19, and Luke Wright, who hit one, to reach stumps with England five down.
The first of four Tests against South Africa begins on 16th December at Centurion Park and the match is being seen as a final chance for fast bowlers James Anderson and Ryan Sidebottom to prove their fitness after suffering with knee and side injuries respectively.
Graham Onions, Mark Davies and Paul Collingwood sit the game out as Wright, Anderson and Sidebottom play.