关闭

测试获取网页的时间

发表于:2007-12-29 15:45

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:manok    来源:manok的博客

  前一段时间,为了测试的需要,需要编写一个多线程的程序,就是最大限度的访问某个网页上认证标签,以获得大概该认证标签每秒钟能响应多少次,于是搜索了一些网上的资料,于是编写了下面的这个程序,虽然这个程序不是我们使用的最终版本,但是也反映了测试的思想,大家略微进行改造,就可以用于类似的测试。
  

using System;
using System.Net;
using System.IO;
using System.Threading;
using System.Timers;
using System.Text.RegularExpressions;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.ComponentModel;


namespace TestUrl
{

    internal class HiPerfTimer
    {
        [DllImport("Kernel32.dll")]
        private static extern bool QueryPerformanceCounter(
            out long lpPerformanceCount);

        [DllImport("Kernel32.dll")]
        private static extern bool QueryPerformanceFrequency(
            out long lpFrequency);

        private long startTime, stopTime;
        private long freq;

        // Constructor
        public HiPerfTimer()
        {
            startTime = 0;
            stopTime = 0;

            if (QueryPerformanceFrequency(out freq) == false)
            {
                // high-performance counter not supported
                throw new Win32Exception();
            }
        }

        // Start the timer
        public void Start()
        {
            // lets do the waiting threads there work
            Thread.Sleep(0);

            QueryPerformanceCounter(out startTime);
        }

        // Stop the timer
        public void Stop()
        {
            QueryPerformanceCounter(out stopTime);
        }

        // Returns the duration of the timer (in seconds)
        public double Duration
        {
            get
            {
                return (double)(stopTime - startTime) / (double)freq;
            }
        }
    }

    class Program
    {

        static long rt = 0;
        static long wr = 0;

        public static int PostData(string url, string data, out string info)
        {

            info = "";
            CookieContainer cc = new CookieContainer();
            HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
            request.CookieContainer = cc;
            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded";
            Stream requestStream = request.GetRequestStream();
            byte[] byteArray = Encoding.UTF8.GetBytes(data);
            requestStream.Write(byteArray, 0, byteArray.Length);
            requestStream.Close();
            HttpWebResponse response = request.GetResponse() as HttpWebResponse;
            Uri responseUri = response.ResponseUri;
            Stream receiveStream = response.GetResponseStream();
            Encoding encode = System.Text.Encoding.GetEncoding("utf-8");
            StreamReader readStream = new StreamReader(receiveStream, encode);
            string result = readStream.ReadToEnd();
            info = result;
            return 0;

        }
        public static bool GetBool(string html)
        {

            Regex regtable = new Regex(@"http://img.dotad.net/lg.gif", RegexOptions.Singleline);
            Match ma = regtable.Match(html);
            if (ma.Success)
            {
                return true;
            }
            else
                return false;
        }

        public static void ThreadProc()
        {

            string info = "";
            string data = "";
            string url = "http://203.86.46.53/lg/index.aspx";
            long i=0;
            HiPerfTimer pt = new HiPerfTimer();     // create a new PerfTimer object
            pt.Start();                             // start the timer
            while (i++<100)
            {
              
                PostData(url, data, out info);
                //System.Console.WriteLine(info);
                if (GetBool(info) == true)
                {
                    rt++;                  
                }
                else
                {
                    wr++;                  
                }             
             }
             pt.Stop();
             System.Console.WriteLine("成功" + rt + " 次,失败  " + wr + " 次\n");
             Console.WriteLine("用时: {0} sec\n",
                  pt.Duration); // print the duration of the timed code
        }

        static void Main(string[] args)
        {
                 
         
            Console.WriteLine("Test\n");            // the code to be timed                                
           

            long j = 0;
            while(j++<15)
            {
              Thread t = new Thread(new ThreadStart(ThreadProc));
              t.Start();
            
            }
          
        }
    }
}

 

 

《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号