博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自动化测试_unittest框架
阅读量:3942 次
发布时间:2019-05-24

本文共 2528 字,大约阅读时间需要 8 分钟。

文章目录

unittest框架解析

unittest 是python 的单元测试框架,在python 的官方文档中,对unittest有详细的介绍,。

unittest 单元测试提供了创建测试用例,测试套件以及批量执行的方案, unittest 在安装pyhton 以后就直接自带了,直接import unittest 就可以使用。

作为单元测试的框架, unittest 也是可以对程序最小模块的一种敏捷化的测试。利用单元测试框架,首先创建一个类,该类继承unittest的TestCase,这样可以把每个case看成是一个最小的单元, 由测试容器组织起来,最后直接执行,同时生成测试报告。

unittest 各组件的关系为:

在这里插入图片描述

  • test fixture:初始化和清理测试环境,比如创建临时的数据库,文件和目录等,其中 setUp() 和 setDown()是最常用的方法
  • test case:单元测试用例,TestCase 是编写单元测试用例最常用的类
  • test suite:单元测试用例的集合,TestSuite 是最常用的类
  • test runner:执行单元测试
  • test report:生成测试报告

批量执行脚本

构建测试套件

创建测试套件:(suit)

1.addTest
2.makeSuit
3.TestLoad
4.discover
由上到下,粒度越来越大

用例的执行顺序

  • unittest 框架默认加载测试用例的顺序是根据ASCII 码的顺序,数字与字母的顺序为: 0 ~ 9,A ~ Z,a ~ z 。

    eg: TestAdd 类会优先于TestBdd 类被发现, test_aaa() 方法会优先于test_ccc() 被执行。

  • addTest()方法按照增加顺序来执行。

忽略用例执行

@unittest.skip(u'The function was canceled, neglects to perform thecase')

unittest断言

断言方法 断言描述
assertEqual(arg1, arg2, msg=None) 验证arg1=arg2,不等则fail
assertNotEqual(arg1, arg2, msg=None) 验证arg1 != arg2, 相等则fail
assertTrue(expr, msg=None) 验证expr是true,如果为false,则fail
assertFalse(expr,msg=None) 验证expr是false,如果为true,则fail
assertIs(arg1, arg2, msg=None) 验证arg1、arg2是同一个对象,不是则fail
assertIsNot(arg1, arg2, msg=None) 验证arg1、arg2不是同一个对象,是则fail
assertIsNone(expr, msg=None) 验证expr是None,不是则fail
assertIsNotNone(expr, msg=None) 验证expr不是None,是则fail
assertIn(arg1, arg2, msg=None) 验证arg1是arg2的子串,不是则fail
assertNotIn(arg1, arg2, msg=None) 验证arg1不是arg2的子串,是则fail
assertIsInstance(obj, cls, msg=None) 验证obj是cls的实例,不是则fail
assertNotIsInstance(obj, cls, msg=None) 验证obj不是cls的实例,是则fail

HTML报告生成

通过HTMLTestRunner.py 来生成测试报告。

HTMLTestRunner支持python2.7。python3可以参见来进行修改。

HTMLTestRunner.py 文件,下载地址:

下载后将其放在testcase目录中去或者放入…\Python\lib 目录下(windows)。

异常捕捉与错误截图

用例不可能每一次运行都成功,肯定运行时候有不成功的时候。如果可以捕捉到错误,并且把错误截图保存,这将是一个非常棒的功能,也会给我们错误定位带来方便。

例如编写一个函数,关键语句为driver.get_screenshot_as_file:

def savescreenshot(self,driver,file_name):if not os.path.exists('./image'):os.makedirs('./image')now=time.strftime("%Y%m%d-%H%M%S",time.localtime(time.time()))#截图保存driver.get_screenshot_as_file('./image/'+now+'-'+file_name)time.sleep(1)

数据驱动

python 的unittest 没有自带数据驱动功能。所以如果使用unittest,同时又想使用数据驱动,那么就可以使用DDT来完成。

ddt的安装:    

pip install ddtpython setup.py install

ddt使用方法:(参考文档)

  • dd.ddt:装饰类,也就是继承自TestCase的类。
  • ddt.data:装饰测试方法。参数是一系列的值。
  • ddt.file_data:装饰测试方法。参数是文件名。文件可以是json 或者 yaml类型。
    注意:
    *** 如果文件以”.yml”或者”.yaml”结尾,ddt会作为yaml类型处理,其他所有文件都会作为json文件处理。
    *** 如果文件中是列表,每个列表的值会作为测试用例参数,同时作为测试用例方法名后缀显示。
    *** 如果文件中是字典,字典的key会作为测试用例方法的后缀显示,字典的值会作为测试用例参数。
  • ddt.unpack:传递的是复杂的数据结构时使用。比如使用元组或者列表,添加unpack之后,ddt会自动把元组或者列表对应到多个参数上。字典也可以这样处理。

转载地址:http://vhjwi.baihongyu.com/

你可能感兴趣的文章
As-Conformal-As-Possible Surface Registration
查看>>
qmake Variable Reference
查看>>
Lesson 2 Gradient Desent
查看>>
find border vertex
查看>>
matlab sliced variable
查看>>
create symbolic array
查看>>
TAUCS库的编译(vs2010)
查看>>
color vector using in plotting example points and lines between corresponding vertices
查看>>
mex 里面调用matlab函数
查看>>
matlab中cuda编程中分配grid和block dimension的时候的注意事项
查看>>
GPU CUDA and MEX Programming
查看>>
arrayfun用法
查看>>
矩阵积分
查看>>
optimization on macOS
查看>>
Template-Based 3D Model Fitting Using Dual-Domain Relaxation
查看>>
install libfreenect2 on ubuntu 16.04
查看>>
how to use automake to build files
查看>>
using matlab drawing line graph for latex
查看>>
How package finding works
查看>>
build opencv3.3.0 with VTK8.0, CUDA9.0 on ubuntu9.0
查看>>