• Unittest测试框架+HTMLTestRunner


    1.unittest中4个重要的概念:test fixture, test case, test suite, test runner

    Testcase:

    一个TestCase的实例就是一个测试用例。什么是测试用例呢?就是一个完整的测试流程,包括测试前准备环境的搭建(setUp),执行测试代码 (run),以及测试后环境的还原(tearDown)。元测试(unit test)的本质也就在这里,一个测试用例是一个完整的测试单元,通过运行这个测试单元,可以对某一个问题进行验证。

    Test suite:

    多个测试用例集合在一起,就是TestSuite,而且TestSuite也可以嵌套TestSuite。

    构建测试套件的方法:
    1. 通过unittest.TestSuite()类直接构建,或者通过TestSuite实例的addTests、addTest方法构建
    2. 通过unittest.TestLoader类的discover、loadTestsFromTestCase、loadTestsFromModule、loadTestsFromName、loadTestsFromNames这五个方法去构建
    3. 通过unittest.makeSuite()、unittest.findTestCases()这两个方法去构建

    Test runner:

    是来执行测试用例的,其中的run(test)会执行TestSuite/TestCase中的run(result)方法。

    TestLoader:

    是用来加载TestCase到TestSuite中的,其中有几个loadTestsFrom__()方法,就是从各个地方寻找TestCase,创建它们的实例,然后add到TestSuite中,再返回一个TestSuite实例。

    Test fixture:

    对一个测试用例环境的搭建和销毁,是一个fixture,通过覆盖 TestCase的setUp()和tearDown()方法来实现。这个有什么用呢?比如说在这个测试用例中需要访问数据库,那么可以在setUp() 中建立数据库连接以及进行一些初始化,在tearDown()中清除在数据库中产生的数据,然后关闭连接。注意tearDown的过程很重要,要为以后的 TestCase留下一个干净的环境。关于fixture,还有一个专门的库函数叫做fixtures,功能更加强大。

    setUp(self) tearDown(self) 函数

    1. 每次执行函数方法时,必须先执行一次setUp(self)函数,执行完一个函数方法后,必须再执行一次tearDown(self)函数。

    2、unittest默认根据ASCII码的顺序加载执行用例,数字与字母的顺序为:0-9,A-Z,a-z。所以以A开头的测试用例方法会优先执行,以a开头会后执行。

    3. 当函数方法以test开头进行读取,不是以test开头的不执行该方法。

    setUpClass(cls) tearDownClass(cls) 类方法

    1. 执行函数方法前,先执行一次setUpClass(cls)里面的方法,执行完函数方法后,再执行一次tearDownClass(cls)里面的函数方法。

    2、unittest默认根据ASCII码的顺序加载执行用例,数字与字母的顺序为:0-9,A-Z,a-z。所以以A开头的测试用例方法会优先执行,以a开头会后执行。

    3. 函数方法以test开头进行读取,不是test开头的不执行该方法。例如:test_login 执行  login_test 不执行

    必须要加 @classmethod内置装饰器,否则会报 “TypeError: setUpClass() missing 1 required positional argument: 'cls'”的错误。使用类方法执行所有用例时里面的方法只会执行一次,不会重复执行。

    2.unittest编写python的单元测试代码,包括如下几个步骤

    1、编写一个python类,继承 unittest模块中的TestCase类,这就是一个测试类

    2、在上面编写的测试类中定义测试方法(这个就是指的测试用例),每个方法的方法名要求以 test 打头,没有额外的参数。 在该测试方法中 调用被测试代码,校验测试结果,TestCase类中提供了很多标准的校验方法,如 最常见的assertEqual。

    3、执行 unittest.main() ,该函数会负责运行测试,它会实例化所有TestCase的子类,并运行其中所有以test打头的方法。

    简单用法:

    1.用import unittest导入unittest模块

    2.定义一个继承自unittest.TestCase的测试用例类,如class xxx(unittest.TestCase):

    3.定义setUp和tearDown,这两个方法与junit相同,即如果定义了则会在每个测试case执行前先执行setUp方法,执行完毕后执行tearDown方法。

    4.定义测试用例,名字以test开头,unittest会自动将test开头的方法放入测试用例集中。

    5.一个测试用例应该只测试一个方面,测试目的和测试内容应很明确。主要是调用assertEqual、assertRaises等断言方法判断程序执行结果和预期值是否相符。

    6.调用unittest.main()启动测试

    7.如果测试未通过,则会显示e,并给出具体的错误(此处为程序问题导致)。如果测试失败则显示为f,测试通过为.,如有多个testcase,则结果依次显示。

    3.unittest模块的常用方法

    assertEqual(a, b) a == b

    assertNotEqual(a, b) a != b

    assertTrue(x) bool(x) is True

    assertFalse(x) bool(x) is False

    assertIs(a, b) a is b

    assertIsNot(a, b) a is not b

    assertIsNone(x) x is None

    assertIsNotNone(x) x is not None

    assertIn(a, b) a in b

    assertNotIn(a, b) a not in b

    assertIsInstance(a, b) isinstance(a, b)

    assertNotIsInstance(a, b) not isinstance(a, b)

    4.HTMLTestRunner

    第三方库,用来生成html格式的测试报告。

    HTMLTestRunner()参数:

    output:是输出的文件夹,如果没有定义日志存放位置,日志报告会以html为后缀自动放在“工程目录/reports/file_d”这个路径的文件夹下,并以当前时间命名

    verbosity:=1时,默认值为1,不限制完整结果,即单个用例成功输出’.’,失败输出’F’,错误输出’E’;=0的时候,不输出信息;=2的时候,需要打印详细的返回信息;

    stream:默认值是sys.stderr,表示默认将结果输出到控制台,可以配置报告路径(但是要先用open()方法打开文件,是以一种文件流的方式),输出到指定位置;

    descriptions:默认值为True,

    combine_reports:默认值为False,将值设置为True可将测报告合并

    report_name:报告名称,report_name会自动加上时间后缀,时间格式为%Y-%m-%d-%H-%M-%S

  • 相关阅读:
    Kafka的安装和设置
    Nginx的安装和设置
    Spark实现K-Means算法
    Spark GraphX实例(2)
    Scala字符串插值
    Scala的Class、Object和Apply()方法
    Spark GraphX实例(1)
    java.lang.ClassNotFoundException: SparkPi$$anonfun$1
    Intellij IDEA连接Spark集群
    Container [pid=6263,containerID=container_1494900155967_0001_02_000001] is running beyond virtual memory limits
  • 原文地址:https://www.cnblogs.com/MLing/p/16092338.html
Copyright © 2020-2023  润新知