用代码触发testng实现并发测试

有时候希望测试用例能用代码触发,发现testng支持这种操作,于是记录一下:

首先添加testng依赖:

    <dependency>
      <groupId>org.testng</groupId>
      <artifactId>testng</artifactId>
      <version>6.9.10</version>
    </dependency>

然后实现要被调用的测试用例:

/**
 * testng 注解实现并发测试
 */
public class ConcurrentTest {

    @Test(threadPoolSize = 10, invocationCount = 10, timeOut = 1000)
    public static void display() {
        System.out.println(UUID.randomUUID().toString());
    }
}

再用代码触发执行该测试用例:

/**
 * 代码触发testng测试
 */
public class TestNgDemo {

    public static void main(String[] args) {
        /**初始化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();

        List<Long> interval = pass.stream().map(x -> (x.getEndMillis() - x.getStartMillis())).collect(Collectors.toList());

        /**最大耗时*/
        long maxtime = interval.stream().max(Comparator.naturalOrder()).get();

        /**最小耗时*/
        long mintime = interval.stream().min(Comparator.naturalOrder()).get();

        /**平均耗时*/
        double avgtime = interval.stream().mapToDouble(i -> i).average().getAsDouble();

        System.out.println(String.format("test result: [success: %s],[failure: %s]",pass.size(),failed.size()));

        System.out.println(String.format("performance analysis: [maxtime: %s(ms)],[mintime: %s(ms),[avgtime: %s(ms)]]",
                maxtime, mintime, avgtime));
    }
}

最后执行结果如下:

[TestNG] Running:
  Command line suite

894eecc7-6d39-4b8d-bc6f-36c94296ff13
f7bdeb99-2baf-4894-a0a3-40fd0792432a
ce27be2e-402b-46bb-8b71-c983f2d3b36c
4b042268-ede8-4c75-9d9a-e5ea7cf63d93
a2dd8b48-56e9-4187-b2f8-004a99164b3c
b4d188e2-1ba4-4635-a546-7131faa2dede
cbffc694-f0f5-48e3-80ec-e9cebdb054b9
904eaab1-3ef7-4627-bc6c-0e890510b119
3db7eb16-f369-449c-be2c-cb89e9647ad0
c4baf3ce-a162-40e0-aa27-e538cc09fb99

===============================================
Command line suite
Total tests run: 10, Failures: 0, Skips: 0
===============================================

test result: [success: 10],[failure: 0]
performance analysis: [maxtime: 8(ms)],[mintime: 0(ms),[avgtime: 2.8(ms)]]

Process finished with exit code 0

原文地址:https://www.cnblogs.com/cord/p/9226672.html

时间: 2024-10-07 09:34:41

用代码触发testng实现并发测试的相关文章

使用CodeBenchmark对逻辑代码进行并发测试

一直对性能测试比较感兴趣,所以也写了不少的测试工具有WebApiBenchmark和TcpBenchmark等;但这些工具测试都是有针对性和配置的方式来进行功能有限所以很难适用更多的场景,所以单独开发一个组件CodeBenchmark来解决不同业务代码下的性能测试;严格来说CodeBenchmark并不算一个完整的测试工具,它提供一个测试管理功能和测试环境,可以对实现某一规则业务代码进行一个并发测试并提供一个最终的测试结果.以下主要介绍如何使用CodeBenchmark. 环境要求 CodeBe

java高并发测试代码

package com.example.test; import java.net.URL;import java.net.URLConnection;import java.util.concurrent.CountDownLatch; /** * Created with IDEA * author:QinWei * Date:2018/12/27 * Time:11:08 * 并发测试 */public class ConnectTest { public static void main

C# 防止同时调用=========使用读写锁三行代码简单解决多线程并发的问题

http://www.jb51.net/article/99718.htm 本文主要介绍了C#使用读写锁三行代码简单解决多线程并发写入文件时提示"文件正在由另一进程使用,因此该进程无法访问此文件"的问题.需要的朋友可以参考借鉴 在开发程序的过程中,难免少不了写入错误日志这个关键功能.实现这个功能,可以选择使用第三方日志插件,也可以选择使用数据库,还可以自己写个简单的方法把错误信息记录到日志文件. 选择最后一种方法实现的时候,若对文件操作与线程同步不熟悉,问题就有可能出现了,因为同一个文

Atitit.并发测试解决方案(2) -----获取随机数据库记录 随机抽取数据 随机排序 原理and实现

Atitit.并发测试解决方案(2) -----获取随机数据库记录 随机抽取数据 随机排序 1. 应用场景 1 2. 随机抽取数据原理 1 3. 常用的实现方法:::数据库随机函数 1 4. Mssql 的实现 NEWID() 跟rand()  1 5. newid()与rand()的区别 2 6. NEWID() 2 7. 参考 2 1. 应用场景 并发测试 2. 随机抽取数据原理 原理是 循环所有的ID/记录,附加随机函数字段,然后排序as 这个字段.. 3. 常用的实现方法:::数据库随机

网站性能并发测试工具

网站性能并发测试工具 2012-05-05 22:04:26 分类: 项目管理 导读:随着Web 2.0技术的迅速发展,许多公司都开发了一些基于Web的网站服务,通常在设计开发Web应用系统的时候很难模拟出大量用户同时访问系统的实际情况,因此,当Web网站遇到访问高峰时,容易发生服务器响应速度变慢甚至服务中断. 随着Web 2.0技术的迅速发展,许多公司都开发了一些基于Web的网站服务,通常在设计开发Web应用系统的时候很难模拟出大量用户同时访问系统的实际情况,因 此,当Web网站遇到访问高峰时

Node.js真的有高并发优势吗?看看Node.js和Tomcat的并发测试结果

同一套业务逻辑,实现一个webservice中间接口,中间涉及memcached和mogodb的一些操作.分别在Node.js和JAVA平台实现,java代码部署在Tomcat 7.0上,用Apache jmeter进行压力测试.得到的测试结果很是出乎意料,Node.js的高并发优势为什么没有体现出来呢??? 操作系统:CentOS 6.4(虚拟机)内存:1.5GCPU:单核 并发数 100执行次数 10 以下是测试结果 可以看到Node.js的平均执行时间为333毫秒,Tomcat的执行时间为

iOS并发编程笔记,包含GCD,Operation Queues,Run Loops,如何在后台绘制UI,后台I/O处理,最佳安全实践避免互斥锁死锁优先级反转等,以及如何使用GCD监视进程文件文件夹,并发测试的方案等

iOS并发编程笔记,包含GCD,Operation Queues,Run Loops,如何在后台绘制UI,后台I/O处理,最佳安全实践避免互斥锁死锁优先级反转等,以及如何使用GCD监视进程文件文件夹,并发测试的方案等 线程 使用Instruments的CPU strategy view查看代码如何在多核CPU中执行.创建线程可以使用POSIX 线程API,或者NSThread(封装POSIX 线程API).下面是并发4个线程在一百万个数字中找最小值和最大值的pthread例子: #import

白盒测试中如何实现真正意义上并发测试(Java)

在这个话题开始之前,首先我们来弄清楚为什么要做并发测试? 一般并发测试,是指模拟并发访问,测试多用户并发访问同一个应用.模块.数据时是否产生隐藏的并发问题,如内存泄漏.线程锁.资源争用问题. 站在性能测试的角度,并发测试不是为了获得性能指标,而是为了发现并发引起的问题. 那么并发对应的技术实现到底是怎样的呢? 简单地说,并发是指多个进程或线程在某一时刻同时处理指定的操作,有点类似于性能测试中集合点的概念,讲究同时性. 普及到这里,接下来讨论技术实现: 最近在项目里面发现一些开发人员做动态测试模拟

百万级别长连接,并发测试指南

前言 都说haproxy很牛x, 可是测试的结果实在是不算满意, 越测试越失望,无论是长连接还是并发, 但是测试的流程以及工具倒是可以分享分享.也望指出不足之处. 100w的长连接实在算不上太难的事情,不过对于网上关于测试方法以及测试工具的相关文章实在不甚满意,才有本文. 本文有两个难点,我算不上完全解决. 后端代码的性能. linux内核参数的优化. 环境说明 下面所有的测试机器都是基于openstack云平台,kvm虚拟化技术创建的云主机. 由于一个socket连接一般占用8kb内存,所以百