1.8 testNG并发测试

370 阅读1分钟

TestNG并发测试用例,主要是提高用例执行效率与测试单个函数的高并发

例子:统计执行随机生成唯一识别码运行时间

新建类ConcurrentTest

package com.test.test_modle;
import org.testng.annotations.Test;
import java.util.UUID;

public class ConcurrentTest {
    /* threadPoolSize表示线程个数 */
    /* invocationCount表示执行次数 */
    /* timeOut表示超时,时间:毫秒 */
    /* UUID表示生成唯一识别码 */
    /* UUID.randomUUID()随机生成唯一识别码 */
    @Test(threadPoolSize = 10, invocationCount = 10, timeOut = 5)
    public static void display() {
        System.out.println(UUID.randomUUID().toString());
    }
}

新建类:TestNgDemo

package com.test.test_modle;
import org.testng.ITestResult;
import org.testng.TestListenerAdapter;
import org.testng.TestNG;
import org.testng.annotations.Test;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;

public class TestNgDemo {
    @Test
    public static void display_test() {
        /* 初始化testNG对象 */
        TestNG testNG = new TestNG();
        TestListenerAdapter listener = new TestListenerAdapter();
        /* 添加监听类便于统计成功与失败的用例 */
        testNG.addListener(listener);
        /* 添加需要执行的测试类数组 */
        testNG.setTestClasses(new Class[]{
                ConcurrentTest.class
        });
        /* 执行测试用例 */
        testNG.run();

        /* 汇总分析统计失败与成功的用例 */
        List<ITestResult> pass = listener.getPassedTests();
        List<ITestResult> failed = listener.getFailedTests();
        System.out.println(String.format("test result: [success: %s],[failure: %s]",pass.size(),failed.size()));

        /* stream声明流文件类型 */
        /* a返回时间结果对应成功用例流 */
        /* 统计执行成功用例的时间 */
        List<Long> interval = pass.stream().map(a -> (a.getEndMillis() - a.getStartMillis())).collect(Collectors.toList());
        /* Comparator比较接口 */
        /* naturalOrder()返回一个自然顺序的比较结果 */
        /* 最大耗时 */
        long maxtime = interval.stream().max(Comparator.naturalOrder()).get();
        System.out.println(String.format("performance analysis: [maxtime: %s(ms)]", maxtime));
        /* 最小耗时 */
        long mintime = interval.stream().min(Comparator.naturalOrder()).get();
        System.out.println(String.format("performance analysis: [mintime: %s(ms)]", mintime));
        /* b统计前两个用例流(最大与最小) */
        /* 平均耗时 */
        double avgtime = interval.stream().mapToDouble(b -> b).average().getAsDouble();
        System.out.println(String.format("performance analysis: [avgtime: %s(ms)]", avgtime));
    }
}