Very cool!

Not sure whether they are really placed well in "chart" because we do not want to use K8s tests to check the chart but the full integration of Airflow with Kubernetes. I tincludes core, K8s provider, Task SDK... so for K8s tests we need at least one exception to the rule.

I'd put them rather in core as an integration for this... but as said, there might be more options and much more opinions in the room. But capability is more important so "praise" to all who have contributed to this! (Hope Edge will be added there soon as well...)

Jens

On 11/17/25 19:41, Jarek Potiuk wrote:
I have one question about the k8s tests in the future: should they live
under airflow-core, under task-sdk, or in a separate dedicated location?

This is an excellent question. And as surprising as it might be I think
there should be in .... chart

chart
       tests
            unit <- current "helm_tests"
            e2e <- current "k8s_tests"



On Mon, Nov 17, 2025 at 7:09 PM Zhe-You Liu <[email protected]> wrote:

Hi Jarek,

Thanks for proposing the new e2e test structure, the task-sdk e2e setup
looks great to me!
I have one question about the k8s tests in the future: should they live
under airflow-core, under task-sdk, or in a separate dedicated location?

Best regards,
Jason


On Mon, Nov 17, 2025 at 11:56 PM Jarek Potiuk <[email protected]> wrote:

Hello here,

*TL;DR; We want to have better organized, and much improved  new `e2e`
test
type, a common thing in Airflow - one that others will be able to add
tests
to and add their own similar tests following the blueprint.*

Over the last few weeks quite a few of us were working on something we
have
not fully realise we will end up and it was mostly bottom -up grass root
ideas that simply "clicked" together and we would like to propose adding
(or more formalising) a new type of tests in airflow - e2e tests. The
people who worked on it were mostly Amogh, Zhe You lIu, Bugra, myself.

Wa already have a few attempts to do it (in various stages - as top-level
folders: *docker-tests, k8s-tests, airflow-e2e-tests, airflow-ctl-tests,
task-sdk-integration-tests* - yes the lack of consistency in names is
very
confusing) but with recent improvements in task-sdk-integration-tests -
we
think we have a good proposal on how we can implement those tests and
standardise it across airflow distributions.

Current (best) approach is
https://github.com/apache/airflow/tree/main/task-sdk-integration-tests

And it has the following properties:

1) uses uv pytest (standard pytest tests), docker-compose and
python-on-whales together, also has nice breeze wrapper for CI

2) automatically sets-up (and keeps running during iteration)
docker-compose based airflow deployment - with components (any -
api-server, dag processor, scheduler, triggerer) necessary during the
tests
and allows to interact with it, including triggering local dags and the
like

3) pytest tests are run in a local venv controlled by uv sync

4) it allows for extremely fast (almost like pytest-native in venv)
iteration speed with tests - it uses Zhe's hot-reload functionality
added a
week ago in order to reload components inside the docker-containers, and
local sources are mounted to those - which means that just saving a file
in
your IDE or local env will make automated (sub-second, really) reload of
the components you interact with. Basically at the time you press
Shift-F10
(or whatever shortcut you have) to re-run your tests, your just
auto-saved
modified Airflow code already runs in those docker-compose components (!)
- *this is the most important feature of it.*

5) All those tests are automatically run in CI - in relevant PRs (driven
by
selective checks) - but also they are very easily runnable locally in
local
venv (no breeze CI image needed). Basically:

cd task-sdk-integration-tests
uv run pytest

6) Last minute addition - we've been literally asked by Kacper an hour
ago
about having "something like that" for open lineage - every current
distribution is able to have their own set of tests like that if the
stewards of that part want it

Enough bragging....

*Our proposal:*

* we consistently rename those tests as `*e2e*` tests

* we adapt all of them (including *k8s* tests eventually - where we have
to
hack kind a bit) - to follow the same patterns and principles

* we extract common code for that to `*devel-common*` and reuse across
those tests

* we get rid of all the top-level `*SMTH-test*` folders we have now and
move those different kinds of tests to `*tests/e2e*` (next to `unit`,
`system`, `integration` we already have) of distributions that the tests
are relevant to

For example - instead of:

task-sdk
     src
     tests
         task_sdk
             some_unit_test.py
task-sdk-integration-tests
     dags <- here e2e test dags are stored
     logs <- here logs from all components are kept (.gitignored)
     tests
        task_sdk_tests
                         some_end_2_end_test.py

We propose:


task-sdk
     src
     tests
        unit
          task_sdk
             some_unit_test.py
        e2e
          dags
          logs
          task_sdk
                         some_end_2_end_test.py

Of course - this is a proposal - and if there are other ideas on how to
restructure the test folders, that might be a good idea to do it now.
*Only
serious and complete offers are going to be considered :)*, so I propose
constructive, complete proposals rather than criticising the current one.

*Let us know what you think,*

Jarek, Zhe, Bugra, Amogh


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to