我有一个用c#
编写的测试,我正在使用SpecRun
版本1.5.2。
我的Default.srprofile
部分内容如下:
<Execution stopAfterFailures="20" testThreadCount="5" testSchedulingMode="Sequential" retryFor="Failing" retryCount="3" />
有许多测试正在使用来自db的一些数据,因此测试首先创建该数据。不幸的是,当5个线程并行运行时,我偶尔会得到一个sql deadlock error
,这很好,因为这些线程试图同时写入数据。
是否有机会添加线程执行延迟?比线程要说的话应该在5s秒间隔或类似的东西开始?
答案 0 :(得分:2)
没有延迟开始的选择,我不会接受这个想法。这只是一个快速解决方案。当后续测试同时执行时,您将再次收到此错误。
我想到了解决问题的2个选项:
捕获死锁异常并尝试重新添加数据。
为每个线程使用不同的数据库。您可以使用ConfigTransformation Deployment步骤更改连接字符串以访问每个线程的单独数据库。 Docu在这里:http://specflow.org/plus/documentation/SpecFlowPlus-Runner-Profiles/#DeploymentTransformation有不同值的占位符:http://specflow.org/plus/documentation/SpecFlowPlus-Runner-Profiles/#Placeholders
完全披露:我是SpecFlow和SpecFlow +的开发人员之一。
答案 1 :(得分:1)
除了前面的答案,如果你去捕捉死锁和重试,我还会在尝试之间添加一些随机时间间隔,这样你就不会在每次重试迭代时遇到相同的死锁。我们为 API/DB 并发请求执行此操作,这对我们来说效果很好,因为涉及多个数据库/环境需要更多资源和资金。