• [翻译]那么您想回放IIS Web服务器日志?


    几个月前,微软的一个组想回放一个大的IIS日志作为一个Visual Studio Web测试。他们开始一个转换将IIS日志转换为一个巨大的编码的Web测试。118M的CS文件这个结果是很荒谬的,并且对设计或运行时并没有很好的执行。

    我使用另一个不同的方法从Web测试读取IIS日志。它依赖于可以方便下载的LogReader 2.2来处理所有的日志分析并保持代码短而简单。

    这里是一个回放一个IIS日志的Webtest示例:

    public class IISLogCodedWebTest : WebTest
    {
        public IISLogCodedWebTest()
        {
            this.PreAuthenticate = true;
        }

        public override IEnumerator<WebTestRequest> GetRequestEnumerator()
        {
            IISLogReader reader = new IISLogReader(@"d:\download\ex060209.log");
            foreach (WebTestRequest request in reader.GetRequests())
            {
                yield return request;
            }
        }
    }

    上面使用的IISLogReader类的代码如下:

    using System;
    using System.Collections.Generic;
    using System.Text;
    using MSUtil;
    using LogQuery = MSUtil.LogQueryClassClass;
    using IISLogInputFormat = MSUtil.COMIISW3CInputContextClassClass;
    using LogRecordSet = MSUtil.ILogRecordset;
    using Microsoft.VisualStudio.TestTools.WebTesting;

    namespace IISLogToWebTest
    {
        public class IISLogReader
        {
            private string _iisLogPath;

            public IISLogReader(string iisLogPath)
            {
                _iisLogPath = iisLogPath;
            }

            public IEnumerable<WebTestRequest> GetRequests()
            {
                LogQuery logQuery = new LogQuery();
                IISLogInputFormat iisInputFormat = new IISLogInputFormat();

                string query = @"SELECT s-ip, s-port, cs-method, cs-uri-stem, cs-uri-query FROM " + _iisLogPath;

                LogRecordSet recordSet = logQuery.Execute(query, iisInputFormat);
                while (!recordSet.atEnd())
                {
                    ILogRecord record = recordSet.getRecord();
                    if (record.getValueEx("cs-method").ToString() == "GET")
                    {
                        string server = record.getValueEx("s-ip").ToString();
                        string path = record.getValueEx("cs-uri-stem").ToString();
                        string querystring = record.getValueEx("cs-uri-query").ToString();

                        StringBuilder urlBuilder = new StringBuilder();
                        urlBuilder.Append("http://");
                        urlBuilder.Append(server);
                        urlBuilder.Append(path);
                        if (!String.IsNullOrEmpty(querystring))
                        {
                            urlBuilder.Append("?");
                            urlBuilder.Append(querystring);
                        }

                        WebTestRequest request = new WebTestRequest(urlBuilder.ToString());
                        yield return request;
                    }

                    recordSet.moveNext();
                }
                recordSet.close();
            }
        }
    }

    请让我知道您是否觉得这个对您有用或是您还有其他任何问题。

                        JoshCh发布于星期一,2006年7月3日上午3点46分

    原文地址:http://blogs.msdn.com/joshch/archive/2006/07/03/65...

    OscarXie.net

    关注质量与体验——电子商务与自动化测试
    http://www.cnblogs.com/oscarxie/

  • 相关阅读:
    Codeforces 1017E The Supersonic Rocket 凸包,计算几何,字符串,KMP
    Codeforces 1017F The Neutral Zone 数论
    51Nod1253 Kundu and Tree 容斥原理
    扩展中国剩余定理 (exCRT) 的证明与练习
    简单布局
    自创一个百变布局
    ajax上传文件
    DIV+CSS布局
    windowbuilder
    SWT开发工具
  • 原文地址:https://www.cnblogs.com/oscarxie/p/958045.html
Copyright © 2020-2023  润新知