• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#winform窗体接收命令行参数自动登录进行系统,模拟600个WCF客户端的并发压力测试 ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

  我们想要达到的目的是模拟600个客户端的消息提醒功能,当然我们没有600个电脑可以拿来测试,我们只有4-5台电脑可以用来测试,那我们就想办法在一个电脑上执行100来个客户端,用不通的帐户登录,模拟600个并发时的情况.

  现在遇到的问题:

  1:一个个登录,每个电脑上登录100来个用户是很繁琐的事情,人都会眼花缭乱。

  2:在测试过程中往往会发现一些问题,这时候又需要重新部署服务器端,又要部署客户端,那是很要命的事情。

  3:随时想测试程序性能的时候,不需要别人的协助,只要自己一个人是否可以顺利进行测试,又轻松又快的方式是否可以?总不能要求别人总加班,靠自己。

 

解决问题的思路:

 1:先把数据库里的用户名密码,都修改为有规律的密码,由于我们用的是测试数据库,所以密码是可以随便修改的,我们编写一段程序让系统中所有的用户的密码与用户名相同,由于密码在数据库里是加密的,所以需要用程序脚本来设置。

 2:在设置密码的同时,我们把自动运行的DOS脚本指令也获取了,那不是一箭双雕了不是,那我们就编写一段程序来实现一下这2个任务。

//--------------------------------------------------------------------
// All Rights Reserved , Copyright (C) 2011 , Hairihan TECH, Ltd. 
//--------------------------------------------------------------------

using System.Data;
using System.IO;
using System.Text;

namespace DotNet.Example
{
    using DotNet.DbUtilities;
    using DotNet.Manager;
    using DotNet.Model;
    using DotNet.Utilities;

    public class UserPassword
    {
        public void SetPassword()
        {
            // 检查密码强度,默认要检查比较好,系统安全性高一些
            BaseSystemInfo.CheckPasswordStrength = true;
            // 打开数据库
            
// IDbHelper dbHelper = new OracleHelper("Data Source=KANGFU;user=usercenter;password=usercenter;");
            IDbHelper dbHelper = new SqlHelper("Data Source=localhost;Initial Catalog=UserCenterV36;User Id = sa ; Password = Password@sa;");
            dbHelper.Open();
            // 批处理指令
            StringBuilder Batch = new StringBuilder(); 
            // 获取用户列表,有效的,没有被删除的
            BaseUserManager userManager = new BaseUserManager(dbHelper);
            DataTable dt = userManager.GetDT(BaseUserTable.FieldDeletionStateCode, "0", BaseUserTable.FieldEnabled, "1");
            BaseUserEntity userEntity = null;
            foreach (DataRow dataRow in dt.Rows)
            {
                userEntity = new BaseUserEntity(dataRow);
                // 设置密码
                userManager.SetPassword(userEntity.Id.ToString(), userEntity.UserName.ToString());
                Batch.AppendLine(string.Format("start D:\\DotNet.Common\\DotNet.CommonV3.6\\DotNet.WinForm\\bin\\Debug\\DotNet.WinForm.exe UserName={0} Password={1}", userEntity.UserName.ToString(), userEntity.UserName.ToString()));
            }
            dbHelper.Close();

            // 将批处理写入文件
            WriterFile(Batch.ToString());
        }

        /// <summary>
        
/// 将批处理写入文件
        
/// </summary>
        
/// <param name="batch">指令</param>
        private void WriterFile(string batch)
        {
            // 把批处理结果保存到文件
            string writerFileName = "D:\\DotNet.Common\\DotNet.CommonV3.6\\DotNet.WinForm\\bin\\Debug\\RunTest.bat";
            StreamWriter streamWriter = new StreamWriter(writerFileName, false, Encoding.Default);
            streamWriter.Write(batch);
            streamWriter.Close();
        }
    }
}

 得到的DOS批量处理的结果如下RunTest.bat,为了节省篇幅就截取一部份:

6\DotNet.WinForm\bin\Debug\DotNet.WinForm.exe UserName=lijia Password=lijia

 3:调试winform程序,让程序能接受命令行参数,参考代码如下:


            Form mainForm = BaseInterfaceLogic.GetForm(BaseSystemInfo.MainAssembly, BaseSystemInfo.MainForm);
            Application.Run(mainForm);
        }

 4:配置项目工程属性,模拟输入命令行参数如下图:

  5:把程序配置为能自动登录的状态如下效果图:

     也可以通过手工修改配置文件的方式把  Config.xml 里的

 <!-- 是否自动登录,默认不自动登录会好一些 -->
 <add key="AutoLogOn"value="True" /> 也可以达到相同的效果.

 

  6:万事大吉,只要双击 RunTest.bat,瞬间几百个客户端就自动登录,能模拟多用户并发压力测试了,将来做其它项目还可以反复使用,不用依靠别人自己一个人就可以测试了,省心省事了。

 

    开发软件很多功能都很简单,但是一个每个功能实现好都需要几个小时时间,例如这个自动登录进行压力测试的程序也编写调试了4个小时左右, 一个软件系统往往需要成白上千的功能点,前后编写花费的时间就会很长了,需要投入很密集的劳动力.

 

   例如我想购买一个软件,软件只有一个要求"姓李的周三不能登录,姓白的周日不能登录",就这么一个软件,你需要多久能开发好? 其实他没说这个软件背后的100个需求,当你开发好了后,客户会说,怎么没有权限管理功能? 怎么没有角色管理功能? 怎么没设置密码功能? 怎么没锁定帐户功能??????????

 

   就像是我想购买一个进销存,需要分级管理分级授权,你要开价多少? 其实他想要用友软件的所有功能,同时也想要金蝶的所有的优点之上要结合他们自己在用的系统优点,再加一个分级管理分级授权的功能,所以我们做任何软件系统,都需要把那些公用的,基础的1000个功能点都做好了,再去开发第1001个功能,才好满足客户的需要。

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
如何在C#中添加dll文件发布时间:2022-07-14
下一篇:
C与C#之间使用AES加密解密算法发布时间:2022-07-14
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap