这里写目录标题
- unittest框架解析
- 批量执行脚本
-
- 构建测试套件
- addTest() 的应用
- makeSuite()和TestLoader()的应用
- discover()的应用
- 用例的执行顺序
- 忽略用例执行
- unittest断言
- HTML 告生成
- 异常捕捉与错误截图
- 数据驱动
之前讲解了selenium的脚本录制和api。在进行脚本录制导出的脚本中,我们发现其中多了很多代码,这些代码正 是unittest测试框架。
unittest框架解析
unittest 是python 的单元测试框架, unittest 单元测试提供了创建测试用例,测试套件以及批量执行的方案, unittest 在安装pyhton 以后就直接自带了,直接import unittest 就可以使用。
作为单元测试的框架, unittest 也是可以对程序最小模块的一种敏捷化的测试。在自动化测试中,我们虽然不需要做白盒测试,但是必须需要知道所使用语言的单元测试框架。利用单元测试框架,创建一个类,该类继承unittest 的TestCase,这样可以把每个case看成是一个最小的单元,由测试容器组织起来,到时候直接执行,同时引入测试 告。
unittest 各组件的关系为:
构建测试套件
完整的单元测试很少只执行一个测试用例,开发人员通常都需要编写多个测试用例才能对某一软件功能进行比较完 整的测试,这些相关的测试用例称为一个测试用例集,在unittest中是用TestSuite 类来表示的。
addTest() 的应用
当有多个或者几百测试用例的时候,这样就需要一个测试容器( 测试套件) ,把测试用例放在该容器中进行执行, unittest 模块中提供了TestSuite 类来生成测试套件,使用该类的构造函数可以生成一个测试套件的实例,该类提供了addTest来把每个测试用例加入到测试套件中。
上述做法有两个不方便的地方,阻碍脚本的快速执行,必须每次修改runall.py:
- 1)需要导入所有的py文件,比如import testbaidu1,每新增一个需要导入一个
- 2)addTest需要增加所有的testcase,如果一个py文件中有10个case,就需要增加10次
makeSuite()和TestLoader()的应用
在unittest 框架中提供了makeSuite() 的方法,makeSuite可以实现把测试用例类内所有的测试case组成的测试套件TestSuite ,unittest 调用makeSuite的时候,只需要把测试类名称传入即可。
TestLoader 用于创建类和模块的测试套件,一般的情况下,使TestLoader().loadTestsFromTestCase(TestClass) 来加载测试类。
经过makeSuite()和TestLoader()的引入,我们不用一个py文件测试类,只需要导入一次即可。 那么能不能测试类也不用每次添加指定呢/p>
discover()的应用
discover 是通过递归的方式到其子目录中从指定的目录开始, 找到所有测试模块并返回一个包含它们对象的TestSuite ,然后进行加载与模式匹配唯一的测试文件,discover 参数分别为discover(dir,pattern,top_level_dir=None)
用例的执行顺序
unittest 框架默认加载测试用例的顺序是根据ASCII 码的顺序,数字与字母的顺序为: 0-9,A-Z,a-z
所以, TestAdd 类会优先于TestBdd 类被发现, test_aaa() 方法会优先于test_ccc() 被执行。对于测试目录与测试文件来说, unittest 框架同样是按照这个规则来加载测试用例。
而addTest()方法按照增加顺序来执行。
忽略用例执行
unittest断言
自动化的测试中, 对于每个单独的case来说,一个case的执行结果中, 必然会有期望结果与实际结果, 来判断该case是通过还是失败,在unittest 的库中提供了大量的实用方法来检查预期值与实际值, 来验证case的结果, 一般来说, 检查条件大体分为等价性, 逻辑比较以及其他, 如果给定的断言通过, 测试会继续执行到下一行的代码, 如果断言失败, 对应的case测试会立即停止或者生成错误信息( 一般打印错误信息即可) ,但是不要影响其他的case
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!