如何使用 python pytest 断言 2 个数据帧

Posted

技术标签:

【中文标题】如何使用 python pytest 断言 2 个数据帧【英文标题】:How to assert 2 data frames using python pytest 【发布时间】:2022-01-12 10:56:47 【问题描述】:

我是 pytest 和数据框的新手。任何帮助在这里表示赞赏。 我有 2 个数据框。第一个数据帧从 csv 文件中获取,第二个数据帧从数据库中获取。我需要断言 df1 中的所有行以与 df2 进行比较。 df2 失败的预期结果是名称“James”不等于“Linda”。我正在寻找 pytest 断言。提前致谢。

数据框1: |身份证 |姓名 |出生日期 |电话| |:---- |:-----: | -----:|-----:| | 1 |詹姆斯 | 2000 年 1 月 9 日|0101010| | 2 |山姆 | 9/01/1989|0202020|

数据框 2: |身份证 |姓名 |出生日期 |电话| |:---- |:-----: | -----:|-----:| | 1 |琳达 | 2000 年 1 月 9 日|0101010| | 2 |山姆 | 9/01/1989|0202020|

源代码

    from sqlalchemy import create_engine
    import pymysql
    import pandas as pd
    df1 = pd.read_csv(r'Filename.csv')
    sqlEngine = create_engine('mysql+pymysql://root:root@localhost', pool_recycle=3600)
    dbConnection = sqlEngine.connect()
    df2 = pd.read_sql("SELECT * FROM tablename", dbConnection);
     dbConnection.close()
    print(df1)
    print(df2)
    def test_compare_database():
    for a, b in zip(df1, df2):
        yield a, b
    @pytest.mark.parametrize('a, b', test_compare_database())
   def test_compare_src_trg_data(a, b):
    assert a == b

结果 - 当我运行上述代码时,只比较两个数据帧的第一行。

通过测试/main_test.py::test_compare_src_trg_data[ID-ID] 0.00 通过测试/main_test.py::test_compare_src_trg_data[Name-Name] 0.00 通过测试/main_test.py::test_compare_src_trg_data[DOB-DOB] 0.00 通过测试/main_test.py::test_compare_src_trg_data[Phone-Phone] 0.00

【问题讨论】:

【参考方案1】:

您可以使用以下功能:

import pandas as pd
pd.testing.assert_frame_equal(a,b)

【讨论】:

嗨@Antoine Dubuis,非常感谢您的回复。当第一个值断言失败时,此函数将失败。有没有办法我仍然可以断言数据框中的所有值而不退出?

以上是关于如何使用 python pytest 断言 2 个数据帧的主要内容,如果未能解决你的问题,请参考以下文章

pytest学习和使用5-Pytest和Unittest中的断言如何使用?

pytest-断言

在 Python 中测试另一个线程的结果时,当断言失败时,PyTest 测试套件是不是通过?

pytest如何调用同一浏览器

[接口测试_B] 03 Pytest断言处理_assert和异常断言

pytest:断言几乎相等