编写一个并发性能测试的小程序
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自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。
如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!
好文推荐
转行面试,跳槽面试,软件测试人员都必须知道的这几种面试技巧!
以上是关于编写一个并发性能测试的小程序的主要内容,如果未能解决你的问题,请参考以下文章