My recommendation would be to put the test(s) within the loop.
I do mean tests. You currently have one test with lots of assertions in a loop.
pm.test is the test and the pm.expect are the assertions.
I recommend to break down your asserts into individual tests.
Otherwise what will happen is that if any assertion fails, then the test will fail immediately and the rest of the assertions will not be evaluated. If the firstname fails, then nothing else will be checked.
I loathe to say its best practice, but try and create tests that are singular as possible. If you want the feedback from all of your assertions, then they should be separate tests.
When crafting tests in a loop, you can use backticks\string literals to craft custom test names based on the variables. So the test name is more relevant.