文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

python单元测试框架unittest基本用法案例

2024-04-02 19:55

关注

unittest是python单元测试框架,类似于JUnit框架

意义:

  • 灵活的组织ui接口测试自动化用例
  • 让用例高效的执行
  • 方便验证测试用例的结果
  • 集成html形式测试报告
  1. 一个class继承unittest.TestCase类,即是一个个具体的TestCase(类方法名称必须以test开头,否则不能被unittest识别)
  2. 每一个用例执行的结果的标识,成功是. ,失败为F,出错是E
  3. 每一个测试以test01、test02…依次写下去,unittest才可按照编号执行
  4. versity参数控制输出结果,0是简单报告、1是一般报告、2是详情报告。
  5. 用setUp()、terUpClass()以及tearDownClass()可以在用例执行前布置环境,以及在用例执行后清理环境。
  6. 参数中加stream,可以讲报告输出到文件:可以用HTMLTestRunner输出html报告。
  7. 多个单元的测试用例集合在一起,就是TestSuite。

案例1

from selenium import webdriver
import requests

def test01():
    '''
    用例1
    :return:
    '''
    url = "http://www.ynhousedata.cn/house/assessment/assess_public?token=9a5008072cfd7336350306fdd9ea9485&timestamp=2022-04-22 09:20:33&layer=1&total_layer=8&total_area=120&pre_id=4450"
    re = requests.get(url)
    print(re.status_code, re.text, re.headers, re.encoding)

def test02():
    '''
    用例1
    :return:
    '''
    driver = webdriver.Chrome()
    driver.get('https://www.baidu.com/')
    search = input('输入搜索内容\n')
    driver.find_element_by_xpath('/lib/python3.9/site-packages目录下。

创建报告存放的文件夹report,报告目录结构如下

main.py定义如下

import unittest
import HTMLTestRunner
test_dir = "/Users/lidong/Desktop/zhouyu/BILIBILI/笔记/unitTest/testCase"
# 报告存放的位置
report_path = "/Users/lidong/Desktop/zhouyu/BILIBILI/笔记/unitTest/report/"
# 打开目录,生成html文件
file = open(report_path+'result.html', 'wb')
# 文件格式生成
run = HTMLTestRunner.HTMLTestRunner(stream=file, title='这是报告标题', description='这是报告描述')
# 加载用
dis = unittest.defaultTestLoader.discover(test_dir, pattern="test*.py")
# 运行用例
run.run(dis)

6、运行main.py之后,会在report目录下生成html报告

7、 使用浏览器打开,可以看到如下报告

断言基本操作

import unittest
import requests

class Tess(unittest.TestCase):
    def setUp(self):
        res = requests.get('http://www.baidi.com')
        return res.status_code

    def test1(self):
        # 判断获取的状态是否等于200
        self.assertEqual(self.setUp(), 200)


if __name__ == '__main__':
    unittest.main()

数据驱动 ddt data

import unittest
from ddt import ddt, data

@ddt
class TestCases2(unittest.TestCase):

    @classmethod
    def setUpClass(cls) -> None:
        print('所有用例的前置')

    @classmethod
    def tearDownClass(cls) -> None:
        print('所有用例的后置')

    def setUp(self) -> None:
        print('每个用例前置')

    def tearDown(self) -> None:
        print('每个用例的后置')

    @data('username01', 'username02')
    def test04(self, username):
        """冒烟用例"""
        print('执行用例4,',username,'登陆成功')

    def test03(self):
        """爆炸用例"""
        print('执行用例3')

if __name__ == '__main__':
    # 创建类加载对象
    load = unittest.TestLoader()
    # 分别加载两个类
    suit2 = load.loadTestsFromTestCase(TestCases2)
    # 放在套件里
    suits = unittest.TestSuite([suit2])

    run = unittest.TextTestRunner()
    run.run(suits)

运行结果

所有用例的前置
每个用例前置
执行用例3
每个用例的后置
.每个用例前置
执行用例4, username01 登陆成功
每个用例的后置
.每个用例前置
执行用例4, username02 登陆成功
每个用例的后置
.所有用例的后置

----------------------------------------------------------------------
Ran 3 tests in 0.000s

OK
<unittest.runner.TextTestResult run=3 errors=0 failures=0>

巩固

# -*- coding: utf-8 -*-,
# @File : test_module.py,
# @Author : lidong,
# @IDEA: PyCharm
# @Time :  2022/4/25 16:57

import unittest

class TestStringMethods(unittest.TestCase):

    a = 67

    # 跳过被此装饰器装饰的测试。 reason 为测试被跳过的原因。
    @unittest.skip('取消测试')
    def test_upper(self):
        print('test_upper')

   # 当condition为真时,跳过被装饰的测试。
    @unittest.skipIf(a>5, '取消测试')
    def test_upper2(self):
        print('test_upper2')

    #  跳过被装饰的测试,condition 为假
    @unittest.skipUnless(a > 88, '跳过被装饰的测试')
    def test_upper3(self):
        print('test_upper3')

    def test_upper5(self):
        self.assertEqual('foo'.upper(), 'FOO')

    def test_isupper(self):
        self.assertTrue('FOO'.isupper())
        self.assertFalse('Foo'.isupper())

    def test_split(self):
        s = 'hello world'
        self.assertEqual(s.split(), ['hello', 'world'])
        # check that s.split fails when the separator is not a string
        with self.assertRaises(TypeError):
            s.split(2)

if __name__ == '__main__':
    unittest.main()

运行

===============================================================================
[SKIPPED]
取消测试

unitTest.testCase.test_module.TestStringMethods.test_upper
unitTest.testCase.test_module.TestStringMethods.test_upper2
===============================================================================
[SKIPPED]
跳过被装饰的测试

unitTest.testCase.test_module.TestStringMethods.test_upper3
-------------------------------------------------------------------------------
Ran 6 tests in 0.093s

PASSED (skips=3, successes=3)

Process finished with exit code 0

Skipped: 取消测试

Skipped: 取消测试

Skipped: 跳过被装饰的测试

总结

到此这篇关于python单元测试框架unittest基本用法的文章就介绍到这了,更多相关python unittest用法内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 资料下载
  • 历年真题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯