我已经在空手道中实现了API测试的并行执行,并且效果很好。但是我想知道在空手道中是否也可以并行运行UI测试。
我有一个约40个功能文件的测试套件,每个套件都正在执行1个场景。但是这些场景中的每一个都有多个步骤,以调用其他可重用的功能文件,从而形成端到端的流程。这是一个这样的测试的代码片段:
Scenario: Accept New CSA Agreement
#1 Create Agreement
When def party_create_agreement = call read('./../Features/CreateAgreement.feature') { shared_agrname: '#(SharedAgreementName)' , local_agrname: '#(LocalAgremeentName)' , agr_type: '#(AgreementType)' }
#2 Cpty retrieve above agmt
When def cpty_read_agreement = call read('./../Features/CptyReadAndAccept.feature') { shared_agrname: '#(SharedAgreementName)' }
#3 Cpty Local change
#When def cpty_localchange = call read('./../Features/CptyLocalchange.feature') { shared_agrname: '#(SharedAgreementName)' }
#4 Party Amend Active
When def party_amendactive = call read('./../Features/PartyAmendActive.feature') { shared_agrname: '#(SharedAgreementName)' }
#5 Cpty Reject Change
When def cpty_rejectchange = call read('./../Features/CptyReject.feature'){ shared_agrname: '#(SharedAgreementName)' }
每种情况都有某些步骤,如上所示。有时5,有时8等 顺序运行40个场景大约需要1.5个小时,我想知道是否可以实现并行化。
增加并行运行器java文件中的线程数会创建竞争条件,因为多个线程在同一功能文件中执行不同的步骤。我已经确保从功能文件中调用的java方法都是线程安全的,但是从我注意到的情况来看,线程在同一功能文件中执行步骤会导致错误。例如,在上述情况下,步骤3尝试在另一个线程等执行步骤2之前在单独的线程上执行,因此会导致错误。
这是测试运行器文件中的代码段,我在其中更改了线程数:
public class TestRunner {
@org.junit.Test
public void testParallel() {
String karateOutputPath = "target/cucumber-html-reports";
Results stats = Runner.parallel(getClass(), 1, karateOutputPath);
generateReport(karateOutputPath);
assertTrue("there are scenario failures", stats.getFailCount() == 0);
}
在下一行中将数字从1更改为3会创建3个线程
Results stats = Runner.parallel(getClass(), 1, karateOutputPath);
有没有一种方法可以实现并行性,以便每个线程仅执行一个完整功能,而其他线程执行其他功能文件,而不是同一功能文件中的步骤?这意味着如果我有3个线程,线程1可以执行功能文件1,线程2可以执行功能文件3,线程3可以执行功能2,依此类推。有办法控制吗?还是在空手道中实现此目的的方法?
这里的任何帮助或指导都会有很大帮助。