Non-functional testing refers to checking a system for the way a system operates. This includes performance and is used for checking the quality of the product and related to user satisfaction. It is basically checking the readiness of a system. An example would be to check how many people can log in at one time. Functional testing tests the system and its components.
This relates to the function of the code and is done before non-functional. The testers would be observing the actual and expected outputs and includes system, regression, and interface tests.