Here is the difference between functional testing and non-functional testing:
Functional testing is a kind of software testing that confirms the software satisfies its specifications. It focuses on the software's functionality, such as whether it can carry out the tasks that it is intended to carry out. Manual testers or automated test scripts are frequently used for functional testing.
Non-functional testing is a kind of software testing used to confirm that the program satisfies its non-functional requirements. Non-functional requirements, such as those for performance, security, and usability, are those that have no direct bearing on the functioning of the product. Specialized testers, including performance testers, security testers, and usability testers, are often responsible for non-functional testing.
For non-functional testing check this
article Q.39. Non-functional testing and functional testing work best together. While non-functional testing guarantees that the program satisfies its non-functional criteria, functional testing ensures that the software functions as it should.