unittest学习

 

 

 

测试结果的分析:

可能出现3个结果:

  • .  1个点代表1条用例执行成功
  • F  1个F代表1条用例执行失败(FAIL)
  • E  1个E代表1条用例里有错误(ERROR)

 

unittest里常用的断言方法

断言:预期结果和实际结果的比较。

 

测试用例的执行顺序

测试用例的执行顺序跟测试方法编写的顺序无关。

测试用例的执行顺序有一个默认的规则:按照测试方法名字的ascII码的顺序来执行(ascII码表对所有的字符都有一个对应的10进制数,对应的这个10进制数越小越先执行)

Python取名:字母、数字、下划线

查表,从小到大:0-9  A-Z  下划线  a-z  所以 test_add1 先于  test_add2执行。

 自定义测试顺序

不要使用前面的那种加载方式(使用unittest提供的main()方法加载执行的,它是默认顺序)

而是改为使用unittest提供的Test Suite(测试套件)+Test Runner(测试运行器)的方式来加载执行。

# 使用TestSuite类构建测试套件并执行测试
import unittest

from homework3 import testmul, testdiv

if __name__ == '__main__':
    ts = unittest.TestSuite()
    ts.addTest(testmul.TestMul('test_mul1'))
    ts.addTest(testmul.TestMul('test_mul2'))
    ts.addTest(testdiv.TestDiv('test_div1'))
    ts.addTest(testdiv.TestDiv('test_div2'))

    tr = unittest.TextTestRunner()
    tr.run(ts)

终端方式执行可能遇到的问题

当你的被测代码和测试代码不在同一个目录下:

解决办法:

继续执行运行test11.py的指令:python test11.py还是会报错:

 解决办法:增加上一级路径到找包路径:

使用unittest组织大量的测试用例

随着被测功能点的增加,我们的测试用例也会不断的增加。假如说我要管理的测试用例成百上千,我不可能把这么多的测试用例都写在一个文件里。这种情况下,我们通常会把测试用例分门别类放在不同的文件里。

问题:如何组织这些分散在不同的Python文件里的测试用例进行执行呢?

解决办法:2种实现跨文件组织用例集中执行的方法:

(1)   TestSuite+TestRunner的方式

(2)  discover的方式

ts = unittest.defaultTestLoader.discover('./', pattern='test*.py')
# 使用discover()来自动发现测试用例并执行

import unittest

from homework3.HTMLTestRunner import HTMLTestRunner

if __name__ == '__main__':
    ts = unittest.defaultTestLoader.discover('./', pattern='test*.py')

    # tr = unittest.TextTestRunner()
    # tr.run(ts)

    f = open("./report.html", "wb")
    tr = HTMLTestRunner(stream=f, title="乘除法的测试报告", description="详细测试结果")
    tr.run(ts)

 生成独立的测试报告

如果要生成一份独立的测试报告,就要借助于第三方模块。

HTMLTestRunner.py,   首先你需要把这个文件放在你的项目里:

if __name__ == '__main__':
    ts = unittest.defaultTestLoader.discover('./', pattern='test*.py')

    # tr = unittest.TextTestRunner()
    # tr.run(ts)

    f = open("./report.html", "wb")
    tr = HTMLTestRunner(stream=f, title="乘除法的测试报告", description="详细测试结果")
    tr.run(ts)

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
unittest和pytest都是Python中常用的单元测试框架,用于测试代码的正确性和可靠性。下面将分别介绍它们的代码学习实践。 一、unittest 1. 测试框架初始化 ``` import unittest class TestDemo(unittest.TestCase): def setUp(self): # 测试用例执行前的初始化操作 pass def tearDown(self): # 测试用例执行后的清理操作 pass def test_demo(self): # 测试用例 pass if __name__ == '__main__': unittest.main() ``` 2. 测试用例编写 ``` import unittest class TestDemo(unittest.TestCase): def test_add(self): self.assertEqual(1 + 2, 3) def test_subtract(self): self.assertEqual(3 - 2, 1) if __name__ == '__main__': unittest.main() ``` 3. 断言方法 unittest提供了多种断言方法,常用的有以下几种: - assertEqual(a, b):判断a是否等于b - assertNotEqual(a, b):判断a是否不等于b - assertTrue(x):判断x是否为True - assertFalse(x):判断x是否为False - assertIn(a, b):判断a是否在b中 - assertNotIn(a, b):判断a是否不在b中 - assertIs(a, b):判断a是否是b - assertIsNot(a, b):判断a是否不是b 4. 测试套件 测试套件是由多个测试用例组成的集合,可以通过TestSuite类来创建测试套件。 ``` import unittest class TestAdd(unittest.TestCase): def test_add1(self): self.assertEqual(1 + 2, 3) def test_add2(self): self.assertEqual(2 + 3, 5) class TestSubtract(unittest.TestCase): def test_subtract1(self): self.assertEqual(3 - 2, 1) def test_subtract2(self): self.assertEqual(5 - 3, 2) if __name__ == '__main__': suite = unittest.TestSuite() suite.addTest(TestAdd()) suite.addTest(TestSubtract()) unittest.TextTestRunner().run(suite) ``` 二、pytest 1. 基本用法 ``` def test_add(): assert 1 + 2 == 3 def test_subtract(): assert 3 - 2 == 1 ``` 2. 参数化测试 ``` import pytest @pytest.mark.parametrize('a, b, expected', [ (1, 2, 3), (2, 3, 5), ]) def test_add(a, b, expected): assert a + b == expected ``` 3. fixture fixture是pytest中的一个重要概念,可以用来提供测试用例所需要的资源。比如,我们可以通过fixture来创建数据库连接、打开浏览器等。 ``` import pytest import requests @pytest.fixture() def url(): return 'http://www.example.com' def test_request(url): response = requests.get(url) assert response.status_code == 200 ``` 4. mark mark是pytest中的一个标记机制,可以用来标记某些测试用例,方便对其进行筛选和执行。 ``` import pytest @pytest.mark.smoke def test_add(): assert 1 + 2 == 3 @pytest.mark.regression def test_subtract(): assert 3 - 2 == 1 ``` pytest支持自定义mark,比如我们可以通过以下方式自定义一个slow mark: ``` import pytest def pytest_configure(config): config.addinivalue_line( "markers", "slow: mark test as slow" ) @pytest.mark.slow def test_add(): assert 1 + 2 == 3 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值