C# winform 窗体接收命令行参数自动登录进行系统,模拟600个WCF客户端的并发压力测试
我们想要达到的目的是模拟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();
}
}
}
// 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,为了节省篇幅就截取一部份:
start D:\DotNet.Common\DotNet.CommonV3.6\DotNet.WinForm\bin\Debug\DotNet.WinForm.exe UserName=Administrator Password=Administrator
start D:\DotNet.Common\DotNet.CommonV3.6\DotNet.WinForm\bin\Debug\DotNet.WinForm.exe UserName=SystemAdmin Password=SystemAdmin
start D:\DotNet.Common\DotNet.CommonV3.6\DotNet.WinForm\bin\Debug\DotNet.WinForm.exe UserName=UserAdmin Password=UserAdmin
start D:\DotNet.Common\DotNet.CommonV3.6\DotNet.WinForm\bin\Debug\DotNet.WinForm.exe UserName=jiangyanxiao Password=jiangyanxiao
start D:\DotNet.Common\DotNet.CommonV3.6\DotNet.WinForm\bin\Debug\DotNet.WinForm.exe UserName=hukuangmin
start D:\DotNet.Common\DotNet.CommonV3.6\DotNet.WinForm\bin\Debug\DotNet.WinForm.exe UserName=SystemAdmin Password=SystemAdmin
start D:\DotNet.Common\DotNet.CommonV3.6\DotNet.WinForm\bin\Debug\DotNet.WinForm.exe UserName=UserAdmin Password=UserAdmin
start D:\DotNet.Common\DotNet.CommonV3.6\DotNet.WinForm\bin\Debug\DotNet.WinForm.exe UserName=jiangyanxiao Password=jiangyanxiao
start D:\DotNet.Common\DotNet.CommonV3.6\DotNet.WinForm\bin\Debug\DotNet.WinForm.exe UserName=hukuangmin
补充:软件开发 , C# ,
上一个: C#中方法、类等的默认访问修饰符
下一个:C#重点在哪里
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,
部份技术文章来自网络,