提供一个:用多线程模拟多用户访问站点情况!

发表于:2007-06-30来源:作者:点击数: 标签:
当时写这个程序是公司要求有个 测试环境 测试多用户情况,我匆匆忙忙的用了个上午写完后,一测试能用,就交差了,不过后来在多次使用的时候发现了有时候程序回莫名退出,不过由于时间等原应,就没有在仔细修改了,朋友门如果有新区的话,可以自己修改一下,如
    当时写这个程序是公司要求有个测试环境测试多用户情况,我匆匆忙忙的用了个上午写完后,一测试能用,就交差了,不过后来在多次使用的时候发现了有时候程序回莫名退出,不过由于时间等原应,就没有在仔细修改了,朋友门如果有新区的话,可以自己修改一下,如果有什么想法也希望和我联系!
    
    功能说明:可以输入需要访问的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 string  server;        //测试页面地址
        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.Aclearcase/" target="_blank" >cceptButton = 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;
                }
                
                
            }
        }

    }
}

原文转自:http://www.ltesting.net