自动化测试框架设计-01基本概念
- 2022-01-06 09:00:00
- 虫师
- 转贴:
- 公众号
- 4786
库与框架
我们在基于编程语言安装第三方扩展时,往往分不清他是库还是框架,那么我们先来解释二者的区别。相信不少同学对 MartinFowler并不陌生,他提出了分层 自动化测试、 PageObject等对测试领域产生深远影响的概念。先来看看他的解释:
A library is essentially a set of functions that you can call, these days usually organized into classes. Each call does some work and returns control to the client.
库本质上是一组可以调用的函数,现在通常被组织成类。每个调用都会执行一些工作,并将控制权返回给客户端。
A framework embodies some abstract design, with more behavior built in. In order to use it you need to insert your behavior into various places in the framework either by subclassing or by plugging in your own classes. The framework's code then calls your code at these points.
框架体现了一些抽象的设计,并内置了更多的行为。为了使用它,你需要通过子类或插入自己的类,将你的行为插入框架中的各个位置。然后,框架的代码在这些点调用你的代码。
另一段解释更加简洁:
The main difference between a library and a framework is determined by who controls the development process, which is known as inversion of control.
库和框架之间的主要区别取决于谁控制开发过程,这称为控制反转。
- Requests
根据官方的定义,Requests是一个库,这点相信你没有异议。
importrequests r=requests.get('https://api.github.com/user',auth=('user','pass')) r.status_code
上面的代码用于调用一个GET接口。当我们在使用库的时候,控制权是在我这里,我可以选择在任意类方法、函数中使用上面的代码。
- unittest
同样摘自官方的介绍,unittest是Python的标准库中集成的单元测试框架。
importunittest classTestStringMethods(unittest.TestCase): deftest_upper(self): self.assertEqual('foo'.upper(),'FOO') deftest_isupper(self): self.assertTrue('FOO'.isupper()) self.assertFalse('Foo'.isupper()) deftest_split(self): s='helloworld' self.assertEqual(s.split(),['hello','world']) #checkthats.splitfailswhentheseparatorisnotastring withself.assertRaises(TypeError): s.split(2) if__name__=='__main__': unittest.main()
上面这段代码实现了三条测试用例。当我们使用框架时,控制权是由框架决定的。除了你看到我们使用了unittest所提供的一些类方法 TestCase, main()、 assertXXX之外,还有一些隐含的规则。
- 必须创建一个类去集成 TestCase类。
- 定义测试用例必须以 test开头。
- 断言方法 assertXXX需要写在用例方法中。
工具与框架
工具和框架,我们有时也会在工作中混用,例如 selenium自动化测试工具、 selenium自动化测试框架,这二者有什么不同,这里引述Quora网站的一个回答。A TOOL is an instrument for special functions in software and system design. It has predefined inputs an delivers predefined outputs.
A FRAMEORK is a wider term. It is an amount of different TOOLs and design procedures in order to create a wider product f. i : a new software system (from analysing of the necessary problem till testing of all evaluated new software) or creating a new software language (including a parser as TOOL).
So a development of a TOOL can be made by an own FRAMEWORK.
A FRAMEWORK includes mental creativity a TOOL needs human factorized usability only.
工具是在软件和系统设计中执行特殊功能的工具。它有预定义的输入,提供预定义的输出。
框架是一个更广泛的术语。它是为了创建一个更广泛的产品,即:一个新的软件系统(从分析必要的问题到测试所有评估过的新软件)或创建一个新的软件语言(包括一个作为TOOL的解析器)。
因此,我们可以使用框架去开发一个工具。
一个框架包含了思维的创造性,而一个工具只需要人为因素的可用性。
根据上面回答, 工具更偏向于 软件,可以运行在操作系统之上,并提供独立的交互界面。例如性能测试工具 loadRunner。框架是基于编程语言被设计出来的,开源自动化测试框架 RobotFrameowrk。
- selenium是测试工具还是测试框架?
因此,我把Selenium称工具或框架都不够准确,我也没有有更适合的词来形容他,如果非要在 工具和 框架之间选一个,个人更倾向于称其为工具。
项目与框架
这两者的非常容易区分,甚至我没有找到 项目与框架的区别相关提问。如果把项目当成你屁股下面的这把椅子的话,那么,框架就是制造这把椅子所用的工具箱。项目非常具体的,例如,你开发一个用于学习编程的网站,我开发了一个用于爬取电影评分的脚本,这些都属于一个个非常具体的项目。
框架就是开发这些项目所用到的工具,例如,开发学习编程网站会用到Web框架,开发爬虫脚本会用到爬虫框架。
在自动化测试领域,我们更习惯性声称在开发 自动化测试框架?
一方面,我们有意无意的被一些技术文章或书籍误导,并未认真的思考二者的区别。
另一个方面,我们可以非常容易的将现有的一些框架和库拼装到一起。例如, pytest、 selenium、 allure放到一起去做自动化WebUI自动化测试,然后,再提供少量的样板用例。这其实更像是 脚手架或 项目模板。使用这样的项目模板,确实可以更方便的开始编写自动化测试用例。
参考下面这个项目,他就是一个典型的 自动化测试项目模板。https://github.com/defnngj/pyautoTest
开发自动化测试框架本质上是一种造轮子行为,他被设计的初衷是为了解决一类问题,并且独立于项目之外开发迭代。下一节,我将聊聊一个测试框架应该具备哪些特征。
发表评论
联系我们
- 联系人:阿道
- 联系方式: 17762006160
- 地址:青岛市黄岛区长江西路118号青铁广场18楼