写在最前面

  这个系列的主旨是要跟大家分享一下关于自动化测试框架的构建的一些心得。这几年,做了一些自动化测试框架以及团队的构建的工作。过程中遇到了很多这样的同学,他们在学习了某一门语言和一些自动化测试的类库或者工具之后,打算进一步的提高。我想这个系列也许会帮助到你,我们一起从各个维度来看一看自动化测试框架的一些最佳实践。本人能力有限,如果有什么不正确的的地方还各位大牛指正。

聊聊自动化测试的初心

在开始具体的技术和理论之前,我们先来思考一下自动化测试的目的是什么?我简单的罗列了几点:

  • 替代手工测试中的重复操作,让测试人员把时间花在更有价值的地方
  • 降低自动化测试用例编写的技术门槛,即尽可能降低学习成本,提高工作效率
  • 提高测试效率,在软件开发生命周期的各个环节为质量保驾护航
  • 精准的数据统计和分析,对产品质量和团队效能提供数据支持

  以上这几点算是我们构建自动化测试的一些原因,在一开始聊这些是希望小伙伴们不要在构建框架的过程中时刻记得我们的宗旨。勿忘初心,方得始终嘛~~~(其实,很多失败的自动化框架就是在实践的过程中渐渐违背了上述的这些目标)

从一个测试用例开始

  上来就谈论技术选型,工具类库的选择,设计模式,生命周期这些概念也许会让你迷茫。一个实实在在的测试用例也许是会是好的开始。希望能让你先有一个感官的认识,后面的文章我们会一步步由浅入深的刨析这个Demo Case.

  下面这个Demo使用的是C#语言和单元测试xUnit.Net框架。如果对xUnit.Net还不是很熟悉的的同学,建议可以先看看我的另一个系列《玩转xUnit.Net》,对于这个CASE而言了解单元测试的基本使用即可。

 namespace AutoFramework.TestCase
{
public class TestSuite_Demo : TestBase
{
public TestSuite_Demo(TestContextFixture context, ServiceFixture service, DBFixture database)
: base(context, service, database) { } [Fact(DisplayName = "TestCase.Demo001")]
public void Demo_Case_CreateCamp()
{
//-->Data preparation.
var userModel = ModelBuilder.ForJsonFile<UserModel>("DemoCase/TestData.json"); //-->Test case exec way 01.
var signInPage = Router.GoTo<SignInPage>();
var homePage = signInPage.SignIn("user-name", "pwd");
var addUserPage = homePage.NavMenu.Select<AddUserPage>("User", "New");
var userListPage = addUserPage.AddUser(userModel); //-->Test case exec way 02.
/*You can custom this 'Workflow'*/
var userListPage = Router.GoTo<SignInPage>()
.SignIn("user-name", "pwd")
.NavMenu.Select<AddUserPage>("User", "New")
.AddUser(userModel); Assert.True(userListPage.IsExistUser(userModel.Name)); //more
//this.Service.CallSomeService(someModel);
//this.Database.ExecSomeAction(someModel);
}
}
}

  我在《Lesson 08 - Selenium For C# 之 PageFactory & 团队构建》一文中,提到过自动化测试团队的组成,而上面的Demo是基于一个成熟的框架(也就是这个系列文章所要带你一步步构建的测试框架),所编写的最顶层的测试用例。
首先思考一下这个问题,一个Web手工测试测试人员是如何来完成测试工作的:

  • 测试用例执行前的数据准备
  • 一个可以工作的浏览器,自由的导航到不同的页面
  • 在不同的页面上进行的操作
  • 检查页面上的测试点(Check Point)
  • 检查数据库中的数据
  • 检查特定服务返回的数据

那么,结合上面的测试用例Demo,我们来总结一下,将要实现的自动化测试框架应该为普通的用例编写人员提供哪些的功能:

  • 从外部文件中获取测试数据的能力(ModelBuilder.ForJsonFile)
  • 控制路由的对象Router,协助测试人员进行页面导航以及PageObject对象的获取。
  • 用来描述页面功能的PageObject对象。
  • 调用系统服务的Service对象。
  • 进行数据库访问的数据库对象。

Note:当然,测试框架应当提供的功能远不止这些。

  读到这里,也许有些同学会有很多的疑问。Model是什么?Router是如何实现的?PageObject应该如何封装?Service 和 Database对象是怎么实现的?等等... ... 这些问题也是这个系列的文章想要跟大家分享的,后面的文章我会逐一跟大家讨论。在这里我们还是把关注点放在这个case上面,在之前列出来的那些Router,PageObject,Model,Service对象和数据库访问对象都能正常工作的前提下,编写自动化用例的人员是不是就可以很容易的完成测试用例的编写?细心的同学也许已经发现了,这个case似乎没有涉及到UI驱动的框架(比如:Selenium、Appnium、White...),我也没有说这个自动化测试测试的是一个什么样的项目。但是,通过这段代码:

    //-->Test case exec way 01.
var signInPage = Router.GoTo<SignInPage>();
var homePage = signInPage.SignIn("user-name", "pwd");
var addUserPage = homePage.NavMenu.Select<AddUserPage>("User", "New");
var userListPage = addUserPage.AddUser(userModel);

你是不是已经能大致的明白这个用例是做什么的呢?


  如果为你提供了所有对象的方法列表,你是不是也可以高效快速的完成其他的测试用例呢?回想一下我们构建自动化测试框架的初心。如果要测试人员可以像做手工测试一样书写自动化测试用例,是不是就做到了降低测试门槛的目的呢?这里用到了自动化测试的一个常见的设计模式-PageObject。接下来的几篇文章我们会针对这个模式进行讲解。

看看我们将要构建的框架

任何一个框架都是一系列复杂组件的协作。我们将要一起构建的自动化测试框架会拥有下列的一些组件:

  • 管理页面路由的工具:Router
  • 服务调用工具:ServiceInvoker
  • 数据库访问工具:DataKeeper
  • 针对PageObject模式
    • Action封装
    • CheckPoint封装
    • Component封装
  • 异常处理工具
  • 日志管理工具

  这一篇就先到这里啦~~,自动化测试框架的构建是需要一定知识基础和自动化测试经验的。希望我们能在接下来的这段时间里一起提高,同样也希望我的观点对你有所启发和帮助~~~

小北De系列文章:

  《[小北De编程手记] : Selenium For C# 教程

  《[小北De编程手记]:玩转 xUnit.Net》(未完成)

如果您认为这篇文章还不错或者有所收获,可以点击右下角的【推荐】按钮,因为你的支持是我继续写作,分享的最大动力!
作者:小北@North
来源:http://www.cnblogs.com/NorthAlan
声明:本博客原创文字只代表本人工作中在某一时间内总结的观点或结论,与本人所在单位没有直接利益关系。非商业,未授权,贴子请以现状保留,转载时必须保留此段声明,且在文章页面明显位置给出原文连接。

[小北De编程手记] Lesson 01 - AutoFramework构建 之 从一个简单的Demo聊起的更多相关文章

  1. [小北De编程手记] [Lesson 02] AutoFramework构建 之 Page Objects - 设计模式

    写在最前面 这个系列的主旨是要跟大家分享一下关于自动化测试框架的构建的一些心得.这几年,做了一些自动化测试框架以及团队的构建的工作.过程中遇到了很多这样的同学,他们在学习了某一门语言和一些自动化测试的 ...

  2. [小北De编程手记] : Lesson 01 玩转 xUnit.Net 之 概述

    谈到单元测试,任何一个开发或是测试人员都不会觉得陌生.我想大多数的同学也都是接触过各种单元测试框架.关于单元测试的重要性,应该不会有太多的质疑.这个系列,我向大家介绍一下xUnit.Net的使用.就让 ...

  3. [小北De编程手记] : Lesson 01 - Selenium For C# 之 环境搭建

    在我看来一个自动化测试平台的构建,是一种很好的了解开发语言,单元测试框架,自动化测试驱动,设计模式等等等的途径.因此,在下选择了自动化测试的这个话题来和大家分享一下本人关于软件开发和自动化测试的认识. ...

  4. [小北De编程手记] : Lesson 04 玩转 xUnit.Net 之 Fixture(下)

    上一篇文章<[小北De编程手记] : Lesson 03 玩转 xUnit.Net 之 Fixture(上)>向大家介绍了xUnit.Net 共享数据的方式.Test Case的构造函数 ...

  5. [小北De编程手记] : Lesson 08 - Selenium For C# 之 PageFactory & 团队构建

    本文想跟大家分享的是Selenium对PageObject模式的支持和自动化测试团队的构建.<Selenium For C#>系列的文章写到这里已经接近尾声了,如果之前的文章你是一篇篇的读 ...

  6. [小北De编程手记] : Lesson 07 - Selenium For C# 之 窗口处理

    在实际的自动化测试过程中,我们会遇见许多需要对窗口进行处理的情况.比如,点击删除某条信息的时候系统会显示一个Alert框.或者点击某个超链接时会在浏览器中打开一个新的页面.这一篇,来和大家分享一下Se ...

  7. [小北De编程手记] : Lesson 06 - Selenium For C# 之 流程控制

    无论你是用哪一种自动化测试的驱动框架,当我们构建一个复杂应用程序的自动化测试的时候.都希望构建一个测试流程稳定,维护成本较低的自动化测试.但是,现实往往没有理想丰满.而这一篇,我会为大家讲解我们在使用 ...

  8. [小北De编程手记] : Lesson 02 - Selenium For C# 之 核心对象

    从这一篇开始,开始正式的介绍Selenium 以及相关的组件,本文的将讨论如下问题: Selenium基本的概念以及在企业化测试框架中的位置 Selenium核心对象(浏览器驱动) Web Drive ...

  9. [小北De编程手记] : Lesson 03 - Selenium For C# 之 元素定位

    无论哪一种自动化测试的驱动框架(基于B/S,桌面应用,还是手机App).都应当具有一套优秀的元素定位技术.通常的自动化测试流程也可以简单的归结为是一个从被测试程序中识别或是定位元素以及执行操作和验证元 ...

随机推荐

  1. 记一次linux主机名莫名其妙变成了bogon

    起因:公司网络接口做了接口认证,虚拟机桥接至物理网卡无法完成认证进行网络访问,无奈之下只能讲虚拟机网络模式更改为NAT模式,更改完成之后进行ssh登录,发现主机名发生了变化. 更改NAT模式之前 [r ...

  2. 【Android Developers Training】 11. 支持不同语言

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  3. bootstrap轮播和百叶窗

    轮播 在bootstrap里面,有设置的图片轮播的代码: <div id="carousel-example-generic" class="carousel sl ...

  4. VMware中Mac OS中显示共享文件夹的方法

    在finder 偏好设置里的通用标签下,勾选  “已连接的服务器”

  5. centos 7 部署Thinksns

    因为Thinksns是PHP项目,我们这里部署需要搭建Apache+mysql+php环境. 1.mysql的安装,这里使用yum安装可以解决很多依赖包的问题.由于centos 7 没有自带mysql ...

  6. 固定Realm 与配置数据库连接实现登录验证

    具体内容 在之前的shiro的认证都是基于配置文件完成的,但是在整个shiro之中,对于用户的认证信息可能各种途径,那么在shiro中要想实现从不同的途径中取得用户的身份认证就需要Realm了. 认识 ...

  7. 数位DP练习

    水题 发布时间: 2017年6月22日 19:15   最后更新: 2017年6月23日 20:10   时间限制: 1000ms   内存限制: 128M 描述 给一个数n,求0~n内有多少个数满足 ...

  8. Spring+Mybatis配置

    Spring+Mybatis配置 之前做项目的时候用到了spring+mybatis框架,一直想抽空整理一下 Mybatis: mybatis是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架 ...

  9. Java 实现FTP上传和下载

    1. 目前网上开源的FTP Client主要有JFTP.FTP4.edtFtpjJ和Apache.FTPClient. 2. jftp地址:http://www.jmethods.com/ 3. ed ...

  10. ASP.NET Core之跨平台的实时性能监控

    前言 前面我们聊了一下一个应用程序 应该监控的8个关键位置. . 嗯..地址如下: 应用程序的8个关键性能指标以及测量方法 最后卖了个小关子,是关于如何监控ASP.NET Core的. 今天我们就来讲 ...