You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@flink.apache.org by Yik San Chan <ev...@gmail.com> on 2021/03/23 02:55:49 UTC

Failed to unit test PyFlink UDF

(This question is cross-posted on StackOverflow
https://stackoverflow.com/questions/66756612/failed-to-unit-test-pyflink-udf
)

I am using PyFlink and I want to unit test my UDF written in Python.

To test the simple udf below:

```python
# tasks/helloworld/udf.py
from pyflink.table import DataTypes
from pyflink.table.udf import udf

@udf(input_types=[DataTypes.INT(), DataTypes.INT()],
result_type=DataTypes.BIGINT())
def add(i, j):
    return i + j
```

I create a test file that should fail:
```python
from tasks.helloworld.udf import add

def test_add():
    assert add(1,1) == 3
```

Sadly, it passes if I run `pytest`:
```
> pytest
===========================================================================================
test session starts
============================================================================================
platform darwin -- Python 3.7.10, pytest-6.2.2, py-1.10.0, pluggy-0.13.1
rootdir: /Users/chenyisheng/source/yiksanchan/pytest-flink
collected 1 item

tests/test_helloworld.py .

                                              [100%]

=============================================================================================
warnings summary
=============================================================================================
../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13

/usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13:
DeprecationWarning: Using or importing the ABCs from 'collections' instead
of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will
stop working
    from collections import (

../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/pyflink/table/udf.py:291

/usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/pyflink/table/udf.py:291:
DeprecationWarning: Using or importing the ABCs from 'collections' instead
of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will
stop working
    if not isinstance(input_types, collections.Iterable) \

-- Docs: https://docs.pytest.org/en/stable/warnings.html
======================================================================================
1 passed, 6 warnings in 0.98s
=======================================================================================
```

However, the test will fail as expected if I remove the
`@udf(input_types=[...], result_type=...)` annotation:
```
> pytest
===========================================================================================
test session starts
============================================================================================
platform darwin -- Python 3.7.10, pytest-6.2.2, py-1.10.0, pluggy-0.13.1
rootdir: /Users/chenyisheng/source/yiksanchan/pytest-flink
collected 1 item

tests/test_helloworld.py F

                                              [100%]

=================================================================================================
FAILURES
=================================================================================================
_________________________________________________________________________________________________
test_add
_________________________________________________________________________________________________

    def test_add():
>       assert add(1,1) == 3
E       assert 2 == 3
E        +  where 2 = add(1, 1)

tests/test_helloworld.py:4: AssertionError
=============================================================================================
warnings summary
=============================================================================================
../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13

/usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13:
DeprecationWarning: Using or importing the ABCs from 'collections' instead
of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will
stop working
    from collections import (

-- Docs: https://docs.pytest.org/en/stable/warnings.html
=========================================================================================
short test summary info
==========================================================================================
FAILED tests/test_helloworld.py::test_add - assert 2 == 3
======================================================================================
1 failed, 5 warnings in 0.17s
=======================================================================================
```

The full example can be found
https://github.com/YikSanChan/how-to-pytest-flink.

Best,
Yik San

Re: Failed to unit test PyFlink UDF

Posted by Yik San Chan <ev...@gmail.com>.
Hi Dian,

Thanks for your patience on all these asks!

Best,
Yik San

On Wed, Mar 24, 2021 at 10:32 AM Dian Fu <di...@gmail.com> wrote:

> It’s a good advice. I have created ticket
> https://issues.apache.org/jira/browse/FLINK-21938 to track this.
>
> 2021年3月24日 上午10:24,Yik San Chan <ev...@gmail.com> 写道:
>
> Hi Dian,
>
> As you said, users can, but I got the impression that using ._func to
> access the original Python function is not recommended, therefore not
> documented. While in Flink, unit testing a Scala/Java UDF is clearly
> documented and encouraged.
>
> Do I misread something?
>
> Best,
> Yik San
>
> On Wed, Mar 24, 2021 at 10:21 AM Dian Fu <di...@gmail.com> wrote:
>
>> As I replied in previous email, it doesn’t block users to write tests for
>> PyFlink UDFs. Users could use ._func to access the original Python function
>> if they want.
>>
>> Regards,
>> Dian
>>
>> 2021年3月23日 下午2:39,Yik San Chan <ev...@gmail.com> 写道:
>>
>> Hi Dian,
>>
>> However users do want to unit test their UDFs, as supported in
>> https://ci.apache.org/projects/flink/flink-docs-stable/dev/stream/testing.html#testing-user-defined-functions
>>
>> Even though the examples are for Flink, I believe PyFlink should ideally
>> be no difference.
>>
>> What do you think?
>>
>> Best,
>> Yik San
>>
>> On Tue, Mar 23, 2021 at 2:19 PM Dian Fu <di...@gmail.com> wrote:
>>
>>> Hi Yik San,
>>>
>>> This field isn't expected to be exposed to users and so I'm not
>>> convinced that we should add such an interface/method in Flink.
>>>
>>> Regards,
>>> Dian
>>>
>>> On Tue, Mar 23, 2021 at 2:04 PM Yik San Chan <ev...@gmail.com>
>>> wrote:
>>>
>>>> Hi Dian,
>>>>
>>>> The ._func method seems to be internal only. Maybe we can add some
>>>> public-facing method to make it more intuitive for use in unit test?
>>>> What do you think?
>>>>
>>>> Best,
>>>> Yik San
>>>>
>>>> On Tue, Mar 23, 2021 at 2:02 PM Yik San Chan <ev...@gmail.com>
>>>> wrote:
>>>>
>>>>> Hi Dian,
>>>>>
>>>>> Thanks! It solves my problem.
>>>>>
>>>>> Best,
>>>>> Yik San
>>>>>
>>>>> On Tue, Mar 23, 2021 at 1:29 PM Dian Fu <di...@gmail.com> wrote:
>>>>>
>>>>>> H Yik San,
>>>>>>
>>>>>> As the udf `add` is decorated with `@udf` decorator, it is no longer
>>>>>> a simple Python function if you reference `add`. If you execute
>>>>>> `print(type(add(1, 1)))`, you will see the output is something like "<class
>>>>>> 'pyflink.table.expression.Expression'>".
>>>>>>
>>>>>> You could try the following code: assert add._func(1, 1) == 3
>>>>>>
>>>>>> add._func returns the original Python function.
>>>>>>
>>>>>> Regards,
>>>>>> Dian
>>>>>>
>>>>>> On Tue, Mar 23, 2021 at 10:56 AM Yik San Chan <
>>>>>> evan.chanyiksan@gmail.com> wrote:
>>>>>>
>>>>>>> (This question is cross-posted on StackOverflow
>>>>>>> https://stackoverflow.com/questions/66756612/failed-to-unit-test-pyflink-udf
>>>>>>> )
>>>>>>>
>>>>>>> I am using PyFlink and I want to unit test my UDF written in Python.
>>>>>>>
>>>>>>> To test the simple udf below:
>>>>>>>
>>>>>>> ```python
>>>>>>> # tasks/helloworld/udf.py
>>>>>>> from pyflink.table import DataTypes
>>>>>>> from pyflink.table.udf import udf
>>>>>>>
>>>>>>> @udf(input_types=[DataTypes.INT(), DataTypes.INT()],
>>>>>>> result_type=DataTypes.BIGINT())
>>>>>>> def add(i, j):
>>>>>>>     return i + j
>>>>>>> ```
>>>>>>>
>>>>>>> I create a test file that should fail:
>>>>>>> ```python
>>>>>>> from tasks.helloworld.udf import add
>>>>>>>
>>>>>>> def test_add():
>>>>>>>     assert add(1,1) == 3
>>>>>>> ```
>>>>>>>
>>>>>>> Sadly, it passes if I run `pytest`:
>>>>>>> ```
>>>>>>> > pytest
>>>>>>> ===========================================================================================
>>>>>>> test session starts
>>>>>>> ============================================================================================
>>>>>>> platform darwin -- Python 3.7.10, pytest-6.2.2, py-1.10.0,
>>>>>>> pluggy-0.13.1
>>>>>>> rootdir: /Users/chenyisheng/source/yiksanchan/pytest-flink
>>>>>>> collected 1 item
>>>>>>>
>>>>>>> tests/test_helloworld.py .
>>>>>>>
>>>>>>>                                                     [100%]
>>>>>>>
>>>>>>> =============================================================================================
>>>>>>> warnings summary
>>>>>>> =============================================================================================
>>>>>>>
>>>>>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>>>>>>
>>>>>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>>>>>>
>>>>>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>>>>>>
>>>>>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>>>>>>
>>>>>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>>>>>>
>>>>>>> /usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13:
>>>>>>> DeprecationWarning: Using or importing the ABCs from 'collections' instead
>>>>>>> of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will
>>>>>>> stop working
>>>>>>>     from collections import (
>>>>>>>
>>>>>>>
>>>>>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/pyflink/table/udf.py:291
>>>>>>>
>>>>>>> /usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/pyflink/table/udf.py:291:
>>>>>>> DeprecationWarning: Using or importing the ABCs from 'collections' instead
>>>>>>> of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will
>>>>>>> stop working
>>>>>>>     if not isinstance(input_types, collections.Iterable) \
>>>>>>>
>>>>>>> -- Docs: https://docs.pytest.org/en/stable/warnings.html
>>>>>>> ======================================================================================
>>>>>>> 1 passed, 6 warnings in 0.98s
>>>>>>> =======================================================================================
>>>>>>> ```
>>>>>>>
>>>>>>> However, the test will fail as expected if I remove the
>>>>>>> `@udf(input_types=[...], result_type=...)` annotation:
>>>>>>> ```
>>>>>>> > pytest
>>>>>>> ===========================================================================================
>>>>>>> test session starts
>>>>>>> ============================================================================================
>>>>>>> platform darwin -- Python 3.7.10, pytest-6.2.2, py-1.10.0,
>>>>>>> pluggy-0.13.1
>>>>>>> rootdir: /Users/chenyisheng/source/yiksanchan/pytest-flink
>>>>>>> collected 1 item
>>>>>>>
>>>>>>> tests/test_helloworld.py F
>>>>>>>
>>>>>>>                                                     [100%]
>>>>>>>
>>>>>>> =================================================================================================
>>>>>>> FAILURES
>>>>>>> =================================================================================================
>>>>>>> _________________________________________________________________________________________________
>>>>>>> test_add
>>>>>>> _________________________________________________________________________________________________
>>>>>>>
>>>>>>>     def test_add():
>>>>>>> >       assert add(1,1) == 3
>>>>>>> E       assert 2 == 3
>>>>>>> E        +  where 2 = add(1, 1)
>>>>>>>
>>>>>>> tests/test_helloworld.py:4: AssertionError
>>>>>>> =============================================================================================
>>>>>>> warnings summary
>>>>>>> =============================================================================================
>>>>>>>
>>>>>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>>>>>>
>>>>>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>>>>>>
>>>>>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>>>>>>
>>>>>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>>>>>>
>>>>>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>>>>>>
>>>>>>> /usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13:
>>>>>>> DeprecationWarning: Using or importing the ABCs from 'collections' instead
>>>>>>> of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will
>>>>>>> stop working
>>>>>>>     from collections import (
>>>>>>>
>>>>>>> -- Docs: https://docs.pytest.org/en/stable/warnings.html
>>>>>>> =========================================================================================
>>>>>>> short test summary info
>>>>>>> ==========================================================================================
>>>>>>> FAILED tests/test_helloworld.py::test_add - assert 2 == 3
>>>>>>> ======================================================================================
>>>>>>> 1 failed, 5 warnings in 0.17s
>>>>>>> =======================================================================================
>>>>>>> ```
>>>>>>>
>>>>>>> The full example can be found
>>>>>>> https://github.com/YikSanChan/how-to-pytest-flink.
>>>>>>>
>>>>>>> Best,
>>>>>>> Yik San
>>>>>>>
>>>>>>
>>
>

Re: Failed to unit test PyFlink UDF

Posted by Dian Fu <di...@gmail.com>.
It’s a good advice. I have created ticket https://issues.apache.org/jira/browse/FLINK-21938 <https://issues.apache.org/jira/browse/FLINK-21938> to track this.

> 2021年3月24日 上午10:24,Yik San Chan <ev...@gmail.com> 写道:
> 
> Hi Dian,
> 
> As you said, users can, but I got the impression that using ._func to access the original Python function is not recommended, therefore not documented. While in Flink, unit testing a Scala/Java UDF is clearly documented and encouraged.
> 
> Do I misread something?
> 
> Best,
> Yik San
> 
> On Wed, Mar 24, 2021 at 10:21 AM Dian Fu <dian0511.fu@gmail.com <ma...@gmail.com>> wrote:
> As I replied in previous email, it doesn’t block users to write tests for PyFlink UDFs. Users could use ._func to access the original Python function if they want.
> 
> Regards,
> Dian
> 
>> 2021年3月23日 下午2:39,Yik San Chan <evan.chanyiksan@gmail.com <ma...@gmail.com>> 写道:
>> 
>> Hi Dian,
>> 
>> However users do want to unit test their UDFs, as supported in https://ci.apache.org/projects/flink/flink-docs-stable/dev/stream/testing.html#testing-user-defined-functions <https://ci.apache.org/projects/flink/flink-docs-stable/dev/stream/testing.html#testing-user-defined-functions>
>> 
>> Even though the examples are for Flink, I believe PyFlink should ideally be no difference.
>> 
>> What do you think?
>> 
>> Best,
>> Yik San
>> 
>> On Tue, Mar 23, 2021 at 2:19 PM Dian Fu <dian0511.fu@gmail.com <ma...@gmail.com>> wrote:
>> Hi Yik San,
>> 
>> This field isn't expected to be exposed to users and so I'm not convinced that we should add such an interface/method in Flink.
>> 
>> Regards,
>> Dian
>> 
>> On Tue, Mar 23, 2021 at 2:04 PM Yik San Chan <evan.chanyiksan@gmail.com <ma...@gmail.com>> wrote:
>> Hi Dian,
>> 
>> The ._func method seems to be internal only. Maybe we can add some public-facing method to make it more intuitive for use in unit test? What do you think?
>> 
>> Best,
>> Yik San
>> 
>> On Tue, Mar 23, 2021 at 2:02 PM Yik San Chan <evan.chanyiksan@gmail.com <ma...@gmail.com>> wrote:
>> Hi Dian,
>> 
>> Thanks! It solves my problem.
>> 
>> Best,
>> Yik San
>> 
>> On Tue, Mar 23, 2021 at 1:29 PM Dian Fu <dian0511.fu@gmail.com <ma...@gmail.com>> wrote:
>> H Yik San,
>> 
>> As the udf `add` is decorated with `@udf` decorator, it is no longer a simple Python function if you reference `add`. If you execute `print(type(add(1, 1)))`, you will see the output is something like "<class 'pyflink.table.expression.Expression'>".
>> 
>> You could try the following code: assert add._func(1, 1) == 3
>> 
>> add._func returns the original Python function.
>> 
>> Regards,
>> Dian
>> 
>> On Tue, Mar 23, 2021 at 10:56 AM Yik San Chan <evan.chanyiksan@gmail.com <ma...@gmail.com>> wrote:
>> (This question is cross-posted on StackOverflow https://stackoverflow.com/questions/66756612/failed-to-unit-test-pyflink-udf <https://stackoverflow.com/questions/66756612/failed-to-unit-test-pyflink-udf>)
>> 
>> I am using PyFlink and I want to unit test my UDF written in Python.
>> 
>> To test the simple udf below:
>> 
>> ```python
>> # tasks/helloworld/udf.py
>> from pyflink.table import DataTypes
>> from pyflink.table.udf import udf
>> 
>> @udf(input_types=[DataTypes.INT(), DataTypes.INT()], result_type=DataTypes.BIGINT())
>> def add(i, j):
>>     return i + j
>> ```
>> 
>> I create a test file that should fail:
>> ```python
>> from tasks.helloworld.udf import add
>> 
>> def test_add():
>>     assert add(1,1) == 3
>> ```
>> 
>> Sadly, it passes if I run `pytest`:
>> ```
>> > pytest
>> =========================================================================================== test session starts ============================================================================================
>> platform darwin -- Python 3.7.10, pytest-6.2.2, py-1.10.0, pluggy-0.13.1
>> rootdir: /Users/chenyisheng/source/yiksanchan/pytest-flink
>> collected 1 item
>> 
>> tests/test_helloworld.py .                                                                                                                                                                           [100%]
>> 
>> ============================================================================================= warnings summary =============================================================================================
>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>   /usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will stop working
>>     from collections import (
>> 
>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/pyflink/table/udf.py:291
>>   /usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/pyflink/table/udf.py:291: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will stop working
>>     if not isinstance(input_types, collections.Iterable) \
>> 
>> -- Docs: https://docs.pytest.org/en/stable/warnings.html <https://docs.pytest.org/en/stable/warnings.html>
>> ====================================================================================== 1 passed, 6 warnings in 0.98s =======================================================================================
>> ```
>> 
>> However, the test will fail as expected if I remove the `@udf(input_types=[...], result_type=...)` annotation:
>> ```
>> > pytest
>> =========================================================================================== test session starts ============================================================================================
>> platform darwin -- Python 3.7.10, pytest-6.2.2, py-1.10.0, pluggy-0.13.1
>> rootdir: /Users/chenyisheng/source/yiksanchan/pytest-flink
>> collected 1 item
>> 
>> tests/test_helloworld.py F                                                                                                                                                                           [100%]
>> 
>> ================================================================================================= FAILURES =================================================================================================
>> _________________________________________________________________________________________________ test_add _________________________________________________________________________________________________
>> 
>>     def test_add():
>> >       assert add(1,1) == 3
>> E       assert 2 == 3
>> E        +  where 2 = add(1, 1)
>> 
>> tests/test_helloworld.py:4: AssertionError
>> ============================================================================================= warnings summary =============================================================================================
>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>   /usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will stop working
>>     from collections import (
>> 
>> -- Docs: https://docs.pytest.org/en/stable/warnings.html <https://docs.pytest.org/en/stable/warnings.html>
>> ========================================================================================= short test summary info ==========================================================================================
>> FAILED tests/test_helloworld.py::test_add - assert 2 == 3
>> ====================================================================================== 1 failed, 5 warnings in 0.17s =======================================================================================
>> ```
>> 
>> The full example can be found https://github.com/YikSanChan/how-to-pytest-flink <https://github.com/YikSanChan/how-to-pytest-flink>.
>> 
>> Best,
>> Yik San
> 


Re: Failed to unit test PyFlink UDF

Posted by Yik San Chan <ev...@gmail.com>.
Hi Dian,

As you said, users can, but I got the impression that using ._func to
access the original Python function is not recommended, therefore not
documented. While in Flink, unit testing a Scala/Java UDF is clearly
documented and encouraged.

Do I misread something?

Best,
Yik San

On Wed, Mar 24, 2021 at 10:21 AM Dian Fu <di...@gmail.com> wrote:

> As I replied in previous email, it doesn’t block users to write tests for
> PyFlink UDFs. Users could use ._func to access the original Python function
> if they want.
>
> Regards,
> Dian
>
> 2021年3月23日 下午2:39,Yik San Chan <ev...@gmail.com> 写道:
>
> Hi Dian,
>
> However users do want to unit test their UDFs, as supported in
> https://ci.apache.org/projects/flink/flink-docs-stable/dev/stream/testing.html#testing-user-defined-functions
>
> Even though the examples are for Flink, I believe PyFlink should ideally
> be no difference.
>
> What do you think?
>
> Best,
> Yik San
>
> On Tue, Mar 23, 2021 at 2:19 PM Dian Fu <di...@gmail.com> wrote:
>
>> Hi Yik San,
>>
>> This field isn't expected to be exposed to users and so I'm not convinced
>> that we should add such an interface/method in Flink.
>>
>> Regards,
>> Dian
>>
>> On Tue, Mar 23, 2021 at 2:04 PM Yik San Chan <ev...@gmail.com>
>> wrote:
>>
>>> Hi Dian,
>>>
>>> The ._func method seems to be internal only. Maybe we can add some
>>> public-facing method to make it more intuitive for use in unit test?
>>> What do you think?
>>>
>>> Best,
>>> Yik San
>>>
>>> On Tue, Mar 23, 2021 at 2:02 PM Yik San Chan <ev...@gmail.com>
>>> wrote:
>>>
>>>> Hi Dian,
>>>>
>>>> Thanks! It solves my problem.
>>>>
>>>> Best,
>>>> Yik San
>>>>
>>>> On Tue, Mar 23, 2021 at 1:29 PM Dian Fu <di...@gmail.com> wrote:
>>>>
>>>>> H Yik San,
>>>>>
>>>>> As the udf `add` is decorated with `@udf` decorator, it is no longer a
>>>>> simple Python function if you reference `add`. If you execute
>>>>> `print(type(add(1, 1)))`, you will see the output is something like "<class
>>>>> 'pyflink.table.expression.Expression'>".
>>>>>
>>>>> You could try the following code: assert add._func(1, 1) == 3
>>>>>
>>>>> add._func returns the original Python function.
>>>>>
>>>>> Regards,
>>>>> Dian
>>>>>
>>>>> On Tue, Mar 23, 2021 at 10:56 AM Yik San Chan <
>>>>> evan.chanyiksan@gmail.com> wrote:
>>>>>
>>>>>> (This question is cross-posted on StackOverflow
>>>>>> https://stackoverflow.com/questions/66756612/failed-to-unit-test-pyflink-udf
>>>>>> )
>>>>>>
>>>>>> I am using PyFlink and I want to unit test my UDF written in Python.
>>>>>>
>>>>>> To test the simple udf below:
>>>>>>
>>>>>> ```python
>>>>>> # tasks/helloworld/udf.py
>>>>>> from pyflink.table import DataTypes
>>>>>> from pyflink.table.udf import udf
>>>>>>
>>>>>> @udf(input_types=[DataTypes.INT(), DataTypes.INT()],
>>>>>> result_type=DataTypes.BIGINT())
>>>>>> def add(i, j):
>>>>>>     return i + j
>>>>>> ```
>>>>>>
>>>>>> I create a test file that should fail:
>>>>>> ```python
>>>>>> from tasks.helloworld.udf import add
>>>>>>
>>>>>> def test_add():
>>>>>>     assert add(1,1) == 3
>>>>>> ```
>>>>>>
>>>>>> Sadly, it passes if I run `pytest`:
>>>>>> ```
>>>>>> > pytest
>>>>>> ===========================================================================================
>>>>>> test session starts
>>>>>> ============================================================================================
>>>>>> platform darwin -- Python 3.7.10, pytest-6.2.2, py-1.10.0,
>>>>>> pluggy-0.13.1
>>>>>> rootdir: /Users/chenyisheng/source/yiksanchan/pytest-flink
>>>>>> collected 1 item
>>>>>>
>>>>>> tests/test_helloworld.py .
>>>>>>
>>>>>>                                                     [100%]
>>>>>>
>>>>>> =============================================================================================
>>>>>> warnings summary
>>>>>> =============================================================================================
>>>>>>
>>>>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>>>>>
>>>>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>>>>>
>>>>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>>>>>
>>>>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>>>>>
>>>>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>>>>>
>>>>>> /usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13:
>>>>>> DeprecationWarning: Using or importing the ABCs from 'collections' instead
>>>>>> of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will
>>>>>> stop working
>>>>>>     from collections import (
>>>>>>
>>>>>>
>>>>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/pyflink/table/udf.py:291
>>>>>>
>>>>>> /usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/pyflink/table/udf.py:291:
>>>>>> DeprecationWarning: Using or importing the ABCs from 'collections' instead
>>>>>> of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will
>>>>>> stop working
>>>>>>     if not isinstance(input_types, collections.Iterable) \
>>>>>>
>>>>>> -- Docs: https://docs.pytest.org/en/stable/warnings.html
>>>>>> ======================================================================================
>>>>>> 1 passed, 6 warnings in 0.98s
>>>>>> =======================================================================================
>>>>>> ```
>>>>>>
>>>>>> However, the test will fail as expected if I remove the
>>>>>> `@udf(input_types=[...], result_type=...)` annotation:
>>>>>> ```
>>>>>> > pytest
>>>>>> ===========================================================================================
>>>>>> test session starts
>>>>>> ============================================================================================
>>>>>> platform darwin -- Python 3.7.10, pytest-6.2.2, py-1.10.0,
>>>>>> pluggy-0.13.1
>>>>>> rootdir: /Users/chenyisheng/source/yiksanchan/pytest-flink
>>>>>> collected 1 item
>>>>>>
>>>>>> tests/test_helloworld.py F
>>>>>>
>>>>>>                                                     [100%]
>>>>>>
>>>>>> =================================================================================================
>>>>>> FAILURES
>>>>>> =================================================================================================
>>>>>> _________________________________________________________________________________________________
>>>>>> test_add
>>>>>> _________________________________________________________________________________________________
>>>>>>
>>>>>>     def test_add():
>>>>>> >       assert add(1,1) == 3
>>>>>> E       assert 2 == 3
>>>>>> E        +  where 2 = add(1, 1)
>>>>>>
>>>>>> tests/test_helloworld.py:4: AssertionError
>>>>>> =============================================================================================
>>>>>> warnings summary
>>>>>> =============================================================================================
>>>>>>
>>>>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>>>>>
>>>>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>>>>>
>>>>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>>>>>
>>>>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>>>>>
>>>>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>>>>>
>>>>>> /usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13:
>>>>>> DeprecationWarning: Using or importing the ABCs from 'collections' instead
>>>>>> of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will
>>>>>> stop working
>>>>>>     from collections import (
>>>>>>
>>>>>> -- Docs: https://docs.pytest.org/en/stable/warnings.html
>>>>>> =========================================================================================
>>>>>> short test summary info
>>>>>> ==========================================================================================
>>>>>> FAILED tests/test_helloworld.py::test_add - assert 2 == 3
>>>>>> ======================================================================================
>>>>>> 1 failed, 5 warnings in 0.17s
>>>>>> =======================================================================================
>>>>>> ```
>>>>>>
>>>>>> The full example can be found
>>>>>> https://github.com/YikSanChan/how-to-pytest-flink.
>>>>>>
>>>>>> Best,
>>>>>> Yik San
>>>>>>
>>>>>
>

Re: Failed to unit test PyFlink UDF

Posted by Dian Fu <di...@gmail.com>.
As I replied in previous email, it doesn’t block users to write tests for PyFlink UDFs. Users could use ._func to access the original Python function if they want.

Regards,
Dian

> 2021年3月23日 下午2:39,Yik San Chan <ev...@gmail.com> 写道:
> 
> Hi Dian,
> 
> However users do want to unit test their UDFs, as supported in https://ci.apache.org/projects/flink/flink-docs-stable/dev/stream/testing.html#testing-user-defined-functions <https://ci.apache.org/projects/flink/flink-docs-stable/dev/stream/testing.html#testing-user-defined-functions>
> 
> Even though the examples are for Flink, I believe PyFlink should ideally be no difference.
> 
> What do you think?
> 
> Best,
> Yik San
> 
> On Tue, Mar 23, 2021 at 2:19 PM Dian Fu <dian0511.fu@gmail.com <ma...@gmail.com>> wrote:
> Hi Yik San,
> 
> This field isn't expected to be exposed to users and so I'm not convinced that we should add such an interface/method in Flink.
> 
> Regards,
> Dian
> 
> On Tue, Mar 23, 2021 at 2:04 PM Yik San Chan <evan.chanyiksan@gmail.com <ma...@gmail.com>> wrote:
> Hi Dian,
> 
> The ._func method seems to be internal only. Maybe we can add some public-facing method to make it more intuitive for use in unit test? What do you think?
> 
> Best,
> Yik San
> 
> On Tue, Mar 23, 2021 at 2:02 PM Yik San Chan <evan.chanyiksan@gmail.com <ma...@gmail.com>> wrote:
> Hi Dian,
> 
> Thanks! It solves my problem.
> 
> Best,
> Yik San
> 
> On Tue, Mar 23, 2021 at 1:29 PM Dian Fu <dian0511.fu@gmail.com <ma...@gmail.com>> wrote:
> H Yik San,
> 
> As the udf `add` is decorated with `@udf` decorator, it is no longer a simple Python function if you reference `add`. If you execute `print(type(add(1, 1)))`, you will see the output is something like "<class 'pyflink.table.expression.Expression'>".
> 
> You could try the following code: assert add._func(1, 1) == 3
> 
> add._func returns the original Python function.
> 
> Regards,
> Dian
> 
> On Tue, Mar 23, 2021 at 10:56 AM Yik San Chan <evan.chanyiksan@gmail.com <ma...@gmail.com>> wrote:
> (This question is cross-posted on StackOverflow https://stackoverflow.com/questions/66756612/failed-to-unit-test-pyflink-udf <https://stackoverflow.com/questions/66756612/failed-to-unit-test-pyflink-udf>)
> 
> I am using PyFlink and I want to unit test my UDF written in Python.
> 
> To test the simple udf below:
> 
> ```python
> # tasks/helloworld/udf.py
> from pyflink.table import DataTypes
> from pyflink.table.udf import udf
> 
> @udf(input_types=[DataTypes.INT(), DataTypes.INT()], result_type=DataTypes.BIGINT())
> def add(i, j):
>     return i + j
> ```
> 
> I create a test file that should fail:
> ```python
> from tasks.helloworld.udf import add
> 
> def test_add():
>     assert add(1,1) == 3
> ```
> 
> Sadly, it passes if I run `pytest`:
> ```
> > pytest
> =========================================================================================== test session starts ============================================================================================
> platform darwin -- Python 3.7.10, pytest-6.2.2, py-1.10.0, pluggy-0.13.1
> rootdir: /Users/chenyisheng/source/yiksanchan/pytest-flink
> collected 1 item
> 
> tests/test_helloworld.py .                                                                                                                                                                           [100%]
> 
> ============================================================================================= warnings summary =============================================================================================
> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>   /usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will stop working
>     from collections import (
> 
> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/pyflink/table/udf.py:291
>   /usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/pyflink/table/udf.py:291: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will stop working
>     if not isinstance(input_types, collections.Iterable) \
> 
> -- Docs: https://docs.pytest.org/en/stable/warnings.html <https://docs.pytest.org/en/stable/warnings.html>
> ====================================================================================== 1 passed, 6 warnings in 0.98s =======================================================================================
> ```
> 
> However, the test will fail as expected if I remove the `@udf(input_types=[...], result_type=...)` annotation:
> ```
> > pytest
> =========================================================================================== test session starts ============================================================================================
> platform darwin -- Python 3.7.10, pytest-6.2.2, py-1.10.0, pluggy-0.13.1
> rootdir: /Users/chenyisheng/source/yiksanchan/pytest-flink
> collected 1 item
> 
> tests/test_helloworld.py F                                                                                                                                                                           [100%]
> 
> ================================================================================================= FAILURES =================================================================================================
> _________________________________________________________________________________________________ test_add _________________________________________________________________________________________________
> 
>     def test_add():
> >       assert add(1,1) == 3
> E       assert 2 == 3
> E        +  where 2 = add(1, 1)
> 
> tests/test_helloworld.py:4: AssertionError
> ============================================================================================= warnings summary =============================================================================================
> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>   /usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will stop working
>     from collections import (
> 
> -- Docs: https://docs.pytest.org/en/stable/warnings.html <https://docs.pytest.org/en/stable/warnings.html>
> ========================================================================================= short test summary info ==========================================================================================
> FAILED tests/test_helloworld.py::test_add - assert 2 == 3
> ====================================================================================== 1 failed, 5 warnings in 0.17s =======================================================================================
> ```
> 
> The full example can be found https://github.com/YikSanChan/how-to-pytest-flink <https://github.com/YikSanChan/how-to-pytest-flink>.
> 
> Best,
> Yik San


Re: Failed to unit test PyFlink UDF

Posted by Yik San Chan <ev...@gmail.com>.
Hi Dian,

However users do want to unit test their UDFs, as supported in
https://ci.apache.org/projects/flink/flink-docs-stable/dev/stream/testing.html#testing-user-defined-functions

Even though the examples are for Flink, I believe PyFlink should ideally be
no difference.

What do you think?

Best,
Yik San

On Tue, Mar 23, 2021 at 2:19 PM Dian Fu <di...@gmail.com> wrote:

> Hi Yik San,
>
> This field isn't expected to be exposed to users and so I'm not convinced
> that we should add such an interface/method in Flink.
>
> Regards,
> Dian
>
> On Tue, Mar 23, 2021 at 2:04 PM Yik San Chan <ev...@gmail.com>
> wrote:
>
>> Hi Dian,
>>
>> The ._func method seems to be internal only. Maybe we can add some
>> public-facing method to make it more intuitive for use in unit test?
>> What do you think?
>>
>> Best,
>> Yik San
>>
>> On Tue, Mar 23, 2021 at 2:02 PM Yik San Chan <ev...@gmail.com>
>> wrote:
>>
>>> Hi Dian,
>>>
>>> Thanks! It solves my problem.
>>>
>>> Best,
>>> Yik San
>>>
>>> On Tue, Mar 23, 2021 at 1:29 PM Dian Fu <di...@gmail.com> wrote:
>>>
>>>> H Yik San,
>>>>
>>>> As the udf `add` is decorated with `@udf` decorator, it is no longer a
>>>> simple Python function if you reference `add`. If you execute
>>>> `print(type(add(1, 1)))`, you will see the output is something like "<class
>>>> 'pyflink.table.expression.Expression'>".
>>>>
>>>> You could try the following code: assert add._func(1, 1) == 3
>>>>
>>>> add._func returns the original Python function.
>>>>
>>>> Regards,
>>>> Dian
>>>>
>>>> On Tue, Mar 23, 2021 at 10:56 AM Yik San Chan <
>>>> evan.chanyiksan@gmail.com> wrote:
>>>>
>>>>> (This question is cross-posted on StackOverflow
>>>>> https://stackoverflow.com/questions/66756612/failed-to-unit-test-pyflink-udf
>>>>> )
>>>>>
>>>>> I am using PyFlink and I want to unit test my UDF written in Python.
>>>>>
>>>>> To test the simple udf below:
>>>>>
>>>>> ```python
>>>>> # tasks/helloworld/udf.py
>>>>> from pyflink.table import DataTypes
>>>>> from pyflink.table.udf import udf
>>>>>
>>>>> @udf(input_types=[DataTypes.INT(), DataTypes.INT()],
>>>>> result_type=DataTypes.BIGINT())
>>>>> def add(i, j):
>>>>>     return i + j
>>>>> ```
>>>>>
>>>>> I create a test file that should fail:
>>>>> ```python
>>>>> from tasks.helloworld.udf import add
>>>>>
>>>>> def test_add():
>>>>>     assert add(1,1) == 3
>>>>> ```
>>>>>
>>>>> Sadly, it passes if I run `pytest`:
>>>>> ```
>>>>> > pytest
>>>>> ===========================================================================================
>>>>> test session starts
>>>>> ============================================================================================
>>>>> platform darwin -- Python 3.7.10, pytest-6.2.2, py-1.10.0,
>>>>> pluggy-0.13.1
>>>>> rootdir: /Users/chenyisheng/source/yiksanchan/pytest-flink
>>>>> collected 1 item
>>>>>
>>>>> tests/test_helloworld.py .
>>>>>
>>>>>                                                   [100%]
>>>>>
>>>>> =============================================================================================
>>>>> warnings summary
>>>>> =============================================================================================
>>>>>
>>>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>>>>
>>>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>>>>
>>>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>>>>
>>>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>>>>
>>>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>>>>
>>>>> /usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13:
>>>>> DeprecationWarning: Using or importing the ABCs from 'collections' instead
>>>>> of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will
>>>>> stop working
>>>>>     from collections import (
>>>>>
>>>>>
>>>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/pyflink/table/udf.py:291
>>>>>
>>>>> /usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/pyflink/table/udf.py:291:
>>>>> DeprecationWarning: Using or importing the ABCs from 'collections' instead
>>>>> of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will
>>>>> stop working
>>>>>     if not isinstance(input_types, collections.Iterable) \
>>>>>
>>>>> -- Docs: https://docs.pytest.org/en/stable/warnings.html
>>>>> ======================================================================================
>>>>> 1 passed, 6 warnings in 0.98s
>>>>> =======================================================================================
>>>>> ```
>>>>>
>>>>> However, the test will fail as expected if I remove the
>>>>> `@udf(input_types=[...], result_type=...)` annotation:
>>>>> ```
>>>>> > pytest
>>>>> ===========================================================================================
>>>>> test session starts
>>>>> ============================================================================================
>>>>> platform darwin -- Python 3.7.10, pytest-6.2.2, py-1.10.0,
>>>>> pluggy-0.13.1
>>>>> rootdir: /Users/chenyisheng/source/yiksanchan/pytest-flink
>>>>> collected 1 item
>>>>>
>>>>> tests/test_helloworld.py F
>>>>>
>>>>>                                                   [100%]
>>>>>
>>>>> =================================================================================================
>>>>> FAILURES
>>>>> =================================================================================================
>>>>> _________________________________________________________________________________________________
>>>>> test_add
>>>>> _________________________________________________________________________________________________
>>>>>
>>>>>     def test_add():
>>>>> >       assert add(1,1) == 3
>>>>> E       assert 2 == 3
>>>>> E        +  where 2 = add(1, 1)
>>>>>
>>>>> tests/test_helloworld.py:4: AssertionError
>>>>> =============================================================================================
>>>>> warnings summary
>>>>> =============================================================================================
>>>>>
>>>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>>>>
>>>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>>>>
>>>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>>>>
>>>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>>>>
>>>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>>>>
>>>>> /usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13:
>>>>> DeprecationWarning: Using or importing the ABCs from 'collections' instead
>>>>> of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will
>>>>> stop working
>>>>>     from collections import (
>>>>>
>>>>> -- Docs: https://docs.pytest.org/en/stable/warnings.html
>>>>> =========================================================================================
>>>>> short test summary info
>>>>> ==========================================================================================
>>>>> FAILED tests/test_helloworld.py::test_add - assert 2 == 3
>>>>> ======================================================================================
>>>>> 1 failed, 5 warnings in 0.17s
>>>>> =======================================================================================
>>>>> ```
>>>>>
>>>>> The full example can be found
>>>>> https://github.com/YikSanChan/how-to-pytest-flink.
>>>>>
>>>>> Best,
>>>>> Yik San
>>>>>
>>>>

Re: Failed to unit test PyFlink UDF

Posted by Dian Fu <di...@gmail.com>.
Hi Yik San,

This field isn't expected to be exposed to users and so I'm not convinced
that we should add such an interface/method in Flink.

Regards,
Dian

On Tue, Mar 23, 2021 at 2:04 PM Yik San Chan <ev...@gmail.com>
wrote:

> Hi Dian,
>
> The ._func method seems to be internal only. Maybe we can add some
> public-facing method to make it more intuitive for use in unit test?
> What do you think?
>
> Best,
> Yik San
>
> On Tue, Mar 23, 2021 at 2:02 PM Yik San Chan <ev...@gmail.com>
> wrote:
>
>> Hi Dian,
>>
>> Thanks! It solves my problem.
>>
>> Best,
>> Yik San
>>
>> On Tue, Mar 23, 2021 at 1:29 PM Dian Fu <di...@gmail.com> wrote:
>>
>>> H Yik San,
>>>
>>> As the udf `add` is decorated with `@udf` decorator, it is no longer a
>>> simple Python function if you reference `add`. If you execute
>>> `print(type(add(1, 1)))`, you will see the output is something like "<class
>>> 'pyflink.table.expression.Expression'>".
>>>
>>> You could try the following code: assert add._func(1, 1) == 3
>>>
>>> add._func returns the original Python function.
>>>
>>> Regards,
>>> Dian
>>>
>>> On Tue, Mar 23, 2021 at 10:56 AM Yik San Chan <ev...@gmail.com>
>>> wrote:
>>>
>>>> (This question is cross-posted on StackOverflow
>>>> https://stackoverflow.com/questions/66756612/failed-to-unit-test-pyflink-udf
>>>> )
>>>>
>>>> I am using PyFlink and I want to unit test my UDF written in Python.
>>>>
>>>> To test the simple udf below:
>>>>
>>>> ```python
>>>> # tasks/helloworld/udf.py
>>>> from pyflink.table import DataTypes
>>>> from pyflink.table.udf import udf
>>>>
>>>> @udf(input_types=[DataTypes.INT(), DataTypes.INT()],
>>>> result_type=DataTypes.BIGINT())
>>>> def add(i, j):
>>>>     return i + j
>>>> ```
>>>>
>>>> I create a test file that should fail:
>>>> ```python
>>>> from tasks.helloworld.udf import add
>>>>
>>>> def test_add():
>>>>     assert add(1,1) == 3
>>>> ```
>>>>
>>>> Sadly, it passes if I run `pytest`:
>>>> ```
>>>> > pytest
>>>> ===========================================================================================
>>>> test session starts
>>>> ============================================================================================
>>>> platform darwin -- Python 3.7.10, pytest-6.2.2, py-1.10.0, pluggy-0.13.1
>>>> rootdir: /Users/chenyisheng/source/yiksanchan/pytest-flink
>>>> collected 1 item
>>>>
>>>> tests/test_helloworld.py .
>>>>
>>>>                                                   [100%]
>>>>
>>>> =============================================================================================
>>>> warnings summary
>>>> =============================================================================================
>>>>
>>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>>>
>>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>>>
>>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>>>
>>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>>>
>>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>>>
>>>> /usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13:
>>>> DeprecationWarning: Using or importing the ABCs from 'collections' instead
>>>> of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will
>>>> stop working
>>>>     from collections import (
>>>>
>>>>
>>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/pyflink/table/udf.py:291
>>>>
>>>> /usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/pyflink/table/udf.py:291:
>>>> DeprecationWarning: Using or importing the ABCs from 'collections' instead
>>>> of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will
>>>> stop working
>>>>     if not isinstance(input_types, collections.Iterable) \
>>>>
>>>> -- Docs: https://docs.pytest.org/en/stable/warnings.html
>>>> ======================================================================================
>>>> 1 passed, 6 warnings in 0.98s
>>>> =======================================================================================
>>>> ```
>>>>
>>>> However, the test will fail as expected if I remove the
>>>> `@udf(input_types=[...], result_type=...)` annotation:
>>>> ```
>>>> > pytest
>>>> ===========================================================================================
>>>> test session starts
>>>> ============================================================================================
>>>> platform darwin -- Python 3.7.10, pytest-6.2.2, py-1.10.0, pluggy-0.13.1
>>>> rootdir: /Users/chenyisheng/source/yiksanchan/pytest-flink
>>>> collected 1 item
>>>>
>>>> tests/test_helloworld.py F
>>>>
>>>>                                                   [100%]
>>>>
>>>> =================================================================================================
>>>> FAILURES
>>>> =================================================================================================
>>>> _________________________________________________________________________________________________
>>>> test_add
>>>> _________________________________________________________________________________________________
>>>>
>>>>     def test_add():
>>>> >       assert add(1,1) == 3
>>>> E       assert 2 == 3
>>>> E        +  where 2 = add(1, 1)
>>>>
>>>> tests/test_helloworld.py:4: AssertionError
>>>> =============================================================================================
>>>> warnings summary
>>>> =============================================================================================
>>>>
>>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>>>
>>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>>>
>>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>>>
>>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>>>
>>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>>>
>>>> /usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13:
>>>> DeprecationWarning: Using or importing the ABCs from 'collections' instead
>>>> of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will
>>>> stop working
>>>>     from collections import (
>>>>
>>>> -- Docs: https://docs.pytest.org/en/stable/warnings.html
>>>> =========================================================================================
>>>> short test summary info
>>>> ==========================================================================================
>>>> FAILED tests/test_helloworld.py::test_add - assert 2 == 3
>>>> ======================================================================================
>>>> 1 failed, 5 warnings in 0.17s
>>>> =======================================================================================
>>>> ```
>>>>
>>>> The full example can be found
>>>> https://github.com/YikSanChan/how-to-pytest-flink.
>>>>
>>>> Best,
>>>> Yik San
>>>>
>>>

Re: Failed to unit test PyFlink UDF

Posted by Yik San Chan <ev...@gmail.com>.
Hi Dian,

The ._func method seems to be internal only. Maybe we can add some
public-facing method to make it more intuitive for use in unit test?
What do you think?

Best,
Yik San

On Tue, Mar 23, 2021 at 2:02 PM Yik San Chan <ev...@gmail.com>
wrote:

> Hi Dian,
>
> Thanks! It solves my problem.
>
> Best,
> Yik San
>
> On Tue, Mar 23, 2021 at 1:29 PM Dian Fu <di...@gmail.com> wrote:
>
>> H Yik San,
>>
>> As the udf `add` is decorated with `@udf` decorator, it is no longer a
>> simple Python function if you reference `add`. If you execute
>> `print(type(add(1, 1)))`, you will see the output is something like "<class
>> 'pyflink.table.expression.Expression'>".
>>
>> You could try the following code: assert add._func(1, 1) == 3
>>
>> add._func returns the original Python function.
>>
>> Regards,
>> Dian
>>
>> On Tue, Mar 23, 2021 at 10:56 AM Yik San Chan <ev...@gmail.com>
>> wrote:
>>
>>> (This question is cross-posted on StackOverflow
>>> https://stackoverflow.com/questions/66756612/failed-to-unit-test-pyflink-udf
>>> )
>>>
>>> I am using PyFlink and I want to unit test my UDF written in Python.
>>>
>>> To test the simple udf below:
>>>
>>> ```python
>>> # tasks/helloworld/udf.py
>>> from pyflink.table import DataTypes
>>> from pyflink.table.udf import udf
>>>
>>> @udf(input_types=[DataTypes.INT(), DataTypes.INT()],
>>> result_type=DataTypes.BIGINT())
>>> def add(i, j):
>>>     return i + j
>>> ```
>>>
>>> I create a test file that should fail:
>>> ```python
>>> from tasks.helloworld.udf import add
>>>
>>> def test_add():
>>>     assert add(1,1) == 3
>>> ```
>>>
>>> Sadly, it passes if I run `pytest`:
>>> ```
>>> > pytest
>>> ===========================================================================================
>>> test session starts
>>> ============================================================================================
>>> platform darwin -- Python 3.7.10, pytest-6.2.2, py-1.10.0, pluggy-0.13.1
>>> rootdir: /Users/chenyisheng/source/yiksanchan/pytest-flink
>>> collected 1 item
>>>
>>> tests/test_helloworld.py .
>>>
>>>                                                 [100%]
>>>
>>> =============================================================================================
>>> warnings summary
>>> =============================================================================================
>>>
>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>>
>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>>
>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>>
>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>>
>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>>
>>> /usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13:
>>> DeprecationWarning: Using or importing the ABCs from 'collections' instead
>>> of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will
>>> stop working
>>>     from collections import (
>>>
>>>
>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/pyflink/table/udf.py:291
>>>
>>> /usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/pyflink/table/udf.py:291:
>>> DeprecationWarning: Using or importing the ABCs from 'collections' instead
>>> of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will
>>> stop working
>>>     if not isinstance(input_types, collections.Iterable) \
>>>
>>> -- Docs: https://docs.pytest.org/en/stable/warnings.html
>>> ======================================================================================
>>> 1 passed, 6 warnings in 0.98s
>>> =======================================================================================
>>> ```
>>>
>>> However, the test will fail as expected if I remove the
>>> `@udf(input_types=[...], result_type=...)` annotation:
>>> ```
>>> > pytest
>>> ===========================================================================================
>>> test session starts
>>> ============================================================================================
>>> platform darwin -- Python 3.7.10, pytest-6.2.2, py-1.10.0, pluggy-0.13.1
>>> rootdir: /Users/chenyisheng/source/yiksanchan/pytest-flink
>>> collected 1 item
>>>
>>> tests/test_helloworld.py F
>>>
>>>                                                 [100%]
>>>
>>> =================================================================================================
>>> FAILURES
>>> =================================================================================================
>>> _________________________________________________________________________________________________
>>> test_add
>>> _________________________________________________________________________________________________
>>>
>>>     def test_add():
>>> >       assert add(1,1) == 3
>>> E       assert 2 == 3
>>> E        +  where 2 = add(1, 1)
>>>
>>> tests/test_helloworld.py:4: AssertionError
>>> =============================================================================================
>>> warnings summary
>>> =============================================================================================
>>>
>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>>
>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>>
>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>>
>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>>
>>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>>
>>> /usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13:
>>> DeprecationWarning: Using or importing the ABCs from 'collections' instead
>>> of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will
>>> stop working
>>>     from collections import (
>>>
>>> -- Docs: https://docs.pytest.org/en/stable/warnings.html
>>> =========================================================================================
>>> short test summary info
>>> ==========================================================================================
>>> FAILED tests/test_helloworld.py::test_add - assert 2 == 3
>>> ======================================================================================
>>> 1 failed, 5 warnings in 0.17s
>>> =======================================================================================
>>> ```
>>>
>>> The full example can be found
>>> https://github.com/YikSanChan/how-to-pytest-flink.
>>>
>>> Best,
>>> Yik San
>>>
>>

Re: Failed to unit test PyFlink UDF

Posted by Yik San Chan <ev...@gmail.com>.
Hi Dian,

Thanks! It solves my problem.

Best,
Yik San

On Tue, Mar 23, 2021 at 1:29 PM Dian Fu <di...@gmail.com> wrote:

> H Yik San,
>
> As the udf `add` is decorated with `@udf` decorator, it is no longer a
> simple Python function if you reference `add`. If you execute
> `print(type(add(1, 1)))`, you will see the output is something like "<class
> 'pyflink.table.expression.Expression'>".
>
> You could try the following code: assert add._func(1, 1) == 3
>
> add._func returns the original Python function.
>
> Regards,
> Dian
>
> On Tue, Mar 23, 2021 at 10:56 AM Yik San Chan <ev...@gmail.com>
> wrote:
>
>> (This question is cross-posted on StackOverflow
>> https://stackoverflow.com/questions/66756612/failed-to-unit-test-pyflink-udf
>> )
>>
>> I am using PyFlink and I want to unit test my UDF written in Python.
>>
>> To test the simple udf below:
>>
>> ```python
>> # tasks/helloworld/udf.py
>> from pyflink.table import DataTypes
>> from pyflink.table.udf import udf
>>
>> @udf(input_types=[DataTypes.INT(), DataTypes.INT()],
>> result_type=DataTypes.BIGINT())
>> def add(i, j):
>>     return i + j
>> ```
>>
>> I create a test file that should fail:
>> ```python
>> from tasks.helloworld.udf import add
>>
>> def test_add():
>>     assert add(1,1) == 3
>> ```
>>
>> Sadly, it passes if I run `pytest`:
>> ```
>> > pytest
>> ===========================================================================================
>> test session starts
>> ============================================================================================
>> platform darwin -- Python 3.7.10, pytest-6.2.2, py-1.10.0, pluggy-0.13.1
>> rootdir: /Users/chenyisheng/source/yiksanchan/pytest-flink
>> collected 1 item
>>
>> tests/test_helloworld.py .
>>
>>                                                 [100%]
>>
>> =============================================================================================
>> warnings summary
>> =============================================================================================
>>
>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>
>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>
>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>
>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>
>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>
>> /usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13:
>> DeprecationWarning: Using or importing the ABCs from 'collections' instead
>> of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will
>> stop working
>>     from collections import (
>>
>>
>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/pyflink/table/udf.py:291
>>
>> /usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/pyflink/table/udf.py:291:
>> DeprecationWarning: Using or importing the ABCs from 'collections' instead
>> of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will
>> stop working
>>     if not isinstance(input_types, collections.Iterable) \
>>
>> -- Docs: https://docs.pytest.org/en/stable/warnings.html
>> ======================================================================================
>> 1 passed, 6 warnings in 0.98s
>> =======================================================================================
>> ```
>>
>> However, the test will fail as expected if I remove the
>> `@udf(input_types=[...], result_type=...)` annotation:
>> ```
>> > pytest
>> ===========================================================================================
>> test session starts
>> ============================================================================================
>> platform darwin -- Python 3.7.10, pytest-6.2.2, py-1.10.0, pluggy-0.13.1
>> rootdir: /Users/chenyisheng/source/yiksanchan/pytest-flink
>> collected 1 item
>>
>> tests/test_helloworld.py F
>>
>>                                                 [100%]
>>
>> =================================================================================================
>> FAILURES
>> =================================================================================================
>> _________________________________________________________________________________________________
>> test_add
>> _________________________________________________________________________________________________
>>
>>     def test_add():
>> >       assert add(1,1) == 3
>> E       assert 2 == 3
>> E        +  where 2 = add(1, 1)
>>
>> tests/test_helloworld.py:4: AssertionError
>> =============================================================================================
>> warnings summary
>> =============================================================================================
>>
>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>
>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>
>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>
>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>
>> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>>
>> /usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13:
>> DeprecationWarning: Using or importing the ABCs from 'collections' instead
>> of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will
>> stop working
>>     from collections import (
>>
>> -- Docs: https://docs.pytest.org/en/stable/warnings.html
>> =========================================================================================
>> short test summary info
>> ==========================================================================================
>> FAILED tests/test_helloworld.py::test_add - assert 2 == 3
>> ======================================================================================
>> 1 failed, 5 warnings in 0.17s
>> =======================================================================================
>> ```
>>
>> The full example can be found
>> https://github.com/YikSanChan/how-to-pytest-flink.
>>
>> Best,
>> Yik San
>>
>

Re: Failed to unit test PyFlink UDF

Posted by Dian Fu <di...@gmail.com>.
H Yik San,

As the udf `add` is decorated with `@udf` decorator, it is no longer a
simple Python function if you reference `add`. If you execute
`print(type(add(1, 1)))`, you will see the output is something like "<class
'pyflink.table.expression.Expression'>".

You could try the following code: assert add._func(1, 1) == 3

add._func returns the original Python function.

Regards,
Dian

On Tue, Mar 23, 2021 at 10:56 AM Yik San Chan <ev...@gmail.com>
wrote:

> (This question is cross-posted on StackOverflow
> https://stackoverflow.com/questions/66756612/failed-to-unit-test-pyflink-udf
> )
>
> I am using PyFlink and I want to unit test my UDF written in Python.
>
> To test the simple udf below:
>
> ```python
> # tasks/helloworld/udf.py
> from pyflink.table import DataTypes
> from pyflink.table.udf import udf
>
> @udf(input_types=[DataTypes.INT(), DataTypes.INT()],
> result_type=DataTypes.BIGINT())
> def add(i, j):
>     return i + j
> ```
>
> I create a test file that should fail:
> ```python
> from tasks.helloworld.udf import add
>
> def test_add():
>     assert add(1,1) == 3
> ```
>
> Sadly, it passes if I run `pytest`:
> ```
> > pytest
> ===========================================================================================
> test session starts
> ============================================================================================
> platform darwin -- Python 3.7.10, pytest-6.2.2, py-1.10.0, pluggy-0.13.1
> rootdir: /Users/chenyisheng/source/yiksanchan/pytest-flink
> collected 1 item
>
> tests/test_helloworld.py .
>
>                                               [100%]
>
> =============================================================================================
> warnings summary
> =============================================================================================
>
> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>
> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>
> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>
> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>
> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>
> /usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13:
> DeprecationWarning: Using or importing the ABCs from 'collections' instead
> of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will
> stop working
>     from collections import (
>
>
> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/pyflink/table/udf.py:291
>
> /usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/pyflink/table/udf.py:291:
> DeprecationWarning: Using or importing the ABCs from 'collections' instead
> of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will
> stop working
>     if not isinstance(input_types, collections.Iterable) \
>
> -- Docs: https://docs.pytest.org/en/stable/warnings.html
> ======================================================================================
> 1 passed, 6 warnings in 0.98s
> =======================================================================================
> ```
>
> However, the test will fail as expected if I remove the
> `@udf(input_types=[...], result_type=...)` annotation:
> ```
> > pytest
> ===========================================================================================
> test session starts
> ============================================================================================
> platform darwin -- Python 3.7.10, pytest-6.2.2, py-1.10.0, pluggy-0.13.1
> rootdir: /Users/chenyisheng/source/yiksanchan/pytest-flink
> collected 1 item
>
> tests/test_helloworld.py F
>
>                                               [100%]
>
> =================================================================================================
> FAILURES
> =================================================================================================
> _________________________________________________________________________________________________
> test_add
> _________________________________________________________________________________________________
>
>     def test_add():
> >       assert add(1,1) == 3
> E       assert 2 == 3
> E        +  where 2 = add(1, 1)
>
> tests/test_helloworld.py:4: AssertionError
> =============================================================================================
> warnings summary
> =============================================================================================
>
> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>
> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>
> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>
> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>
> ../../../../../usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13
>
> /usr/local/anaconda3/envs/pyflink-quickstart/lib/python3.7/site-packages/py4j/java_collections.py:13:
> DeprecationWarning: Using or importing the ABCs from 'collections' instead
> of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will
> stop working
>     from collections import (
>
> -- Docs: https://docs.pytest.org/en/stable/warnings.html
> =========================================================================================
> short test summary info
> ==========================================================================================
> FAILED tests/test_helloworld.py::test_add - assert 2 == 3
> ======================================================================================
> 1 failed, 5 warnings in 0.17s
> =======================================================================================
> ```
>
> The full example can be found
> https://github.com/YikSanChan/how-to-pytest-flink.
>
> Best,
> Yik San
>