MVC架构简介及其测试策略

 

最近在WEB端测试工作中陷入了瓶颈,单纯的手动功能测试在没有成熟的代码规范之前还是很容易坑的,WEB自动化测试一时半会还没有什么进展,所以决定先学习一下网站用的MVC架构,跟着教程写了一个小网站,大概也找到了WEB测试工作的几个突破口。

 

MVC即为按照分层解耦的思想,将网站结构分成了Model(模型)-View(视图)-Controller(控制器)三层架构,三层架构的职责如下:

Model层:是应用程序中用于处理应用程序数据逻辑的部分,通常模型对象负责在数据库中存取数据;简单来说,就是在Model层进行业务逻辑的处理;

View层:是应用程序中处理数据显示的部分,通常视图是依据模型数据创建的;简单来说,View层就是显示数据以及发送请求;

Controller层:应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据;简单来说,Controller层用于接收View层发送的请求,收到请求后调用对应Model层进行业务处理,然后将处理后的结果返回给View层。

M-V-C三层的关系大概可以如下图所示:

 

 

根据签下来的网站代码调试了之后,发现MVC的实现原理还是很有意思的:

我们以访问http://localhost:1000/EvectionExpensesManage/EvectionExpensesApply这个为例,来理解MVC的实现原理,调试程序后的结论如下:

View层接到用户请求,调用EvectionExpensesManageController类下的EvectionExpensesApply方法,根据业务立即得到结果,最后调用对应视图来显示结果。

 

那么我们仔细对比一下URL的后缀和控制器还有方法的区别,会发现很有意思的一个现象:

/EvectionExpensesManage/EvectionExpensesApply

调用EvectionExpensesManageController控制器下的EvectionExpensesApply方法

也就是说,MVC架构下URL的构成即为对应的控制器类名去掉Controller/调用的方法。

那么,如果方法有入参怎么办?我们再来看另一个URL:

http://localhost:10344/AbnormalPunch/ApplySubmit?ID=13244&EmployeeID=1D2DE5AD8BC74E2A9CA70DE3567472EB

显然,这个URL即为调用的AbnormalPunchController控制器下的ApplySubmit方法,定位到该方法的代码为:

public int ApplySubmit(string id, string EmployeeID)
{return _AbnormalPunchBLL.ApplySubmit(Convert.ToInt32(id), EmployeeID, Session["UserID"].ToString());
}

再对比一下URL的构成方式,我们很容易就能得到结论:

IDEmployeeID为参数,控制器调用的方法和参数之间用?分隔,多个参数之间用&分隔

即调用AbnormalPunchController类中的ApplySubmit方法,入参为IDEmployeeID

当然,/home/index 表示网站首页,可以省略。

 

在了解了MVC的基本架构以后,回过头来反思以前的WEB测试工作,一般就是通过UI/控件/业务功能/跳转/导航/数据交互几个方面进行的,在了解了MVC架构以后,发现可以从以下几个方面突破:

M-V-C三层架构的交互,引入接口测试验证交互过程中的数据传输,保证版本质量:

FireFox浏览器下的FireBug插件、Chrome浏览器自带的开发者工具都可以很轻松的看到控制器返回给视图的数据,可以发现一些只在页面上测试很容易漏掉的问题。

我之前就遇到过,改了一句sql引发了其他页面的bug,或者改了一个查询条件影响到其他查询条件的情况,现在回想起来,回归测试没有做好是一方面,但是如果当时测试的时候关注了返回信息和影响的页面,这个问题就很容易避免了。

根据URL的构成方式,出现问题时可以快速定位到出现问题的部分,提高定位效率:

自己一直有在尝试说尽可能的将bug准确定到代码上,API或WEBSERVICE端的代码自己也能定位了,但是在真正学习MVC架构之前都是像无头苍蝇一样,在VS如此强大的IDE下勉强行得通,换个IDE怕是早就砸键盘了。

初步考虑安全性,比如URL中是否有用户的重要信息,是否需要加密处理

比如部分参数,可以在URL中屏蔽掉或者进行加密处理展示在URL上,如果明文进行处理,很有可能会造成信息泄露。

既然自己了解了MVC的架构,下一步或许可能会考虑玩一下单元测试吧23333333

 

转载于:https://www.cnblogs.com/rd-ddddd/p/6959232.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/254397.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++多线程实例(_beginThreadex创建多线程)

C多线程(二)(_beginThreadex创建多线程) C/C Runtime 多线程函数一 简单实例(来自codeprojct:http://www.codeproject.com/useritems/MultithreadingTutorial.asp) 主线程创建2个线程t1和t2,创建时2个线程…

halcon求取区域顶点

文章目录简介Halcon源代码处理效果博主写作不容易,孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 简介 使用halcon求取顶点的方法。 Halcon源代码 read_image (Image1, 1.png)points_foerstner (Image1, 1, 2, 3, 200, 0.3, gauss, false, RowJunctions, …

从excel表中生成批量SQL,将数据录入到数据库中

excel表格中有许多数据,需要将数据导入数据库中,又不能一个一个手工录入,可以生成SQL,来批量操作。1.首先在第二行的H列,插入函数:CONCATENATE("INSERT INTO book (bookid, title, volume, author, u…

Linux 的多线程编程的高效开发经验

转自:http://www.chineselinuxuniversity.net/articles/22615.shtml 本文中我们针对 Linux 上多线程编程的主要特性总结出 5 条经验,用以改善 Linux 多线程编程的习惯和避免其中的开发陷阱。在本文中,我们穿插一些 Windows 的编程用例用以对…

Visual C++中error spawning cl.exe解决办法

| 版权声明:本文为博主原创文章,未经博主允许不得转载。 今天安装Vc6.0的时候出现了一个error spawning cl.exe的错误,在网上找了一些资料,才知道这是因为路径设置的问题引起的, “cl.exe”是VC真正的程序编译器&…

HEXA机器人荣获CES Asia2018 创新奖

2019独角兽企业重金招聘Python工程师标准>>> 6月13日至15日,亚洲消费电子展CES Asia 2018将在上海新国际博览中心如期举行。在活动到来前,美国消费技术协会(CTA)于5月24日,提前揭晓了“2018亚洲消费电子展创…

【bzoj3994】[SDOI2015]约数个数和 莫比乌斯反演

题目描述 设d(x)为x的约数个数,给定N、M,求 输入 输入文件包含多组测试数据。 第一行,一个整数T,表示测试数据的组数。接下来的T行,每行两个整数N、M。输出 T行,每行一个整数,表示你所求的答案…

Linux根文件系统结构再认识

Linux根文件系统结构再认识刘建文(http://blog.csdn.net/keminlau ) INTRO 尽管Linux的根文件系统在形式表现上是一体的(所有数据目录均为根目录下的子目录),但实际它们是多个不同的【逻辑主体】(为了实现…

在Window10上使用Ubuntu终端

在Windows10上使用Ubuntu终端 习惯了ubuntu的开发,回到windows的command可以说是很绝望了。之前偶尔用windows时一直用git-bash来代替。但是发现windows已经添加了对ubuntu子系统的支持,那直接用不是更爽。 1.安装 进入控制面板,开启适用于Li…

为静态博客生成器WDTP移植了一款美美哒主题

前言 关于这个主题的移植后公布,我已经联系了主题作者并取得同意,这个主题是一夜涕所写的Sgreen,预览图见下 关于WDTP 就是一个很方便很便携很快速的cpp编写的带gui跨平台的开源的静态博客生成器,软件作者更新记录在V站可以找到,软…

TCP/IP数据包结构分析

一般来说,网络编程我们只需要调用一些封装好的函数或者组件就能完成大部分的工作,但是一些特殊的情况下,就需要深入的理解 网络数据包的结构,以及协议分析。如:网络监控,故障排查等…… IP包是不安全的&am…

世界杯快到了,看我用Python爬虫实现(伪)球迷速成!

还有4天就世界杯了,作为一个资深(伪)球迷,必须要实时关注世界杯相关新闻,了解各个球队动态,这样才能在一堆球迷中如(大)鱼(吹)得(特)水…

Bootstrap学习笔记(四)-----Bootstrap每天必学之表单

本文主要讲解的是表单,这个其实对于做过网站的人来说,并不陌生,而且可以说是最为常用的提交数据的Form表单。本文主要来讲解一下内容: 1.基本案例2.内联表单3.水平排列的表单4.被支持的控件5.静态控件6.控件状态7.控件尺寸8.帮助文…

服务器租用单线、双线、bgp 相比有哪些区别优势?

2019独角兽企业重金招聘Python工程师标准>>> 在IDC行业中,服务器的稳定性、安全性是考核服务商的主要指标,影响这两个指标的因素有很多,其中比较重要的有三个,分别是服务器的配置、机房骨干网宽带和机房的线路。我们常…

SQL Server 数据库的维护(四)__游标(cursor)

--维护数据库-- --游标(cursor)-- --概述: 注:使用select语句查询结果的结果集是一个整体,如果想每次处理一行或一部分行数据,游标可以提供这种处理机制。可以将游标理解为指针。指针指向哪条记录,哪条记录即是被操作记…

关于在unity中动态获取字符串后在InputField上进行判断的BUG

今天想做一个简单的密码锁定控制功能,但是出现了问题。我是在游戏开始时读取streamingAsset中的text中的文本,其实就是密码如下图密码是123456789 然后我在程序中输入了该密码出现错误,居然错了。 然后我打印读取的文本信息是什么、没错啊。然…

转载 调用xvid 实现解码

2011-06-01 00:26:14) 转载view plaincopy to clipboardprint? /// intinit_decoder() { intret; xvid_gbl_init_t xvid_gbl_init; xvid_dec_create_txvid_dec_create; memset(&xvid_gbl_init, 0,sizeof(xvid_gbl_init_t)); memset(…

创业感悟:技术兄弟为什么一直没有起来(1)

相信很多做技术的朋友,看到“人脉”两个字,就显得有些敏感,有人甚至产生一种“抵触”的心理。 因为在很多人的心中,会自动的把“人脉”和“关系”关联起来,会把“人脉”与“走后门”,甚至会和“酒桌文化”&…

京东入职一周感悟:4个匹配和4个观点

入职一周啦,随便写点。一、京东之缘1、我和京东之间的4点匹配Ⅰ技术2008年9月到2016年9月,一直坚持自学技术。京东,是一家商业化的互联网公司,有技术积淀,有发挥空间。作为技术人员,职业匹配。Ⅱ读书大学的…

01_SQlite数据库简介

转载于:https://www.cnblogs.com/ZHONGZHENHUA/p/7023014.html