0

我有一个用 1.5.2 编写的测试c#,我使用的是SpecRun1.5.2 版。

我的部分Default.srprofile外观如下:

<Execution stopAfterFailures="20" testThreadCount="5" testSchedulingMode="Sequential" retryFor="Failing" retryCount="3" />

有一堆测试使用数据库中的一些数据,所以测试首先创建这些数据。不幸的是,当 5 个线程并行运行时,我偶尔会得到一个sql deadlock error很好的结果,因为这些线程试图同时写入数据。

有没有机会增加线程执行的延迟?有什么比线程应该在 5s 秒间隔内启动或类似的东西要说的吗?

4

2 回答 2

2

没有选择延迟开始,我不会接受这个想法。这只是一个快速修复。当稍后同时执行测试时,您将再次收到此错误。

我想到了解决问题的 2 个选项:

  • 捕获死锁异常并尝试再次添加您的数据。

  • 为每个线程使用不同的数据库。您可以使用 ConfigTransformation 部署步骤更改连接字符串,以便为每个线程访问单独的数据库。文档在这里:http ://specflow.org/plus/documentation/SpecFlowPlus-Runner-Profiles/#DeploymentTransformation有不同值的占位符:http: //specflow.org/plus/documentation/SpecFlowPlus-Runner-Profiles/#占位符


完全披露:我是 SpecFlow 和 SpecFlow+ 的开发人员之一。

于 2017-01-13T09:30:48.310 回答
1

除了先前的答案之外,如果您要捕获死锁和重试,我还会在尝试之间添加一些随机时间间隔,这样您就不会在每次重试迭代时遇到相同的死锁。我们为 API/DB 并发请求这样做,它对我们来说很好,因为多个数据库/环境需要更多的资源和金钱来参与。

于 2021-02-18T09:51:04.247 回答