(三十八)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章进行学习。

 

posted @   李荣洋  阅读(504)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示