如何使用 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中的断言如何使用?
在 Python 中测试另一个线程的结果时,当断言失败时,PyTest 测试套件是不是通过?