Python unit testing for a Stack data structure
There are certainly some good tests here. In a related question for Java, the answer by Phil Wright states:


  Here are some tests I'd perform at the very least. There may be more
  you'd want:
  
  
  Create an empty Stack. Test that its size is 0.
  Push an element onto the stack. Test that its size is now 1.
  Push another element onto the stack. Test that its size is now 2.
  Pop an element from the stack. Test that it matches the 2nd pushed value. Check that the size of the stack is now 1.
  Pop an element from the stack. Test that it matches the 1st pushed value. Check that the size of the stack is 0.
  Attempt to pop an element from the stack. You should receive an ArrayIndexOutOfBounds exception.
  


At a quick glance, you do most (if not all of these tests). So in some sense the coverage is good. 

The amount of testing may be overkill. You have to realize you can't test every possible thing. With that in mind your tests should:


Find current issues with your code.
Nip likely future issues.
Prevent errors you've had in the past from coming back.


The past, present, and future. So for example, your function test_peek_push3_pop1 may have a good reason for being there. Maybe you had designed a stack before and had issues with pushing 3, popping 1, and then peeking. I've never personally had such an issue. It seems like a weird test case I wouldn't consider it, but maybe you have. If you have a compelling reason to have that test you should explain your reasoning in a comment so I can understand the purpose of the test. Ultimately:


  Think and comment WHY you have a test.