并行运行空手道UI测试

时间:2020-11-06 10:19:46

标签: karate

我已经在空手道中实现了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,依此类推。有办法控制吗?还是在空手道中实现此目的的方法?

这里的任何帮助或指导都会有很大帮助。

0 个答案:

没有答案