这个系列的主旨是要跟你们分享一下关于自动化测试框架的构建的一些心得。这几年,作了一些自动化测试框架以及团队的构建的工做。过程当中遇到了不少这样的同窗,他们在学习了某一门语言和一些自动化测试的类库或者工具以后,打算进一步的提升。我想这个系列也许会帮助到你,咱们一块儿从各个维度来看一看自动化测试框架的一些最佳实践。本人能力有限,若是有什么不正确的的地方还各位大牛指正。html
在开始具体的技术和理论以前,咱们先来思考一下自动化测试的目的是什么?我简单的罗列了几点:数据库
以上这几点算是咱们构建自动化测试的一些缘由,在一开始聊这些是但愿小伙伴们不要在构建框架的过程当中时刻记得咱们的宗旨。勿忘初心,方得始终嘛~~~(其实,不少失败的自动化框架就是在实践的过程当中渐渐违背了上述的这些目标)编程
上来就谈论技术选型,工具类库的选择,设计模式,生命周期这些概念也许会让你迷茫。一个实实在在的测试用例也许是会是好的开始。但愿能让你先有一个感官的认识,后面的文章咱们会一步步由浅入深的刨析这个Demo Case.
下面这个Demo使用的是C#语言和单元测试xUnit.Net框架。若是对xUnit.Net还不是很熟悉的的同窗,建议能够先看看个人另外一个系列《玩转xUnit.Net》,对于这个CASE而言了解单元测试的基本使用便可。
json
1 namespace AutoFramework.TestCase 2 { 3 public class TestSuite_Demo : TestBase 4 { 5 public TestSuite_Demo(TestContextFixture context, ServiceFixture service, DBFixture database) 6 : base(context, service, database) { } 7 8 [Fact(DisplayName = "TestCase.Demo001")] 9 public void Demo_Case_CreateCamp() 10 { 11 //-->Data preparation. 12 var userModel = ModelBuilder.ForJsonFile<UserModel>("DemoCase/TestData.json"); 13 14 //-->Test case exec way 01. 15 var signInPage = Router.GoTo<SignInPage>(); 16 var homePage = signInPage.SignIn("user-name", "pwd"); 17 var addUserPage = homePage.NavMenu.Select<AddUserPage>("User", "New"); 18 var userListPage = addUserPage.AddUser(userModel); 19 20 //-->Test case exec way 02. 21 /*You can custom this 'Workflow'*/ 22 var userListPage = Router.GoTo<SignInPage>() 23 .SignIn("user-name", "pwd") 24 .NavMenu.Select<AddUserPage>("User", "New") 25 .AddUser(userModel); 26 27 Assert.True(userListPage.IsExistUser(userModel.Name)); 28 29 30 //more 31 //this.Service.CallSomeService(someModel); 32 //this.Database.ExecSomeAction(someModel); 33 } 34 } 35 }
我在《Lesson 08 - Selenium For C# 之 PageFactory & 团队构建》一文中,提到过自动化测试团队的组成,而上面的Demo是基于一个成熟的框架(也就是这个系列文章所要带你一步步构建的测试框架),所编写的最顶层的测试用例。
首先思考一下这个问题,一个Web手工测试测试人员是如何来完成测试工做的:设计模式
那么,结合上面的测试用例Demo,咱们来总结一下,将要实现的自动化测试框架应该为普通的用例编写人员提供哪些的功能:浏览器
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。接下来的几篇文章咱们会针对这个模式进行讲解。post
任何一个框架都是一系列复杂组件的协做。咱们将要一块儿构建的自动化测试框架会拥有下列的一些组件:单元测试
这一篇就先到这里啦~~,自动化测试框架的构建是须要必定知识基础和自动化测试经验的。但愿咱们能在接下来的这段时间里一块儿提升,一样也但愿个人观点对你有所启发和帮助~~~
小北De系列文章:
《[小北De编程手记] : Selenium For C# 教程》
《[小北De编程手记]:玩转 xUnit.Net》(未完成)