# Integration and Certification Tests Integration tests use a server and a controller or controllers to test the behavior of a device. Certification tests are all integration tests. For certified products, the device under test (DUT) is tested against one of the SDK controller implementations (either chip-tool or the python-based controller, depending on the test type). For software component certification, the software component is tested against a sample device built from the SDK. Certification tests require an accompanying certification test plan in order to be used in the certification testing process. More information about test plans can be found in the [test plans repository](https://github.com/CHIP-Specifications/chip-test-plans/tree/master/docs). Integration testing can also be used outside of the certification testing program to test device behavior in the SDK. Certification tests are all run in the [CI](./ci_testing). There are two main integration test types: - [YAML](./yaml.md) - [Python framework](./python.md) YAML is a human-readable serialization language that uses structured tags to define test steps. Tests are defined in YAML, and parsed and run through a runner that is backed by the chip-tool controller. The Python framework tests are written in python and use the [Mobly](https://github.com/google/mobly) test framework to execute tests. ## Which test framework to use Both types of tests can be run through the Test Harness for certification testing, locally for the purposes of development and in the CI for the SDK. The appropriate test framework to use is whatever lets you automate your tests in a way that is understandable, readable, and has the features you need - YAML - pros: more readable, simpler to write, easy for ATLs to parse and understand - cons: conditionals are harder (not all supported), no branch control, schema not well documented - python - pros: full programming language, full control API with support for core (certs, commissioning, etc), less plumbing if you need to add features, can use python libraries - cons: more complex, can be harder to read