CruiseControl中使用NUnit中测试WEB服务

本文介绍了一种使用Cassini Web服务器进行自动测试的方法,该方法适用于CruiseControl环境下的WEB服务测试,能够实现在不依赖IIS的情况下直接运行编译后的WEB服务,并提供了具体的实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我的项目需要在CruiseControl中自动测试WEB服务,测试需满足下列条件:
* 不依赖于IIS
* 不对WebService做部署,直接在其CC编译的生成目录中运行WEB服务

如果满足以上需求,当然也可以使用相同方式在VS和CC里测试网页。

在网上找到了SCOTT的文章 NUnit Unit Testing of ASP.NET Pages, Base Classes, Controls and other widgetry using Cassini (ASP.NET Web Matrix/Visual Studio Web Developer),使用Cassini来做果然方便。

自己写了个帮助类(见页尾),然后这样使用(在 TestFixtureSetUp中运行Cassini,返回其服务地址给测试使用)
        [TestFixtureSetUp]
        
public   void  Init()
        
{
            _cassni 
= new CassiniHelper();
            _cassni.Start();
            
//你可如此获得Cassini运行起来的WEB服务地址
            
//config.CurrentServiceEntryUrl = _cassni.WebServerUrl;
        }


        [TestFixtureTearDown]
        
public   void  FixtureTearDown()
        
{
            _cassni.Close();
        }
  • CassiniHelper
         internal   class  CassiniHelper
        
    {
            
    private int _webServerPort = 26610;
            
    private Server _webServer;
            
    private readonly string _webServerVDir = "/ws";
            
    private string _workingPath;
            
    private string _webServerUrl;
            
    private string _abstractPathFromTestToWebService = @"..\..\..\WebService";

            
    public CassiniHelper()
            
    {
                SetWebServerUrl();
            }


            
    public int WebServerPort
            
    {
                
    get return _webServerPort; }
                
    set 
                

                    _webServerPort 
    = value;
                    SetWebServerUrl(); 
                }

            }


            
    public string WebServerUrl
            
    {
                
    get return _webServerUrl; }
                
    set { _webServerUrl = value; }
            }


            
    /**//// <summary>
            
    /// 从测试案例程序集所在目录到WEBServer所在目录的相对路径
            
    /// </summary>

            public string AbstractPathFromTestToWebService
            
    {
                
    get return _abstractPathFromTestToWebService; }
                
    set { _abstractPathFromTestToWebService = value; }
            }


            
    /**//// <summary>
            
    /// WEB服务的虚拟路径
            
    /// </summary>

            public string WebServerVDir
            
    {
                
    get return _webServerVDir; }
            }


            
    public void Start()
            
    {
                
    if(!Directory.Exists(_workingPath))
                    
    throw new DirectoryNotFoundException(_workingPath);

                _webServer 
    = new Server(_webServerPort, WebServerVDir, _workingPath);
                _webServer.Start();
            }


            
    public void Close()
            
    {
                
    try
                
    {
                    
    if (_webServer != null)
                    
    {
                        _webServer.Stop();
                        _webServer 
    = null;
                    }

                }

                
    catch { }
            }


            
    private void SetWebServerUrl()
            
    {
                
    string currentPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
                DirectoryInfo dinfo 
    = new DirectoryInfo(Path.Combine(currentPath, _abstractPathFromTestToWebService));
                _workingPath 
    = dinfo.FullName;

                
    //拷贝Cassini.dll到web服务的bin目录下
                string cassini = "Cassini.dll";
                File.Copy(Path.Combine(currentPath, cassini), Path.Combine(Path.Combine(_workingPath,
    "bin"),cassini));

                _webServerUrl 
    = String.Format("http://localhost:{0}{1}", _webServerPort, WebServerVDir);
            }

        }

转载于:https://www.cnblogs.com/itrust/archive/2008/07/18/1246307.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值