Different testing companies use different algorithms, which are always being refined. The results are only as accurate in reporting as the database of people who have contributed to it. As more people test, the database grows, with the ability to show more detailed population groups.
Many people confuse ancestry, nationality, and ethnicity. They are quite different. 23andMe reports where your ancestors lived within the past 500 years. It is not what your nationality or ethnicity is because those are socio-political constructs... borders change all the time. A free service, Gedcom (you upload your raw genetic data from one of the companies to Gedcom), drills deeper and shows more ancient ancestry, as far back as 1,000+ years. Ancestry.com lays more emphasis on genealogy.
23andMe, the company I tested with shows my ancestry as:
European 90.5%
Italian 78.6%
Greek & Balkan 4.2%
Spanish & Portuguese 0.3%
Broadly Southern European 7.4%
Western Asian & North African 7.3%
Western Asian 6.6%
The missing percentages are "unassigned". That is, there aren't enough people in the database yet to match some of my DNA with. The same principle applies to the numbers from Gedcom.
Gedcom goes further back:
North Atlantic 20.52%
Baltic 6.74%
West Med 21.62%
West Asian 12.74%
East Med 30.66%
So why does 23andMe show no North Atlantic or Baltic, and generally report different categories from Gedcom? Because Italy (especially Sicily and southern Italy), for example, was invaded and/or settled by Greeks, Normans, Vandals, Vikings and others from northern Europe, starting with the Vandals in the 5th century CE, to the Vikings and Normans beginning in the 10th century, with Greeks going back >2,000 years ago. Those are the groups that are the genetic make up of southern Italians.