Scotland took a second win in two warm-up matches with a better display than in their ragged win over Ireland two weeks before. Defensive lapses were punished by Italy but Andy Robinson had plenty of positives to take into the Pool B opener against Romania on 10 September.
Nick De Luca and Max Evans performed well in the backs, the scrum-half Chris Cusiter returned and Euan Murray steadied a pack which had been tormented by Martin Castrogiovanni and Andrea Lo Cicero.
Dan Parks opened the scoring with a penalty, then Evans went on a run before sending the prop Alasdair Dickinson in for a try. Italy's Sergio Parisse then broke off a scrum in his own 22 and the ball was worked to Tommaso Benvenuti, who evaded Rory Lamont to score. Mirco Bergamasco converted, but Parks then kicked his second penalty.
In the second half Italy moved within a point with a try by the scrum-half Fabio Semenzato, before Mike Blair charged down a kick and scored. Parks converted and kicked another penalty. But Scotland's substitute wing Nikki Walker was taken off on a stretcher with a knee injury.
Robinson said he knew his World Cup squad. "The final decision will be made tonight and based on the injury report from Nikki Walker," he said. "It's really disappointing for him that he's got the injury but we are hopeful that it is not as bad as maybe first thought. Nikki is the only [injury] concern I have."
Scotland R Lamont (Toulon); M Evans (Castres), N De Luca (Edinburgh), G Morrison (Glasgow), S Danielli (Ulster); D Parks (Cardiff Blues), M Blair (Edinburgh); A Dickinson (Sale), S Lawson (Gloucester), M Low (Glasgow), N Hines (Clermont Auvergne), A Kellock (Glasgow, capt), K Brown (Saracens), R Vernon (Sale), J Barclay (Glasgow). Replacements E Murray (Newcastle) for Low, 54; N Walker (Ospreys) for Danielli, 55; C Cusiter (Glasgow) for Blair, 61; R Gray (Glasgow) for Hines, 61; R Jackson (Glasgow) for Parks, 61; D Hall (Glasgow) for Lawson, 70; R Rennie (Edinburgh) for Vernon, 74.
Italy A Masi (Aironi); T Benvenuti (Treviso), G Canale (Clermont), G Garcia (Treviso), M Bergamasco (Racing Metro); L Orquera (Aironi), F Semenzato (Treviso); A Lo Cicero (Racing), F Ongaro (Treviso), M Castrogiovanni (Leicester), C Del Fava (Aironi), C van Zyl, P Derbyshire (both Treviso), S Parisse (Stade Français, capt), R Barbieri (Treviso). Replacements T D'Apice (Aironi) for Ongaro, 40; J Furno (Aironi) for Del Fava, 51; R Bocchino (Cavalieri Prato) for Orquera, 56; A Zanni (Treviso) for Derbyshire, 62; L Cittadini (Treviso) for Lo Cicero, 71; E Gori (Treviso) for Canale, 76.
Referee D Pearson (England).