zoukankan      html  css  js  c++  java
  • (三十八)Unittest单元测试框架之认识unittest-断言方法

    随笔记录方便自己和同路人查阅。

    #------------------------------------------------我是可耻的分割线-------------------------------------------

      学习selenium自动化之前,最好先学习HTML、CSS、JavaScript等知识,有助于理解定位及操作元素的原理。关于python和selenium安装请自行搜索别的资料,这里就不多做介绍了,所有例子均使用python3.6+selenium执行的。

    #------------------------------------------------我是可耻的分割线-------------------------------------------

    断言方法

    在执行用例的过程中,最终用例是否执行通过,是通过判断测试得到的实际结果与预期结果是否相等决定的。Unittest框架的TestCase类提供了下面这些方法用于测试结果的判断。

    方法

    检查

    版本

    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

    3.1

    assertIsNot(a,b)

    a is not b

    3.1

    assertIsNone(x)

    x is None

    3.1

    assertIsNotNone(x)

    x is not None

    3.1

    assertIn(a,b)

    a in b

    3.1

    assertNotIn(a,b)

    a not in b

    3.1

    assertIsInstance(a,b)

    Isinstance(a,b)

    3.1

    assertNotIsInstance(a,b)

    Not Isinstance(a,b)

    3.1

    - assertEqual(first,second,msg=None)

    断言第一个参数和第二个参数是否相等,如果不相等则测试失败,msg为可选参数,用于定义测试失败时打印的信息。

    import unittest
    
    #测试两个整数相加
    class Test(unittest.TestCase):
        def setUp(self):
            number = input('enter a number:')
            self.number = int(number)
    
        def test_case(self):
            self.assertEqual(self.number,10,msg="Your input is not 10")
    
        def tearDown(self):
            pass
    
    #执行测试类的测试方法
    if __name__ == '__main__':
        unittest.main()

    在setUp()方法中要求用户输入一个数,在test_case()中通过assertEqual()比较输入的数是否等于10,如果不相等则输入msg中定义的提示信息。

    通过结果:

    失败结果:

     

    从执行结果看到,输入一个5,显然与预期的10 不相等,msg所定义的提示信息告诉我们"Your input is not 10"。

    - assertNotEqual(first,second,msg=None)

    assertNotEqual()与assertEqual()相反,它用于断言第一个参数与第二个参数是否不相等,如果相等则测试失败。

    - assertTrue(expr,msg=None)

    - assertFalse(expr,msg=None)

    测试表达式是true或false。

    下面来实现判断一个数是否为质数的功能,所谓的指数(又叫素数)是指只能被1和它本身整除的数。

    新建conut.py文件

    #用于判断质数
    def is_prime(n):
        if n<=1:
            return False
    
        for i in range(2,n):
            if n % i == 0:
                return False
        return True

    创建is_prime()函数用于实现对质数的判断。当得到一个数字n后,首先判断它是否小于或等于1,如果小于或等于1,则直接返回False;如果大于1,则对其进行循环判断;若能整除2到其自身之间的任意一个数,则不为质数,返回False,否则返回True。

    import unittest
    from conut import is_prime
    
    #测试两个整数相加
    class Test(unittest.TestCase):
        def setUp(self):
            print('test start')
    
        def test_case(self):
            self.assertTrue(is_prime(7),msg="Is not prime!")
    
        def tearDown(self):
            print('test end')
    
    #执行测试类的测试方法
    if __name__ == '__main__':
        unittest.main()

    在调用is_prime()函数时分别传不同的值来执行测试用例,在上面的例子中传值为7,显然时一个质数,所以通过assertTrue()断言得到的结果为True。

    - assertIn(first,cecond,msg=None)

    - assertNotIn(first,cecond,msg=None)

    断言第一个参数是否在第二个参数中,反过来讲,第二个参数是否包含第一个参数。

    import unittest
    
    class Test(unittest.TestCase):
        def setUp(self):
            print('test start')
    
        def test_case(self):
            a = 'hello'
            b = 'hello world'
            self.assertIn(a,b,msg='a is not in b')
    
        def tearDown(self):
            print('test end')
    
    #执行测试类的测试方法
    if __name__ == '__main__':
        unittest.main()

    运行结果:

    这个很好理解,定义字符串a为“hello”、b为“hello world”。通过assertIn判断b是否包含a,如果不包含则打印msg定义的信息。

    - assertIs(first,cecond,msg=None)

    - assertIsNot(first,cecond,msg=None)

    断言第一个参数和第二个参数是否为同一对象。

    - assertIsNone(first,cecond,msg=None)

    - assertIsNotNone(first,cecond,msg=None)

    断言表达式是否为None对象。

    - assertIsInstance(obj,cls,msg=None)

    - assertNotIsInstance(obj,cls,msg=None)

    断言obj是否为cls的一个实例。

    在unittest中还提供了其他检查比较的方法,因为不常用,所以不再一一介绍。读者可以参考python官方文档unittest章进行学习。

  • 相关阅读:
    HDU 4379 水题,大水,但我WA了很多次,做了很久
    HDU 1712分组背包 考试复习安排
    所谓的二维背包Triangular Pastures POJ 1948
    ZOJ 1203 Swordfish Kruskal算法求最小生成树
    POJ 2576 Tug of War二维背包恰好装满.
    O(n*m)复杂度的多重背包coinsPOJ 1742
    拓扑排序POJ 1094
    页面右键下拉表
    gb2312 unicode转换工具
    INPUT读出URL里的变量名称
  • 原文地址:https://www.cnblogs.com/lirongyang/p/11505051.html
Copyright © 2011-2022 走看看