Can I use smaller p-value from T-test and U-test? I want to compare two independent samples (from A/B test). T-test is most sensitive for normally distributed data (and will give smaller p-value than U-test if there is a real shift in mean value). But T-test performs poorly when there are large outliers: it would give high p-values. And here U-test is much better. So in practice one should look at data, decide how normal are the values and whether the outliers would be a problem. And then choose which test to use.
But if T-test would give smaller p-values for normally distributed data, while U-test for other. can I make a decision about how normal are the data by comparision p-values of T-test and U-test?
And finally  I just calculate p-values from both tests and pick the smallest without looking at data. If they are normally distributed, than T-test would give the smaller p-value (which is good), in other case the U-test will give the smaller p-value (which is again good). So sounds like a universal approach. Is it a good idea? Why haven't I head that solution as a best practice for those who wants best results without digging into data?
I've tested this idea by generating random data with different distributions and for all examples I've made the combined test was correct. So if you state it is wrong approach please help with counterexample.
 A: There is no such thing as a "best result without digging into data."  What you are describing is a very bad statistical taboo - null hypothesis testing is fraught to begin with, and this sort of procedure is one of the easiest ways to render it totally useless.
I'd suggest you strongly reconsider your intuition that a small p-value is "good."  A p-value means very little without additional context, and any sort of procedure that explicitly searches for small p-values without looking at the data is at best useless, and at worst dishonest.
Edit: As suggested below, those who wish to learn more about this issue can read the relevant wikipedia article.
A: A counter-example is to simulate two normally distributed samples with the same mean many times and see if at most 5% of the tests lead to rejection of the null hypothesis (if 5% is the desired significance level). 10,000 times, I simulated two samples of size 100 and ran your proposed procedure. Then I counted how many times it led to rejection and compared it with 5%. The result was
$$
0.0601 [ 0.0556; 0.0649]
$$
This means that the significance level can't be 5%, and hence it is not a valid statistical test for normally distributed data (or at least not one with a known significance level).
It should be possible to do some correction of the proposed procedure such that it is a valid test for normally distributed data, but I don't see how you could make a procedure like this valid for data for the class of distributions for which the U-test is valid. If I were you, I would therefore just use the U-test for this task.

R code:
one_test=function(){
  data1=rnorm(100)
  data2=rnorm(100)
  u1=t.test(data1, data2)$p.value
  u2=wilcox.test(data1,data2)$p.value
  p_value=min(u1,u2)
  return(p_value<=0.05)
}
prop.test(sum(replicate(10000,one_test())),10000,p=0.05)

A: You should decide your test first, then get the p-value. Otherwise you could keep doing tests until one of them gives you what you want. If you're going to perform multiple tests, then you should use a correction on the significance level (like Bonferroni's)
A: To sum up all the topic
When two samples are from the the same normal distribution, T-test and U-test would give almost the same p-values, sometimes T-test would be smaller, sometimes U-test. So combined min(T-test, U-test) will give lower p-values that each of them and we'll have more rejections of null hypothesis than expected. That is the problem.
Taking into account that even for normal distribution the benefits of T-test are quite small, if you don't check distribution and outliers just use U-test.
