源代码下载:http://download.csdn.net/detail/sufei1013/4017086 没有分的可以留下信箱我统一发给大家
引言
我们一直在做网站,但在我河南这块,对测试工作,特别是压力测试一般都不怎么在意,都是自己访问一下速度不错就行了,再就是数据库访问速度测试也是同样情况
程序员在写Sql代码时,一般是一个人写完之后,一运行可快完事
其实这些是不够的,我们根本没有进行过多用户多线程的测试,如果是100个,一千个要同时访问,还会有这样的速度吗?
我们自己反思一下是不是有这样的经历呢,我做的网站刚上传服务器,打开很快,调数据库1000条以内一秒用不了,感觉非常好,但过了不几天,就会感觉到网站很慢很慢,于是去检查测试
其实这些可以提前做的,我下面来实现一个多线程测试网站访问速度的功能。
效果
说明:
1.一次可以开N多个线程;
2.可以设置要访问的地址;
3.可以设置要循环访问的次数;
相关技术点:
1.C# Winform;
2.httpHelper类;这是我之前自己写的一个类,大家可以参考一下(带证书,无视编码,设置代理等)
3.多线程;
4.线程之间的传参;
5.委托与匿名委托的使用方法;
实现步骤:
1.新建一个CS项目,AutoFor,新建一个窗体为TextFor
2.自己拉几个控件实现如下界面
3.定义一个委托用来修改DataGridview的值,代码如下
//修改表格的委托
private delegate void UpDateDgvDelegate(string msg, int rowId, string columnName);
private UpDateDgvDelegate _upDateStateDelegate;
//构造器
public TextFor()
{
InitializeComponent();
_upDateStateDelegate = new UpDateDgvDelegate(UpDateDgv);
}
/// <summary>
/// 修改表格的行数据
/// </summary>
/// <param name="msg">要修改为的数据</param>
/// <param name="rowId">行号</param>
/// <param name="columnName">列名</param>
private void UpDateDgv(string msg, int rowId, string columnName)
{
try
{
dgvTextFor.Rows[rowId].Cells[columnName].Value = msg.ToString();
}
catch { }
}
4.在单击开始时先生成对应的线程表格式,就是界面上的DataGridview,大家看下代码
/// <summary>
/// 创建表格
/// </summary>
/// <param name="rows">生成多少行数</param>
private void CreateTable(int rows)
{
DataTable dt_Sale = new DataTable();
DataColumn dc = null;
//线程ID
dc = new DataColumn();
dc.ColumnName = "线程ID";
dc.DefaultValue = "1";
dc.DataType = Type.GetType("System.String");
dt_Sale.Columns.Add(dc);
//循环类型
dc = new DataColumn();
dc.ColumnName = "循环类型";
dc.DefaultValue = " ";
dc.DataType = Type.GetType("System.String");
dt_Sale.Columns.Add(dc);
//当前循环次数
dc = new DataColumn();
dc.ColumnName = "当前循环次数";
dc.DefaultValue = " ";
dc.DataType = Type.GetType(" System.String");
dt_Sale.Columns.Add(dc);
//开始时间
dc = new DataColumn();
dc.ColumnName = "开始时间";
dc.DefaultValue = " ";
dc.DataType = Type.GetType("System.String");
dt_Sale.Columns.Add(dc);
//结束时间
dc = new DataColumn();
dc.ColumnName = "结束时间";
dc.DefaultValue = " ";
dc.DataType = Type.GetType("System.String");
dt_Sale.Columns.Add(dc);
//总用时(毫秒)
dc = new DataColumn();
dc.ColumnName = "总用时(毫秒)";
dc.DefaultValue = " ";
dc.DataType = Type.GetType("System.String");
dt_Sale.Columns.Add(dc);
DataRow dr = dt_Sale.NewRow();
for (int i = 1; i < rows; i++)
{
dr["线程ID"] = i.ToString();
dr["循环类型"] = "For循环";
dr["当前循环次数"] = "0";
dr["开始时间"] = "00:00:00";
dr["结束时间"] = "00:00:00";
dr["总用时(毫秒)"] = "0";
dt_Sale.Rows.Add(dr);
dr = dt_Sale.NewRow();
}
dgvTextFor.DataSource = dt_Sale;
}
5.定义一个方法用来访问指定的网站就是我们的实际测试这块,
一起来看下代码
顶
0
踩
0
分享到:
相关推荐
我们一直在做网站,但在我河南这块,对测试工作,特别是压力测试一般都不怎么在意,都是自己访问一下速度不错就行了,再就是数据速度测试也是...其实这些可以提前做的,我下面来实现一个多线程测试网站访问速度的功能。
1.1 将源代码编译成托管模块 1.2 将托管模块合并成程序集 1.3 加载公共语言运行时 1.4 执行程序集的代码 1.4.1 IL和验证 1.4.2 不安全的代码 1.5 本地代码生成器:NGen.exe 1.6 Framework类库 1.7 通用类型...
C#5.0本质论第四版,高清扫描的,对C#5.0技术讲的比较详细,第1章 C#概述 1 1.1 Hello,World 1 1.2 C#语法基础 3 1.2.1 C#关键字 3 1.2.2 标识符 4 1.2.3 类型定义 5 1.2.4 Main 6 1.2.5...
真正重要的只是方法要与委托的类型兼容, 这使委托非常适合“匿名”调用。可选的形参表指定委托的参数,而返回类型则指示委托的返回类型。如果下面两个条件都为真,则方法和委托类型是兼容的:(兼容的概念就是可以用...
1.1 将源代码编译成托管模块 1.2 将托管模块合并成程序集 1.3 加载公共语言运行时 1.4 执行程序集的代码 1.4.1 IL和验证 1.4.2 不安全的代码 1.5 本地代码生成器:NGen.exe 1.6 Framework类库 1.7 通用类型...
《C#全能速查宝典》共分为8章,分别介绍了C#语言基础、Windows窗体及常用控件、Windows高级控件、控件公共属性、方法及事件、数据库开发、文件、数据流与注册表、GDI+绘图技术和C#高级编程,共包含562个C#编程中常用...
1.1 将源代码编译成托管模块 1.2 将托管模块合并成程序集 1.3 加载公共语言运行时 1.4 执行程序集的代码 1.4.1 IL和验证 1.4.2 不安全的代码 1.5 本地代码生成器:NGen.exe 1.6 Framework类库 1.7 通用类型...
1.1 将源代码编译成托管模块 1.2 将托管模块合并成程序集 1.3 加载公共语言运行时 1.4 执行程序集的代码 1.4.1 IL和验证 1.4.2 不安全的代码 1.5 本地代码生成器:NGen.exe 1.6 Framework类库 1.7 通用类型...