You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Java Selenium TestNG测试用例按原顺序重复执行4次?

Got it, let's figure out how to get your entire TestNG test sequence to run 4 times in the original priority order—no messy single-method repeats, just full cycles of your tests as they’re written. Here are three practical ways to make this work:

This approach keeps your existing @Test methods intact and ensures each full test cycle runs sequentially (one complete pass of all tests before starting the next).

First, add a factory method to your test class that creates 4 instances of itself:

// Add this to your existing test class
@Factory
public Object[] createTestInstances() {
    // Create 4 instances to run 4 full cycles
    Object[] testInstances = new Object[4];
    for (int i = 0; i < 4; i++) {
        testInstances[i] = new YourBackupTestClass(); // Replace with your actual class name
    }
    return testInstances;
}

Next, update your TestNG suite XML to force TestNG to run all methods of one instance before moving to the next. Add group-by-instances="true" to your <test> tag:

<suite name="BackupTestSuite">
    <test name="FullBackupCycleTests" group-by-instances="true" preserve-order="true">
        <classes>
            <class name="com.your.package.YourBackupTestClass" /> <!-- Replace with your class path -->
        </classes>
    </test>
</suite>

Key Tip: Ensure your class member variables (like backupMap, backupNameDevice) are not static. Each factory instance will have its own copy, so you won’t get data leakage between test cycles.

2. Duplicate Test Class Entries in TestNG XML

If you prefer not to add code to your test class, you can manually list your test class 4 times in the suite XML. Each entry will create a new instance and run the full test sequence:

<suite name="BackupTestSuite" preserve-order="true">
    <test name="RepeatedBackupTests">
        <classes>
            <class name="com.your.package.YourBackupTestClass" />
            <class name="com.your.package.YourBackupTestClass" />
            <class name="com.your.package.YourBackupTestClass" />
            <class name="com.your.package.YourBackupTestClass" />
        </classes>
    </test>
</suite>

This works similarly to the factory method—each class entry runs a full cycle of your tests. Again, keep member variables non-static to avoid cross-cycle issues.

3. Encapsulate the Full Flow in a Single Test Method

If you don’t mind restructuring your code a bit, wrap your entire test sequence into one method and use TestNG’s invocationCount to repeat it 4 times:

// Replace your individual @Test methods with this single method (adjust as needed)
@Test(invocationCount = 4)
public void fullBackupTestCycle() throws ApiException, Exception {
    // Step 1: Execute addBackupByDevice logic
    String[] devices = {nonLabelDevice.vendor + "-" + nonLabelDevice.ip};
    BackupRow backupRow = backupPage.addNewBackupByDevices(devices);
    backupNameDevice = backupRow.backupNameTxt;
    Assert.assertNotNull(backupRow, "failed to add backup=[first] to server");
    info("user=[%s] added successfully" , backupRow);
    addToBackupMap(backupNameDevice);

    // Step 2: Execute verifyInLogBackupJobStarted logic
    ScheduleRequest schedule = (ScheduleRequest) backupMap.values().toArray()[0]; // Match your dataProvider logic
    servicesLog.waitAndVerifyBackupJobStarted(schedule);

    // Step 3: Execute verifyInLogBackupJobCompleted logic
    DeviceInfo deviceInfo = nonLabelDevice; // Adjust to match your original dataProvider source
    info("Device id is: " + deviceInfo.getId());
    servicesLog.waitAndVerifyBackupJobCompleted(deviceInfo.getId());

    // Reset state for next cycle
    backupMap.clear();
    backupNameDevice = null;
}

This gives you full control over the order and cleanup between cycles, but you’ll need to replicate your dataProvider logic directly in the method.


内容的提问来源于stack exchange,提问作者tupac shakur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:09:57