当时写这个程序是公司要求有个测试环境测试多用户情况,我匆匆忙忙的用了个上午写完后,一测试能用,就交差了,不过后来在多次使用的时候发现了有时候程序回莫名退出,不过由于时间等原应,就没有在仔细修改了,朋友门如果有新区的话,可以自己修改一下,如果有什么想法也希望和我联系!
功能说明:可以输入需要访问的URL(注意需要加"http://"才可以,我当时程序中偷懒了,和想象中的模拟用户数,然后确定就可以了,如果你的输入都正确的话,程序会自动创建你希望的线程数目,然后一直运行,知道你电极了“停止”按扭,线程才会结束。在执行期间,线程会将访问一个网页所用到的时间,显示到文本框中,方便用户统计。
不多说了,看程序吧
using System; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.Threading;//线程类 using System.Collections ; using System.Net; using System.IO; using System.Xml; using System.Drawing; using System.Drawing.Text;
namespace WindowsApplication1 { /// <summary> /// Summary description for Form1. /// </summary> public class frmMain : System.Windows.Forms.Form {
private System.Windows.Forms.RichTextBox richTextBox1; private System.Windows.Forms.Label label1; private System.Windows.Forms.Label label2; private System.Windows.Forms.Button button1; private System.Windows.Forms.TextBox url; private System.Windows.Forms.TextBox usernum; private System.Windows.Forms.Button button2; private System.ComponentModel.IContainer components;
private static stringserver;//测试页面地址 private static int intusernum;//虚拟测试人数 private System.Windows.Forms.Timer timer1;
private static bool isend ;//定义是否中断程序(线程)运行
public frmMain() { server=""; intusernum=0; isend=true; InitializeComponent(); }
protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.Dispose(); } } base.Dispose( disposing ); }
#region Windows Form Designer generated code private void InitializeComponent() { this.components = new System.ComponentModel.Container(); this.usernum = new System.Windows.Forms.TextBox(); this.richTextBox1 = new System.Windows.Forms.RichTextBox(); this.url = new System.Windows.Forms.TextBox(); this.label1 = new System.Windows.Forms.Label(); this.timer1 = new System.Windows.Forms.Timer(this.components); this.label2 = new System.Windows.Forms.Label(); this.button1 = new System.Windows.Forms.Button(); this.button2 = new System.Windows.Forms.Button(); this.SuspendLayout(); // // usernum // this.usernum.Location = new System.Drawing.Point(304, 320); this.usernum.Name = "usernum"; this.usernum.Size = new System.Drawing.Size(48, 21); this.usernum.TabIndex = 5; this.usernum.Text = ""; // // toolBarButton1 // //this.toolBarButton1.ImageIndex = 0; // // richTextBox1 // this.richTextBox1.Location = new System.Drawing.Point(8, 40); this.richTextBox1.Name = "richTextBox1"; this.richTextBox1.Size = new System.Drawing.Size(496, 272); this.richTextBox1.TabIndex = 1; this.richTextBox1.Text = ""; // // url // this.url.Location = new System.Drawing.Point(48, 320); this.url.Name = "url"; this.url.Size = new System.Drawing.Size(168, 21); this.url.TabIndex = 2; this.url.Text = ""; // // label1 // this.label1.Location = new System.Drawing.Point(8, 328); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(32, 16); this.label1.TabIndex = 3; this.label1.Text = "URL:";
this.timer1.Interval = 1000; // // label2 // this.label2.Location = new System.Drawing.Point(232, 328); this.label2.Name = "label2"; this.label2.Size = new System.Drawing.Size(64, 16); this.label2.TabIndex = 4; this.label2.Text = "虚拟人数:"; // // button1 // this.button1.Location = new System.Drawing.Point(368, 320); this.button1.Name = "button1"; this.button1.Size = new System.Drawing.Size(64, 24); this.button1.TabIndex = 6; this.button1.Text = "确定"; this.button1.Click += new System.EventHandler(this.button1_Click); // // button2 // this.button2.Location = new System.Drawing.Point(440, 319); this.button2.Name = "button2"; this.button2.Size = new System.Drawing.Size(64, 25); this.button2.TabIndex = 7; this.button2.Text = "中断"; this.button2.Click += new System.EventHandler(this.button2_Click); // // frmMain // this.AcceptButton = this.button1; this.AutoScaleBaseSize = new System.Drawing.Size(6, 14); this.ClientSize = new System.Drawing.Size(512, 349); this.Controls.AddRange(new System.Windows.Forms.Control[] { //this.toolBar1, this.button2, this.button1, this.usernum, this.label2, this.label1, this.url, this.richTextBox1}); this.MaximizeBox = false; this.Name = "frmMain"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "站点测试"; this.Load += new System.EventHandler(this.Form1_Load); this.ResumeLayout(false);
} #endregion
/// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { try { frmMain mainForm = new frmMain();
mainForm.Menu=CreateMainMenu(); mainForm.BackColor = Color.DarkGoldenrod; Application.Run(mainForm); } catch(Exception e) { MessageBox.Show("Error:" + e, "警告"); return; } }
//创建工具条 public static MainMenu CreateMainMenu() { MainMenu my= new MainMenu(); MenuItem menuItem1=new MenuItem(); MenuItem menuItem2=new MenuItem(); MenuItem menuItem3=new MenuItem(); MenuItem menuItem4=new MenuItem();
menuItem1.Text = "设置"; menuItem2.Text = "帮助"; menuItem3.Text = "帮助"; menuItem4.Text = "版权";
menuItem2.MenuItems.Add(menuItem3); menuItem2.MenuItems.Add(menuItem4); EventHandler handle=new EventHandler(SelectMenuItem) ;
menuItem1.Click +=handle; menuItem2.Click +=handle; menuItem3.Click +=handle; menuItem4.Click +=handle;
my.MenuItems.Add (menuItem1); my.MenuItems.Add(menuItem2); return(my); }
//点击工具条按纽后执行功能 public static void SelectMenuItem(object sender, EventArgs e) {
MessageBox.Show(e.ToString() );
}
private void Form1_Load(object sender, System.EventArgs e) { this.button1.Enabled=true; this.button2.Enabled=false; }
private void button1_Click(object sender, System.EventArgs e) { isend=false; this.richTextBox1.Text=""; this.button1.Enabled=false; this.button2.Enabled=true;
if (this.url.Text .Equals("")) { MessageBox.Show("请输入您要测试的URL地址!", "警告"); this.url.Focus(); isend =true; this.button1.Enabled=true; this.button2.Enabled=false; return; } else { server=url.Text; } try { if (this.usernum.Text.Equals("")) { MessageBox.Show("请输入您希望的虚拟测试人数!", "警告"); isend =true; this.button1.Enabled=true; this.button2.Enabled=false; this.usernum.Focus();
return; } else { intusernum=int.Parse(this.usernum.Text ); } } catch(Exception ) { MessageBox.Show("您输入的测试人数不合法,请重新输入!", "警告"); this.usernum.Text=""; isend =true; this.button1.Enabled=true; this.button2.Enabled=false; this.usernum.Focus(); return; }
//开始启动线程 MainStart(); }
private void button2_Click(object sender, System.EventArgs e) { isend =true; this.button1.Enabled=true; this.button2.Enabled=false; }
///////////////////////////////////////////////////////////////////////////////////////// //下面为线程部分 /////////////////////////////////////////////////////////////////////////////////////////
public void MainStart() { if(server.Equals("") || intusernum==0) { return; }
//开始创建子线程 for(int i=0;i<intusernum;i++) { Thread Users=null; try { Users = new Thread(new ThreadStart(this.ceshi) ); Users.Priority=ThreadPriority.Normal; Users.Start(); } catch(Exception e) { this.richTextBox1.Text +="发生错误:" + e + "\r\n"; isend=true; this.button1.Enabled=true; this.button2.Enabled=false; return; } } }
//子线程:检测得到页面时间 public void ceshi() { //MessageBox.Show("线程开始", "警告"); while(!isend) { Random rdm1 = new Random(unchecked((int)DateTime.Now.Ticks)); string tname=rdm1.Next().ToString();
try { DateTime temptime = new DateTime(); temptime=DateTime.Now;
WebRequest myRequest = WebRequest.Create(server);//出事化WEB页面 WebResponse myResponse = myRequest.GetResponse();//返回RESPONSE对象
Stream stream=myResponse.GetResponseStream(); StreamReader sr =new StreamReader(stream);
string retstr=""; string tmp=""; while ((tmp=sr.ReadLine())!=null) { retstr += tmp; } myResponse.Close();//管理RESPONSE对象
this.richTextBox1.Text += "线程" + tname + "执行时间为:" + DateTime.Now.Subtract(temptime) + "豪秒\r\n\r\n"; } catch(Exception) { this.richTextBox1.Text+="错误:您输入的URL地址不正确,或该页面不存在!" + "\r\n\r\n"; break; }
} }
} }
|