async def METHOD_NAME(self, script, *args):
    # Always use no storage here to prevent settings to mix amongst tests
    argv = [script, "--storage", "none"] + list(args)
    inputs = "\n".join(self.inputs) + "\n"
    with capture_output(argv, inputs) as (out, err):
        udns_port = str(self.fake_udns.port)
        with patch.dict("os.environ", {"PYATV_UDNS_PORT": udns_port}):
            with fake_udns.stub_multicast(self.fake_udns, self.loop):
                with faketime("pyatv", 0):
                    # Stub away port knocking and ignore result (not tested here)
                    with patch("pyatv.support.knock.knock") as mock_knock:
                        async def _no_action(*args):
                            pass
                        mock_knock.side_effect = _no_action
                        module = import_module(f"pyatv.scripts.{script}")
                        self.retcode = await module.appstart(self.loop)
                        self.stdout = out.getvalue()
                        self.stderr = err.getvalue()