I recently made an esoteric programming language, and I want to know how to test and see if the language is Turing-Complete.
Your language is "Turing-complete" if it can simulate any arbitrary single-state Turing machine. Alternatively, by the definition of Turing-completeness, your language is also Turing-complete if it can simulate any other Turing-complete language or computational model, like λ-calculus, µ-recursive functions, the
WHILE language, the SK(I) combinator calculus, a cyclic tag system, Brainfuck, Rule 110, Conway's Game of Life, java, scheme, php, html5 + css3, sql:2003, …
Most places I looked said it needed infinite loops and infinite data storage. Is that all?
There are many, many ways in which a language can be Turing-complete. Conditional branching plus the ability to manipulate unbounded memory are one example. (This is the minimal feature set for non-pathological, non-esoteric "normal" imperative languages.)
But, say, λ-calculus doesn't have loops, and doesn't have data storage; it doesn't even have "data" at all. It only has two things: function abstraction and function application. Still, that is enough for it being Turing-complete.
Also, do I need to simulate a Turing Machine for proof, or is there an easier way?
You need to simulate, or need to prove that you can simulate, some Turing-complete language or system. It doesn't have to be related to Turing Machines at all, it only has to be Turing-complete.
For example, SQL was shown to be Turing-complete by implementing a cyclic tag system, HTML5+CSS3 was shown to be Turing-complete by implementing Rule 110, Scala's type system was shown to be Turing-complete by implementing the SKI combinator calculus.
Note: it is not enough to simulate a Turing Machine. You either need to simulate any single-tape Turing Machine, or a Universal Turing Machine (which itself can simulate any single-tape Turing Machine).