C#压力测试 – 模拟对给定共享资源的多次访问

C#压力测试 – 模拟对给定共享资源的多次访问,第1张

概述如何在c#单元测试中模拟/压力测试大约100个访问给定共享资源(例如数据库)的用户? 假设您正在访问真正的数据库,那么您正处于集成测试的范围内.最简单的方法是从多个线程访问资源.例如: [Test]public void SimpleStressTest(){ bool wasExceptionThrown = false; var threads = new Thread[1 如何在c#单元测试中模拟/压力测试大约100个访问给定共享资源(例如数据库)的用户?解决方法 假设您正在访问真正的数据库,那么您正处于集成测试的范围内.最简单的方法是从多个线程访问资源.例如:
[Test]public voID SimpleStresstest(){    bool wasExceptionThrown = false;    var threads = new Thread[100];    for(int i = 0; i < 100; i++)    {        threads[i] =             new Thread(new ThreadStart((Action)(() =>            {                try                {                                            AccessDB();                }                catch(Exception)                {                    wasExceptionThrown = true;                }            })));    }    for(int i = 0; i < 100; i++)    {        threads[i].Start();    }        for(int i = 0; i < 100; i++)    {        threads[i].Join();    }    Assert.That(wasExceptionThrown,Is.False);}

由于无法控制线程流,因此该测试不具有确定性.例如,如果要确保可以同时打开100个连接,可以在AccessDB()的逻辑中放置一个钩子,这将强制它在关闭与DB的连接之前等待.

例如,而不是以前的线程 *** 作:

try{                            AccessDB(sychObject);}catch(Exception){    wasExceptionThrown = true;}

启动所有线程后,确保在sychObject上等待100个线程,然后释放它并加入线程.通过将CloseConnection()(例如)的逻辑设置为virtual并将该测试写入在CloseConnection()中等待的继承类,可以实现相同的目的.例如:

public class DataBase{    public voID AccessDB()    {        // Do logic here before closing connection        CloseConnection();    }    protected virtual voID CloseConnection()    {        // Real Logic to close connection    }}public class FakeDataBase : DataBase{    ManualresetEvent sychObject;    public FakeDataBase(ManualresetEvent sychObject)    {        this.sychObject = sychObject;    }    overrIDe protected voID CloseConnection()    {        sychObject.WaitOne();        base.CloseConnection();    }}
总结

以上是内存溢出为你收集整理的C#压力测试 – 模拟对给定共享资源的多次访问全部内容,希望文章能够帮你解决C#压力测试 – 模拟对给定共享资源的多次访问所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1237421.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存