编写一个并发性能测试的小程序

Posted 软件测试情报局

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编写一个并发性能测试的小程序相关的知识,希望对你有一定的参考价值。

1.为了统计qps,我使用了Interlocked锁

是的,是锁总会有损耗,因为使用了Interlocked锁的缘故,肯定会对性能测试造成一定的干扰,那我们先来看看底噪是多少,开100个线程,写个什么都不干的函数,开始run。

cpu跑满了,火力全开,qps达到了1.1亿, 哦哦哦,我想我可以忽略这个影响了,你说是吧。

2编写qps计数

这里记录了qps、error、threads以及时间, 为了不再开启线程和省事,甚至还增加了一个按照时间秒数打印输出日志的功能。

一切就是这么简单。

这是定义:

private volatile int Qps = 0;
private volatile int Error = 0;
private volatile int Threads = 0;
private DateTime dtStart = DateTime.Now;
private volatile int printSecond = 1;
我们提供个接口,增加qps计数
public void AddQps()
{
    Interlocked.Increment(ref Qps);
    Print();
}

到整数时间就打印

if(Seconds == Interlocked.Exchange(ref printSecond,Seconds+1))
{
    Console.WriteLine($"time={Seconds}, threads= {MyThreads}, qps = {MyQps}, error = {MyError}");
}

增加错误,和线程数,类似增加qps接口。

提供访问qps等的属性:

public int Seconds => (int)((DateTime.Now - dtStart).TotalSeconds);
public int MyQps => Qps / (Seconds==0 ? 1: Seconds);
public int MyError => Error / (Seconds == 0 ? 1 : Seconds);
public int MyThreads => Threads ;

3 使用计数

在我们内部的测试用例内,我们需要调用计数类的增加qps等接口,这个计数类是全局的,各个线程共享计数类实例。

private void internalTest()
{
    var idx = random.Next(0, actions.Count);
    try
    {
        actions[idx].Invoke();
    }
    catch (Exception ex)
    {
        calcValue.AddError();
    }
    finally
    {
        calcValue.AddQps();
    }
}

4.并发线程测试

循环新建线程类,并在线程体内塞入单个的测试用例,以及全局的计数类。在建立好所有的线程后,耗时不计入性能的计算都预热好,然后一块开启线程,开始测试。

为了让性能测试更充分,我编写了不同的计算过程,并使用随机函数随机获取并塞入线程执行。

当然一切搞定后,调用就非常简单了。

var test = new ParallelTest(nThread);
test.Start<UTest1>(TimeSpan.FromSeconds(nSpan));

当然.net core 开启线程池限制, 避免性能问题。

 ThreadPool.SetMinThreads(1000, 1000);
 ThreadPool.SetMaxThreads(1500, 1500);

嗯嗯,相比底噪,差距还是蛮大的,因此尽可以使用。

5. 小结

8月更新完毕,其实还是蛮困难的,写到最后都不知道写啥了,生成速度完全跟不上啊。

例行小结,理性看待!

结的是啥啊,结的是我想你点赞而不可得的寂寞。😳😳😳

👓都看到这了,还在乎点个赞吗?

👓都点赞了,还在乎一个收藏吗?

👓都收藏了,还在乎一个评论吗?

以上笔者的经历更像一张横向的知识网,创建了一个交流平台 914172719 ,群内有各种技术同行交流、学习资料、面试经验等。其中用到jenkins、docker、moutebank、python编程等,还需要花更多的精力去深入学习,当每项技能都能掌握到一定深度,才能称为一个完整的知识体系。

最后: 可以关注公众号:伤心的辣条 ! 进去有许多资料共享!资料都是面试时面试官必问的知识点,也包括了很多测试行业常见知识,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!


好文推荐

转行面试,跳槽面试,软件测试人员都必须知道的这几种面试技巧!

面试经:一线城市搬砖!又面软件测试岗,5000就知足了…

面试官:工作三年,还来面初级测试?恐怕你的软件测试工程师的头衔要加双引号…

什么样的人适合从事软件测试工作?

那个准点下班的人,比我先升职了…

测试岗反复跳槽,跳着跳着就跳没了…

以上是关于编写一个并发性能测试的小程序的主要内容,如果未能解决你的问题,请参考以下文章

编写一个并发性能测试的小程序

性能测试组件CodeBenchmark V2发布

测试代码的速度?

JMeter 接口/并发/性能测试(详尽版)

‘高并发&高性能&高可用服务程序’编写及运维指南

Jmeter Web 性能测试入门 :一个小实例带你学会 Jmeter 脚本编写