python - python unittest.assertEqual - 如何在 x 秒后终止?
问题描述
我是一个重度、重度、使用差异化测试方法的用户,所以我倾向于将复杂的多行文本字符串提供给unittest.assertEqual
. 这种类型的典型使用是提供一大块 html,我通常会用它进行预处理beautifulsoup.prettify
我发现,当字符串足够大且足够不同时,assertEqual
将花费大量时间,或者根本不返回。如果我ctrl-c这个过程,我经常会发现它被打断了difflib.py
。有时,需要pkill -laf 'ython.+test'
在另一个终端中使用。
这是一种简单的 Python 方法,我可以在概念上执行:
unittest.assertEqual(a,b, timeout=5)
这意味着5 秒后,终止并告诉我它们不相等,您无法获得更多详细信息。
当然,我假设如果我传入assertEqual.msg
参数,该函数将不会调用 difflib.py。有趣的是,虽然diff
命令行实用程序通常会在不到一秒的时间内返回结果,但不太聪明的差异,如 macOS 上的 Kaleidoscope,通常也会挂在这些差异上。
理想情况下,https://pypi.org/project/func-timeout/会做我想要的。但它是 LGPL,所以不是我的 MIT 应用程序的选项。
我已经有一些类似的基于线程的代码func_timeout
,用于在适当的延迟后终止 SQL 连接尝试。我想我可以用那个。我还可以启动 asubprocess.popen(diff,..., timeout=5)
来调用操作系统的 native diff
,因为我的字符串通常也会保存到文件中。
在我看来,这是一个推动 assertEqual 的人经常遇到的问题,所以想知道人们采取了哪些方法。
解决方案
unittest.assertTrue(a == b, "strings not equal")
您可以通过使用which 避免使用 diff来解决整个问题。
推荐阅读
- spring-boot - 为什么日期字段不会在春季启动中进入我的数据库列?
- html - HTML:如何使视频适应 iFrame 大小?
- c++ - 在递归树中合并同一级别的节点
- c++ - 有没有办法通过 C++ 字符串中的子类名称将超类指针转换为子类指针?
- python-3.x - 获取下一个项目每个项目调用一个函数
- web-scraping - 我正在使用 scrapy 从 Yelp 中抓取数据。我看不到任何错误,但没有从蜘蛛中提到的 StartURLs 中抓取数据
- android - Android 深层链接 - 具有相同 url 的多个重定向
- google-cloud-platform - 如何在 BigQuery 中创建外部数据源并连接到 composer cloud sql?
- angular - 离子应用程序没有导航到正确的页面
- python - 检查 int 大小的有趣方法