![pytest框架与自动化测试应用](https://wfqqreader-1252317822.image.myqcloud.com/cover/848/47216848/b_47216848.jpg)
上QQ阅读APP看书,第一时间看更新
2.3.5 为失败断言添加自定义的说明
有时需要在断言时显示自定义的说明,可以直接在断言后面添加提示信息,代码如下:
![](https://epubservercos.yuewen.com/E902B4/26581161801257906/epubprivate/OEBPS/Images/Figure-P50_31897.jpg?sign=1739293658-XCGqiIv4RB27dN0UfRJTQT1OlLibAJKk-0-d7cded2472ca5a481f1ff1e89f6db5ac)
执行的结果如下:
![](https://epubservercos.yuewen.com/E902B4/26581161801257906/epubprivate/OEBPS/Images/Figure-P50_31898.jpg?sign=1739293658-3PoMj5LbFkUKUee2115UBZxpELzPPHGR-0-664e9621beb68f8f09e633172e9d06ea)
上述代码是比较两个基本数据,当比较两个对象实例时,可通过重写它的__eq__()方法比对实现。
代码如下:
![](https://epubservercos.yuewen.com/E902B4/26581161801257906/epubprivate/OEBPS/Images/Figure-P50_31900.jpg?sign=1739293658-RIT0ztb5akObS9Ksp7NLJnFvWRFxDxFX-0-89bc28792965dd0abb60d1244e4d2b3f)
但当执行这个用例时其结果并不能直观地从中看出来失败的原因assert <test_fail_cus.Foo object at 0x109a7de10>==<test_fail_cus.Foo object at 0x109a7dc88>。
![](https://epubservercos.yuewen.com/E902B4/26581161801257906/epubprivate/OEBPS/Images/Figure-P51_31903.jpg?sign=1739293658-OIFtIuJJOq5TfhxvNuOT2IF0TRNmYYEJ-0-e87e01be4ecbd947c52dc53772d84fac)
在这种情况下,如何比较两个实例呢?
通常有两种方式:第一种是重写__repr__()方法,第二种是用钩子的方法。下面将详细说明具体如何实现。
第一种方法:通过重写Foo的__repr__()方法,把详细信息显示出来。
在上述代码中添加下面的方法,代码如下:
![](https://epubservercos.yuewen.com/E902B4/26581161801257906/epubprivate/OEBPS/Images/Figure-P51_31905.jpg?sign=1739293658-9f8Q3KCgaANtR3IsYdBjSaIZaAm2A4Ur-0-f8925da7576cbe8740fa8c6725bbcfab)
当执行用例时,能看到失败的原因,其原因是因为1==2不成立。
代码如下:
![](https://epubservercos.yuewen.com/E902B4/26581161801257906/epubprivate/OEBPS/Images/Figure-P51_31906.jpg?sign=1739293658-Zpr4Eq9MHEu5RnmiDxeRHZmf2x7FVW1L-0-1671e768d6b1d02abdb51e19870c8f2b)
第二种方法:使用钩子的方法加断言的详细信息。
在当前目录下新建conftest.py文件,在conftest.py文件中使用pytest _assertrepr_compare这个钩子方法添加自定义的失败说明,在本目录下创建conftest.py文件(这个文件中的内容会供本目录中的所有文件共享,pytest执行时先执行这个文件中的内容再执行测试用例,在3.2节和5.4节将分别详细讲解conftest.py和钩子的用法),在文件中输入下面代码。自定义失败说明后再执行test_fail_cus.py。
代码如下:
![](https://epubservercos.yuewen.com/E902B4/26581161801257906/epubprivate/OEBPS/Images/Figure-P52_31909.jpg?sign=1739293658-jJuBx9vcZtbIo14wkzO5qxpcpGtKVrVZ-0-57112c514381e53bafc7754e30b70903)
执行后的结果如下,此时会看到一个更友好的失败说明,在出现错的代码行下面有具体的自定义的提示信息。
代码如下:
![](https://epubservercos.yuewen.com/E902B4/26581161801257906/epubprivate/OEBPS/Images/Figure-P52_31910.jpg?sign=1739293658-70pzee6EJT2kbV2X1Aq3yyQNvuAeDSow-0-1c202a707450fca9ae1d44e2cc2f7af8)