2

我之前也问过这个,但对答案不满意。

我用什么:

  • 在 Django/python 网站上工作。
  • 在本地在 python 虚拟环境上完成开发。
  • 使用 GIT 作为我的 SCM
  • 为 GIT 的开发人员和生产分支部署了单独的虚拟服务器
  • 使用 Jenkins CI 进行持续集成。为 Jenkins 部署单独的虚拟服务器

在职的:

  • 我有网站的单元测试、冒烟测试和集成测试。Jenkins 已经设置好,每当代码从我的本地 git 分支推送到 git repo 上的开发人员和生产分支时,都会在 Jenkins 中触发构建。

问题:

  • 当我执行“python manage.py test”时,我的测试在本地通过
  • 当代码被推送到其他分支(开发人员和生产)时,Jenkins 中的随机测试(主要是单元测试)失败。
  • 测试失败后,如果我通过按 Jenkins 中的“立即构建”按钮手动进行构建,测试通常会通过并且构建成功。
  • 有时,当没有对代码进行任何更改并且代码仍被推送到这些分支时,Jenkins 中的测试会随机失败。

一些常见错误:

  • 断言错误:302!= 200
  • TypeError:“NoneType”对象不可下标
  • IndexError:列表索引超出范围
  • AssertionError: datetime.datetime(2012, 12, 5, 0, 0, 27, 218397) != datetime.datetime(2012, 12, 5, 0, 0, 27, 239884)
  • AssertionError:响应重定向到“x”预期“y”

迄今为止的故障排除:

  • 在我的机器和虚拟服务器上本地运行所有测试。他们运行良好。
  • 在本地和虚拟服务器上运行单个失败的测试。他们运行良好。
  • 试图重新创建失败的条件,但截至目前,测试正在通过。

我看到的唯一问题是,每当代码被推送到开发人员和生产分支时,随机测试失败就会出现。一些测试反复失败。

谁能告诉我我还能做些什么来解决这个问题。我试着用谷歌搜索这个问题,但徒劳无功。我知道 xunitpatterns 网站对不稳定的测试行为有一些很好的见解,但它没有帮助,因为我在那里尝试了大部分东西。

4

2 回答 2

1

这是一个非常难以回答的问题。

django 开发人员可能会陷入一些常见的陷阱,但我不知道。

除此之外,这只是正常的调试:

  1. 找到重现故障的方法。如果您可以在自己的笔记本电脑上使测试失败,那就太好了。如果你不能,你必须在它失败的机器上调试它。

  2. 获取更多信息。断言失败时可以打印自定义消息。打印相关变量的值。将调试打印输出添加到您的代码和测试中。看看事情在哪里不是他们应该的样子。谷歌如何使用 Python 调试器。

保持开放的心态。错误可能出现在任何地方:硬件、软件环境、您的代码或测试代码中。但是,除非你是上帝,Linus Torvalds 或 Brian Kernighan,否则首先假设错误是从你的键盘和座椅靠背之间的某个地方开始的。(而且上面的三个黑客也都犯了错误。)

于 2013-01-07T22:41:51.597 回答
-1

对于这个问题 - AssertionError: datetime.datetime(2012, 12, 5, 0, 0, 27, 218397) != datetime.datetime(2012, 12, 5, 0, 0, 27, 239884)

我使用 freezegun 库使日期时间更可预测。我不确定为什么会出现这个问题,但冻结日期和时间在一定程度上有所帮助。

例子:

from freezegun import freeze_time
import datetime
import unittest


@freeze_time("2012-01-14")

def test():

assert datetime.datetime.now() == datetime.datetime(2012, 1, 14)
于 2018-01-25T09:59:08.587 回答