zoukankan      html  css  js  c++  java
  • 自动化测试常用断言的使用方法

    Python内部自带了一个单元测试的模块——pyUnit,也就是我们说的:unittest

    先介绍一下unittest的基本使用方法:

    1. import unittest模块

    2. 定义一个继承 unittest.TestCase 的测试用例类

    3. 定义 setUp 和 tearDown两个方法,tearDown的过程很重要,是为以后的TestCase留一个干净的测试环境。

    4. 定义测试用例,均要以test开头

    5. 一个测试用例只需要测试一个方面,测试的目的和测试内容要很明确。一般使用assertEqual、assertIn等断言方法去判断程序执行的结果和预期结果是否相符

    6. 调用 unittest.main() 开始跑测试用例

    7. 测试全部通过,不输出任何东西;若测试未通过,则会输出相应的错误提示。

    下面是unittest中常用的assert语句:

    assertEqual(a,b,[msg='测试失败时打印的信息']):若 a=b,则测试用例通过
    
    assertNotEqual(a,b,[msg='测试失败时打印的信息']):若a != b,则测试用例通过
    
    assertTrue(x,[msg='测试失败时打印的信息']):若x是True,则测试用例通过
    
    assertFalse(x,[msg='测试失败时打印的信息']):若x是False,则测试用例通过
    
    assertIs(a,b,[msg='测试失败时打印的信息']):若a是b,则测试用例通过
    
    assertNotIs(a,b,[msg='测试失败时打印的信息']):若a不是b,则测试用例通过
    
    assertIsNone(x,[msg='测试失败时打印的信息']):若x是None,则测试用例通过
    
    assertIsNotNone(x,[msg='测试失败时打印的信息']):若x不是None,则测试用例通过
    
    assertIn(a,b,[msg='测试失败时打印的信息']):若a在b中,则测试用例通过
    
    assertNotIn(a,b,[msg='测试失败时打印的信息']):若a不在b中,则测试用例通过
    
    assertIsInstance(a,b,[msg='测试失败时打印的信息']):若a是b的一个实例,则测试用例通过
    
    assertNotIsInstance(a,b,[msg='测试失败时打印的信息']):若a不是b的实例,则测试用例通过
    
    assertAlmostEqual(a, b):round(a-b, 7) == 0
    
    assertNotAlmostEqual(a, b):round(a-b, 7) != 0
    
    assertGreater(a, b):a > b     
    
    assertGreaterEqual(a, b):a >= b     
    
    assertLess(a, b):a < b     
    
    assertLessEqual(a, b):a <= b     
    
    assertRegexpMatches(s, re):regex.search(s)     
    
    assertNotRegexpMatches(s, re):not regex.search(s)     
    
    assertItemsEqual(a, b):sorted(a) == sorted(b) and works with unhashable objs     
    
    assertDictContainsSubset(a, b):all the key/value pairs in a exist in b     
    
    assertMultiLineEqual(a, b):strings     
    
    assertSequenceEqual(a, b):sequences     
    
    assertListEqual(a, b):lists     
    
    assertTupleEqual(a, b):tuples     
    
    assertSetEqual(a, b):sets or frozensets     
    
    assertDictEqual(a, b):dicts  

    (一)assertEqual 和 assertNotEqual

    • assertEqual:如两个值相等,则pass
    • assertNotEqual:如两个值不相等,则pass

    使用方法:

    assertEqual(first,second,msg)其中firstsecond进行比较,如果相等则通过;msg为失败时打印的信息,选填;断言assertNotEqual反着用就可以了。

    (二)assertTrue和assertFalse

    • assertTrue:判断bool值为True,则pass
    • assertFalse:判断bool值为False,则Pass

    使用方法:

    assertTrue(expr,msg)其中express输入相应表达式,如果表达式为真,则pass;msg选填;断言assertFalse如果表达式为假,则pass

    (三)assertIsNone和assertIsNotNone

    • assertIsNone:不存在,则pass
    • assertIsNotNone:存在,则pass

    使用方法:

    assertIsNone(obj,msg)检查某个元素是否存在

    总结:

    • 常用

    assertEqual(a, b)      
    assertNotEqual(a, b)    
    assertTrue(x)        
    assertFalse(x)         
    assertIs(a, b)         
    assertIsNot(a, b)       
    assertIsNone(x)       
    assertIsNotNone(x)      
    assertIn(a, b)         
    assertNotIn(a, b)      
    assertIsInstance(a, b)     
    assertNotIsInstance(a, b)    
    • 其它
    assertAlmostEqual(a, b)       
    assertNotAlmostEqual(a, b)     
    assertGreater(a, b)        
    assertGreaterEqual(a, b)     
    assertLess(a, b)        
    assertLessEqual(a, b)       
    assertRegexpMatches(s, re)     
    assertNotRegexpMatches(s, re)    
    assertItemsEqual(a, b)        
    assertDictContainsSubset(a, b)     
    assertMultiLineEqual(a, b)      
    assertSequenceEqual(a, b)       
    assertListEqual(a, b)        
    assertTupleEqual(a, b)       
    assertSetEqual(a, b)      
    assertDictEqual(a, b)         
    assertMultiLineEqual(a, b)      
    assertSequenceEqual(a, b)       
    assertListEqual(a, b)  
    assertTupleEqual(a, b)    
    assertSetEqual(a, b)    

    使用时机:

    那么我们什么时候应该使用断言呢?如果没有特别的目的,断言应该用于如下情况:

    • 防御性的编程
    • 运行时对程序逻辑的检测
    • 合约性检查(比如前置条件,后置条件)
    • 程序中的常量
    • 检查文档
    • 例:防御性编程中添加断言
      在代码开始添加注释是个好的开端,但是人们都不太喜欢读和更新这些注释,这些注释会很快变得过时。但对于断言,我们可以同时对这块代码编写文档,如果这些断言被违反了,会直接引起一个简单而又直接的失败。
    assert target in(x, y, z)
    if  target ==x:  
        run_x_code()
    elif  target ==y:
        run_y_code()
    else:
        assert target == z
        run_z_code()
    作者:古佛青灯度流年
    链接:https://www.jianshu.com/p/eea0b0e432da
    來源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

    assertAlmostEqual(a, b):round(a-b, 7) == 0

  • 相关阅读:
    2491 玉蟾宫
    1704 卡片游戏
    1020 孪生蜘蛛
    1215 迷宫
    3149 爱改名的小融 2
    1316 文化之旅 2012年NOIP全国联赛普及组
    1664 清凉冷水
    157. [USACO Nov07] 奶牛跨栏
    [SCOI2005]繁忙的都市
    【NOIP2014模拟赛No.1】我要的幸福
  • 原文地址:https://www.cnblogs.com/yitao326/p/10271167.html
Copyright © 2011-2022 走看看