Try putting the SmartDashboard.putString() into teleopPeriodic() instead. When you run the robot in test() mode (which is what testPeriodic() is for), the SmartDashboard shows a different display...the LiveWindow display. For more on that,
see here. Again, try putting a simple call to SmartDashboard in teleopPeriodic() and I think that you will be fine.
Also, we use SmartDashboard method calls without the NetworkTable code that you have and it works. I believe that the SmartDashboard method actually uses the NetworkTable to send the info across (it puts it into a SmartDashboard-specific data table, I believe...I'm not sure and should go look that up now).