### Body

Currently `start_date` is mandatory parameter.
For DAGs with `schedule=None` we can relax this requirement as no scheduling calculation needed so the `start_date` parameter isn't used.

### Committer

- [X] I acknowledge that I am a maintainer/committer of the Apache Airflow project.
)  
        REF_DATE = BASE_DATE + timedelta(hours=-3.5)
        assert set([dr.run_id for dr in [dr4]]) == set(
            [
                ti.run_id
                for ti in test_dag.get_task_instances_before(base_date=REF_DATE, num=1, session=session)
            ]
        )
        assert set([dr.run_id for dr in [dr4, dr5, dr6]]) == set(
            [
                ti.run_id
                for ti in test_dag.get_task_instances_before(base_date=REF_DATE, num=3, session=session)
            ]
        )
        assert set([dr.run_id for dr in [dr4, dr5, dr6, dr7, dr8]]) == set(
            [
                ti.run_id
                for ti in test_dag.get_task_instances_before(base_date=REF_DATE, num=5, session=session)
            ]
        )
        assert set([dr.run_id for dr in [dr4, dr5, dr6, dr7, dr8]]) == set(
            [
                ti.run_id
                for ti in test_dag.get_task_instances_before(base_date=REF_DATE, num=6, session=session)
            ]
        )  
        REF_DATE = BASE_DATE + timedelta(hours=-8)
        assert set([dr.run_id for dr in [dr8]]) == set(
            [
                ti.run_id