You should write tests first because this will catch edge cases in your functions and you can then write your functions to match the expected logic behaviour of your tests cases.
Don't be these people - it's funny because it's wrong:
- Selenium - automates web browsers to test websites
- use Selenium code to direct a given browser to query a website and check its response eg. selenium_hub_browser_test.py in my DevOps-Python-tools repo
- Selenium Grid - spin up multiple Selenium controlled web browsers to test sites - example of this is in my Kubernetes-configs repo
- Appium - uses the Selenium WebDriver standard to automated tests on mobile, desktop and IoT platforms, including iOS and Android eg. by converting UIAutomator2 on Android)
- Cypress





