ASP.NET开源MVC框架VICI 测试的便利性

简介: 平滑的学习曲线是微软技术的最大特征,在ASP.NET上,从一开始我们什么都不会,到慢慢的基本什么都会了,下一个值得向我这样的菜鸟突破的是什么呢?是海量并发?海量数据?高可扩展性?高度安全性?高度稳定性?       开始我觉得可能可扩展性比较重要,经过一年满负荷的工作,我现反倒觉得他...

       平滑的学习曲线是微软技术的最大特征,在ASP.NET上,从一开始我们什么都不会,到慢慢的基本什么都会了,下一个值得向我这样的菜鸟突破的是什么呢?是海量并发?海量数据?高可扩展性?高度安全性?高度稳定性?

      开始我觉得可能可扩展性比较重要,经过一年满负荷的工作,我现反倒觉得他们都是在扯淡,除了给脸上贴金之外没什么用,应用程序的可测试性应该是学下一道门槛,不可能测试的项目会令项目组进入开发组开发-》测试组手工测试出现BUG=》开发组开发改bug恶性的循环,最要命的是不可测试的程序无法让测试组 使用绝大多数测试工具,造成bug潜伏;

  另外,可测试性也是个人学习 《重构》、《单元测试》、《性能优化》等的前提,自己写的东西不可测试,这些东西看了一点用也没用,书中每100个字就要4个单词是测试- -;这些东西都需要用测试来检验所做的修改是否正确。可测试性应该是ASP.NET学习的第二道门坎(PS 第一道门坎是 ViewState

以前关于vici的文章 http://www.cnblogs.com/qqloving/category/292931.html

开源ASP.NET mvc (官网地址:http://viciproject.com/index

有人可能说 微软搞那个开源的mvc已经很不错了,可是在可测试方面和vici比起来 还差的很远

官网的案例下载包含测试代码:http://viciproject.com/wiki/Projects/Mvc/Download

vicimvc 为以下几个方面提供了非常简单的测试方法

1 没有登录的用户进入授权页面时,页面应跳转到登陆页面

2 检查应用程序是否正确重定向到登录页

3 填写用户名和密码 登录(模拟登录)

4 检查当前页面是否包含我们所需要的html标签

测试部分的代码

using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;

using Vici.Mvc;

using NUnit.Framework;
using Demo.ViciMvc;


namespace UnitTest.Demo.ViciMVC
{
    /// <summary>
    /// Summary description for UnitTest2
    /// </summary>
    [TestFixture]
    public class UnitTest2
    {
        /// <summary>
        /// 测试没有登录的用户访问main 页面 则需要跳转到login登陆页
        /// 
        /// </summary>
        [Test]
        public void TestUnauthorizedAccess()
        {
            OfflineWebSession webSession = CreateWebSession();

            // Navigate to a page which requires login
            webSession.PageGet("/main");

            // Check if we were redirected to the login page
            Assert.AreEqual("/login", webSession.CurrentPage);
        }

        /// <summary>
        /// 测试用户登录
        /// 什么编写测试脚本 录制测试脚本 都弱爆了!!!!
        /// </summary>
        [Test]
        public void TestLogin()
        {
            OfflineWebSession webSession = CreateWebSession();

            // Navigate to the login page
            webSession.PageGet("/login");

            // Enter login, password and click on the "btnLogin" button
            webSession.PostData["login"] = "demo";
            webSession.PostData["password"] = "promesh";
            webSession.PushButton("btnLogin");

            // Post form
            string html = string.Empty;
           html= webSession.PagePost(webSession.CurrentPage);

            // Check if we were redirected to the main page
            Assert.AreEqual("/main", webSession.CurrentPage,html);

            // Load the user we logged in as
            User user = DataService.FindUser("demo", "promesh");

            // Check if the session contains the correct user
            Assert.AreEqual(Application.Session.User.UserID, user.UserID, "Wrong user logged in???");
        }

        private string Login(OfflineWebSession webSession)
        {
            webSession.PageGet("/login");

            // Enter login, password and click on the "btnLogin" button
            webSession.PostData["login"] = "demo";
            webSession.PostData["password"] = "promesh";
            webSession.PushButton("btnLogin");
           return  webSession.PagePost(webSession.CurrentPage);

        

            // Post form
            //return webSession.CurrentPage;

        }

        [Test]
        public void TestEditPage()
        {
            OfflineWebSession webSession = CreateWebSession();

            //这个是当前页面的html 
            string html = Login(webSession);
            Assert.IsTrue(html.Contains("/employee/edit/1"), html);
   
        }

        private static OfflineWebSession CreateWebSession()
        {
            OfflineWebSession webSession = new OfflineWebSession(System.IO.Path.GetFullPath(@"..\..\..\Demo.ViciMVC"));

            webSession.FollowRedirects = true;

            return webSession;
        }
    }
}

 

vici 能够进行有效的测试 是他对session进行了自己特殊的实现 自己实现了一个OfflineWebSession, 专门用来做测试

 

CreateWebSession 用来创建一个测试用的session,

 

        private static OfflineWebSession CreateWebSession()
        {
            OfflineWebSession webSession = new OfflineWebSession(System.IO.Path.GetFullPath(@"..\..\..\Demo.ViciMVC"));

            webSession.FollowRedirects = true;

            return webSession;
        }

 

vici 的测试代码有一些配置项

 

<configuration>

  <appSettings>
    <add key="Mvc.ApplicationClass" value="Demo.ViciMvc.Application, Demo.ViciMVC" /> 框架的dll
    <add key="Mvc.TemplatePath" value="Content/templates" /> 模板的路径
  </appSettings>

</configuration>

@"..\..\..\Demo.ViciMVC" 为要测试项目的地址

 

一提到要登录,就要输入用户名呢密码或者录制测试脚本,vici的实现超级简单

 

 /// <summary>
        /// 测试用户登录
        /// 什么编写测试脚本 录制测试脚本 都弱爆了!!!!
        /// </summary>
        [Test]
        public void TestLogin()
        {
            OfflineWebSession webSession = CreateWebSession();

            // Navigate to the login page
            webSession.PageGet("/login");

            // Enter login, password and click on the "btnLogin" button
            webSession.PostData["login"] = "demo";
            webSession.PostData["password"] = "promesh";
            webSession.PushButton("btnLogin");

            // Post form
            string html = string.Empty;
           html= webSession.PagePost(webSession.CurrentPage);

            // Check if we were redirected to the main page
            Assert.AreEqual("/main", webSession.CurrentPage,html);

            // Load the user we logged in as
            User user = DataService.FindUser("demo", "promesh");

            // Check if the session contains the correct user
            Assert.AreEqual(Application.Session.User.UserID, user.UserID, "Wrong user logged in???");
        }

 

webSession.PageGet("/login"); 和webSession.PagePost(webSession.CurrentPage); 返回一个字符串是当前请求的url 的页面的html,可以通过这个字符串是否包含我们需要的数据来 进行一些测试

例如 实例代码

        [Test]
        public void TestEditPage()
        {
            OfflineWebSession webSession = CreateWebSession();

   
            string html = Login(webSession);
            Assert.IsTrue(html.Contains("/employee/edit/1"), html);
   
        }

 

vici 的测试代码 无论是 通过

NUnit.Framework 还是 微软自带的测试框架 都可以测试的

所以 vic 果断 NX

 

 

 

 

 

 

 

 

 

 

test
相关文章
|
6天前
|
Web App开发 JavaScript 前端开发
深入理解自动化测试框架Selenium的设计与实现
【4月更文挑战第20天】 在软件测试领域,自动化测试已成为提升测试效率和确保产品质量的关键手段。Selenium作为一款广泛使用的开源自动化测试框架,其设计精巧且功能强大,为Web应用提供了一种灵活、高效的测试解决方案。本文将深入探讨Selenium的核心架构与实现细节,解析其如何通过模拟用户操作来执行测试用例,以及它如何适应不断变化的Web技术标准。通过对Selenium内部机制的剖析,旨在帮助测试工程师更好地掌握该工具,并在测试实践中发挥其最大效能。
|
7天前
|
监控 测试技术 数据安全/隐私保护
如何将代理IP集成到自动化测试框架中?
如何将代理IP集成到自动化测试框架中?
|
9天前
|
敏捷开发 监控 前端开发
深入理解自动化测试框架Selenium的架构与实践
【4月更文挑战第16天】 在现代软件开发过程中,自动化测试已成为确保产品质量和加快迭代速度的关键手段。Selenium作为一种广泛使用的自动化测试工具,其开源、跨平台的特性使得它成为业界的首选之一。本文旨在剖析Selenium的核心架构,并结合实际案例探讨其在复杂Web应用测试中的高效实践方法。通过详细解读Selenium组件间的交互机制以及如何优化测试脚本,我们希望为读者提供深入理解Selenium并有效运用于日常测试工作的参考。
15 1
|
10天前
|
自然语言处理 测试技术 API
深入理解自动化测试框架Selenium的设计理念与实践
【4月更文挑战第15天】 在现代软件开发过程中,自动化测试已成为确保产品质量和加速迭代的关键手段。Selenium作为一种广泛使用的自动化测试框架,提供了对多种浏览器和平台的支持,极大地促进了Web应用的功能测试。本文旨在剖析Selenium的核心设计理念,探讨其在实际项目中的应用,并指出常见的误区及最佳实践,以期帮助测试工程师更高效地利用Selenium进行测试工作。
|
11天前
|
监控 测试技术 API
深入理解自动化测试框架Selenium的设计与实现
【4月更文挑战第14天】在软件开发过程中,自动化测试是确保代码质量、减少人工重复劳动的关键步骤。Selenium作为一款广泛使用的自动化测试工具,提供了对多种浏览器和操作系统的支持。本文将探讨Selenium的核心组件及其架构设计,分析其如何通过WebDriver与浏览器交互,以及它如何支持多种编程语言进行脚本编写。同时,我们还将讨论Selenium Grid的作用以及它如何实现并行测试,以缩短测试周期并提高测试效率。
176 59
|
13天前
|
Web App开发 前端开发 Java
框架分析(11)-测试框架
框架分析(11)-测试框架
|
27天前
|
敏捷开发 设计模式 监控
深入理解自动化测试框架的设计原则
在软件开发的复杂多变环境中,自动化测试已成为确保产品质量和加速市场交付的关键步骤。本文将探讨自动化测试框架的设计原则,包括模块化、可扩展性、易用性和可靠性,旨在为软件测试工程师提供构建高效、健壮且易于维护的自动化测试系统的指导。通过分析设计模式的应用,我们将了解如何减少代码冗余,提高测试覆盖率,并适应快速变化的技术要求。
|
3月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
42 0
|
1月前
|
开发框架 前端开发 .NET
进入ASP .net mvc的世界
进入ASP .net mvc的世界
29 0
|
1月前
mvc.net分页查询案例——mvc-paper.css
mvc.net分页查询案例——mvc-paper.css
5 0