Specrun - 线程延迟
Specrun - delay of threads
我有一个用 c#
编写的测试,我正在使用 SpecRun
版本 1.5.2。
我的部分Default.srprofile
如下所示:
<Execution stopAfterFailures="20" testThreadCount="5" testSchedulingMode="Sequential" retryFor="Failing" retryCount="3" />
有一堆测试正在使用数据库中的一些数据,因此测试首先创建该数据。不幸的是,当 5 个线程 运行 并行时,我偶尔会得到 sql deadlock error
这很好,因为这些线程试图同时写入数据。
是否有机会添加线程执行延迟?有什么比线程应该在 5s 秒间隔内启动或类似的东西要说的吗?
没有延迟开始的选项,我不会同意这个想法。这只是一个快速修复。当后面的测试同时执行时,你会再次得到这个错误。
我想到了 2 个解决问题的选项:
捕获死锁异常并再次尝试添加数据。
每个线程使用不同的数据库。您可以使用 ConfigTransformation Deployment 步骤更改连接字符串,以便为每个线程访问单独的数据库。文档在这里:http://specflow.org/plus/documentation/SpecFlowPlus-Runner-Profiles/#DeploymentTransformation There are placeholders for different values: http://specflow.org/plus/documentation/SpecFlowPlus-Runner-Profiles/#Placeholders
完全披露:我是 SpecFlow 和 SpecFlow+ 的开发者之一。
除了之前的答案之外,如果您要捕捉死锁并重试,我还会在尝试之间添加一些随机时间间隔,这样您就不会在每次重试迭代中遇到相同的死锁。我们为 API/DB 个并发请求执行此操作并且对我们来说效果很好,因为多个 databases/environments 将需要更多的资源和资金。
我有一个用 c#
编写的测试,我正在使用 SpecRun
版本 1.5.2。
我的部分Default.srprofile
如下所示:
<Execution stopAfterFailures="20" testThreadCount="5" testSchedulingMode="Sequential" retryFor="Failing" retryCount="3" />
有一堆测试正在使用数据库中的一些数据,因此测试首先创建该数据。不幸的是,当 5 个线程 运行 并行时,我偶尔会得到 sql deadlock error
这很好,因为这些线程试图同时写入数据。
是否有机会添加线程执行延迟?有什么比线程应该在 5s 秒间隔内启动或类似的东西要说的吗?
没有延迟开始的选项,我不会同意这个想法。这只是一个快速修复。当后面的测试同时执行时,你会再次得到这个错误。
我想到了 2 个解决问题的选项:
捕获死锁异常并再次尝试添加数据。
每个线程使用不同的数据库。您可以使用 ConfigTransformation Deployment 步骤更改连接字符串,以便为每个线程访问单独的数据库。文档在这里:http://specflow.org/plus/documentation/SpecFlowPlus-Runner-Profiles/#DeploymentTransformation There are placeholders for different values: http://specflow.org/plus/documentation/SpecFlowPlus-Runner-Profiles/#Placeholders
完全披露:我是 SpecFlow 和 SpecFlow+ 的开发者之一。
除了之前的答案之外,如果您要捕捉死锁并重试,我还会在尝试之间添加一些随机时间间隔,这样您就不会在每次重试迭代中遇到相同的死锁。我们为 API/DB 个并发请求执行此操作并且对我们来说效果很好,因为多个 databases/environments 将需要更多的资源和资金。