Attack and Defense greatly affect damage.
There is an equation used by the game, but it never reveals exactly what that formula is. However, after lots of testing I believe we've finally figured out what that formula is. You can see how it was done on Reddit here!
Damage = Floor(0.5 * (Attack / Defense) * (CpM_Atk / CpM_Def) * STAB * Type * Power) + 1
- Floor(...) : This is a math function were the result is always rounded down.
- Attack : This is the total attack stat of the attacker (base attack + attack IV).
- Defense : This is the total defense stat of the defender (base defense + defense IV).
- CpM_Atk : This is the CP_Multiplier based on the level of the attacker.
- CpM_Def : This is the CP_Multiplier based on the level of the defender.
- STAB : This is the Same-Type Attack Bonus, which is equal to 1.25. It is only applied if the type of the attack move is the same as one of the attacker's types.
- Type : This is the type effectiveness of the attack, which can be either 0.64, 0.8, 1.0, 1.25, or 1.5625, depending on whether the attack is "super effective" or "not very effective".
- Power : This is the base power of the move used by the attacker.
Note: Testing has determined that critical damage is not currently implemented in Pokemon GO, so it is not included in the formula.
Note: Some versions of the formula do not have "CpM_Atk / CpM_Def". This means that those numbers were already factored into "Attack / Defense". I choose to separate these so that it is more clear how a pokemon's level affects damage.
Extra Information
The base Attack and Defense stats for all pokemon: here.
The CP_Multiplier for each pokemon level: here.
The type effectiveness for all 18 types: here
Information about what IV's are: here.
Example #1
Attack = 100
Defense = 50
CpM_Atk = 0.7317 (level 30)
CpM_Def = 0.5974 (level 20)
STAB = 1.25
Effectiveness = 1.25
Power = 25
Damage = Floor(0.5 * (100 / 50) * (0.7317 / 0.5974) * 1.25 * 1.25 * 25) + 1
Damage = Floor(0.5 * (2) * (1.2248) * 1.5625 * 25) + 1
Damage = Floor(1.9138 * 25) + 1
Damage = Floor(47.845) + 1
Damage = 47 + 1
Damage = 48
Example #2
Now for a real example, and I will go into much more detail this time. Let's say a level 20 Venusaur attacks level 20 Bulbasaur with Razor Leaf. Let's also assume Venusaur's IV's are all 12, and Bulbasaur's IV's are all 9.
Attack = 210
Venusaur's base attack stat is 198. Its Attack IV is 12, so we add those together to have a combined attack stat of 210 (198 + 12).
Defense = 135
Bulbasaur's base defense stat is 126. Its Defense IV is 9, so we add those together to have a combined defense stat of 135 (126 + 9).
CpM_Atk = 0.5974
Venusaur is level 20, and the CP_Multiplier for that level is 0.5974.
CpM_Def = 0.5974
Bulbasaur is level 20, and the CP_Multiplier for that level is 0.5974.
STAB = 1.25
Venusaur is a Grass/Poison type pokemon. Razor Leaf is a Grass type attack. Since the attack type matches one of Venusaur's types, the attack deals bonus damage.
Type = 0.64
Vine Whip is a Grass type attack being used against a Grass/Poison type pokemon.
Grass type attacks are not very effective against Grass type pokemon (x0.8).
They are also not very effective against Poison type pokemon (x0.8).
These two damage multipliers combine to make the attack double ineffective. 0.8 * 0.8 = 0.64.
Power = 15
The base damage for Razor Leaf is 15.
Damage = Floor(0.5 * (210/135) * (0.5974 / 0.5974) * 1.25 * 0.64 * 15) + 1
Damage = Floor(0.5 * (1.5556) * (1) * 0.8 * 15) + 1
Damage = Floor(0.6222 * 15) + 1
Damage = Floor(9.333) + 1
Damage = 9 + 1
Damage = 10
Example #3
Now let's do the reverse of the above: Bulbasaur attacks Venusaur with Razor Leaf.
Attack = 135 (126 + 9)
Defense = 212 (200 + 12)
CpM_Atk = 0.5974 (level 20)
CpM_Def = 0.5974 (level 20)
STAB = 1.25
Type = 0.64
Power = 15
Damage = Floor(0.5 * (135 / 212) * (0.5974 / 0.5974) * 1.25 * 0.64 * 15) + 1
Damage = Floor(0.5 * (0.6368) * (1) * 0.8 * 15) + 1
Damage = Floor(0.2547 * 15) + 1
Damage = Floor(3.8205) + 1
Damage = 3 + 1
Damage = 4
Summary
Example 1 showed how both attack/defense and level affect damage.
Example 2 & 3 showed that when pokemon are the same level, attack and defense play a large role in damage. Venusaur did 10 damage to Bulbasaur with Razor Leaf, while Bulbasaur only did 4 damage with the same attack.
The formula also shows why Magikarp deals damage even though Splash has a base damage of 0. One damage is always added onto the end of every attack.
It depends on how far into the game you are. Up until level 24 or so usually you only care about CP and if the CP are similar then the movesets. Once you get into the medium to high 20's that is when things start to get more interesting.
Outside of just movesets and CP there are also IVs (Individual Variables) to keep track of. A Pokemon's IV determines its maximum CP, CP per level, and health. However as long as the IV difference isn't too large, I believe moveset takes priority over IVs because it is more than enough to make up for the CP/HP difference a lot of the times. Another reason why at this point in the game you care a lot more about IVs is because you have a lot more stardust and can finally justify spending them.
Think of good IV pokemon as a long term investment while high CP pokemon as short term. It's really important to balance out the two. And if you follow the moveset chart you are good to go. Keep in mind that movesets are random after evolving so if you find a pre-evolved pokemon you only want to look at CP/IV because IV's are the same after evolution. Weight/size do not matter at all compared to these other statistics.
Best movesets for each pokemon can be found here.
IV calculator can be found here.
Best Answer
Considering how small the difference is here, any effect will be barely noticeable...
...which is not going to stop me doing the maths.
The damage formula was discussed in this answer. It looks complicated but the bit we need is that incoming damage is proportional to 1/defense.
The hp formula I found here was a lot simpler than expected. The important part is that it's proportional to stamina.
Defense and stamina do basically the same thing- they increase the amount of incoming damage you can take without fainting. As mentioned above, damage taken is proportional to 1/defense. This means that virtual hp is proportional to defense*stamina.
IVs are added to base stats to get the total stats. Yes, they matter this little.
So, for the above:
The Metagross with higher stamina is 0.19% tougher. An unbelievably tiny amount.
In general, this shows that when dealing with defense vs stamina, higher IVs in your lower stat have a more noticeable effect.
The same is true of attack, but choosing attack over defense or stamina may be more situational.