自动化冒烟测试:Unittest vs Pytest框架
本文讲述以下几个小知识点:
-
1、Unittest 如何组织冒烟用例
-
2、Pytest 组织冒烟测试
-
3、Pytest 执行unittest冒烟用例
环境准备:
-
Python 3.x
-
Pytest 5.x
项目目录:
smoke_testing_demo
test_case
__init__.py
test_case_with_unittest.py
test_case_with_pytest.py
run_unittest_smoke_testing.py
目录
一、Unittest如何组织冒烟用例
-
当 import unittest 时 ,会自动导入TestLoader类
-
TestLoader这个类下,封装了 5 种组织用例的方法
-
本文主要讲解 loadTestsFromNames
loadTestsFromNames 方法简介
# loader.py 该文件在python3.7已不存在,建议使用python3.64 查看使用方法
class TestLoader(object):
"""
该类负责根据各种标准加载测试并将它们包装在TestSuite中
"""
def loadTestsFromNames(self, names, module=None):
"""
返回给定的一组用例名的测试用例的套件
"""
loadTestsFromNames 组织冒烟用例
# test_case_with_unittest.py
#!/usr/bin/env python3
# encoding:utf-8
import unittest
class TestUittestCase(unittest.TestCase):
def test_case_with_unittest_1(self):
'''冒烟测试用例'''
print('I am Smoke Testing ')
def test_case_with_unittest_2(self):
pass
if __name__ == '__main__':
unittest.main(verbosity=2)
# test_case_with_unittest2.py
#!/usr/bin/env python3
# encoding:utf-8
import unittest
class TestUittestCase2(unittest.TestCase):
def test_case_with_unittest_3(self):
'''冒烟测试用例'''
print('I am Smoke Testing ')
def test_case_with_unittest_4(self):
pass
if __name__ == '__main__':
unittest.main(verbosity=2)
冒烟测试用例集
# run_unittest_smoke_testing.py
#!/usr/bin/env python3
# encoding:utf-8
import unittest
cases = [
'test_case.test_case_with_unittest2.TestUittestCase2.test_case_with_unittest_3',
'test_case.test_case_with_unittest.TestUittestCase.test_case_with_unittest_1'
]
test_suit = unittest.TestLoader().loadTestsFromNames(cases)
runner = unittest.TextTestRunner(verbosity=2)
runner.run(test_suit)
运行结果
test_case_with_unittest_3(test_case.test_case_with_unittest2.TestUittestCase2)
冒烟测试 ... ok
test_case_with_unittest_1 (test_case.test_case_with_unittest.TestUittestCase)
冒烟测试 ... ok
----------------------------------------------------------------------
Ran 2 tests in 0.000s
小结:
-
通过loadTestsFromNames 可以从不同的模块组织特定的用例集
-
使用loadTestsFromNames这个方法,需要传入一个数组
-
数组里面里面的元素必须是字符串
-
数组元素传入格式:'moudleName.testCaseClassName.testCaseName'
-
执行用例是根据数组元素的的顺序执行
二、Pytest 组织冒烟测试
-
pytest 提供了测试用例标记机制
-
一个测试用例允许被多个@pytest.mark进行标记
-
同一个@pytest.mark可以标记多个测试用例
-
pytest.mark常用于冒烟测试用例组织
pytest.mark 组织冒烟用例
# run_unittest_smoke_testing.py
#!/usr/bin/env python3
# encoding:utf-8
import pytest
@pytest.mark.test_env
def test_case_1():
pass
@pytest.mark.test_env
@pytest.mark.smoke
def test_case_2():
''' 冒烟用例'''
pass
cd 进入 /test_case目录, 使用命令行运行 test_case_with_pytest.py
pytest test_case_with_pytest.py -v -m smoke
运行结果
collected 2 items
test_case_with_pytest.py::test_case_2 PASSED
============================== 1 tests deselected ==============================
==================== 1 passed, 1 deselected in 0.01 seconds ====================
运行被标记test_env的用例
pytest test_case_with_pytest.py -v -m test_env
运行结果
collected 2 items
test_case_with_pytest.py::test_case_1 PASSED
test_case_with_pytest.py::test_case_2 PASSED
=========================== 2 passed in 0.01 seconds ===========================
三、Pytest 执行 Unittest冒烟用例
Pytest测试框架是兼容Python自带的Unittest, 修改test_case_with_unittest2.py
# test_case_with_unittest2.py
#!/usr/bin/env python3
# encoding:utf-8
import unittest
import pytest
class TestUittestCase2(unittest.TestCase):
@pytest.mark.smoke
def test_case_with_unittest_3(self):
'''冒烟测试用例'''
print('I am Smoke Testing ')
def test_case_with_unittest_4(self):
pass
if __name__ == '__main__':
unittest.main(verbosity=2)
命令行运行 test_case_with_unittest2.py
pytest test_case_with_unittest2.py -v -m smoke
运行结果
collected 2 items / 1 deselected / 1 selected
test_case_with_unittest2.py::TestUittestCase2::test_case_with_unittest_3 PASSED [100%]
============== 1 passed, 1 deselected, 1 warnings in 0.01 seconds ==============
总结:
-
1、Uittest组织冒烟用例,需通过loadTestsFromNames在不同的测试模块里指定测试用例,组装成test suit(测试套件)后,给TextTestRunner运行。
-
2、Pytest组织冒烟用例,只需给测试用例加上@pytest.mark.key ,使用命令行
pytest -m key test_case.py
即可。 -
使用Uittest组织冒烟测试,关注点有至少有两个: 1、当编写新功能的冒烟测试,需要去维护冒烟测试用例集;2、合并代码时,如果有两个人同时修改了这个冒烟用例集,还要解决冲突,防止遗漏冒烟用例
-
使用Pytest组织冒烟测试,关注点在于用例的本身,当编写新功能的冒烟测试,只需在给用例加一个编写用例人员约定好的@pytest.mark,例如@pytest.mark.smoke。
学习资源分享
最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走
这些资料,对于想进阶【自动化测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助……
相关文章
- VS.net项目自动更新版本号
- 【源码阅读】VS调试mimikatz-改造法国神器mimikatz执行就获取明文密码
- 【响应式编程的思维艺术】 (2)响应式Vs面向对象
- Categories VS Extensions (分类 vs 扩展)
- OpenGL与vs编程——error C2440: “glMaterialfv”: 无法从“GLfloat”转换为“const GLfloat *”
- vs中如何统计整个项目的代码行数
- [RxJS] Throttling vs Debouncing
- 面向对象VS面向过程
- ATITIT 后发优势 后发劣势 vs 先发优势的思考 目录 1.1. “后发优势”1 1.2. “后发劣势”论1 1.3. 科技、经济界有两种矛盾的说法“后发优势”和“后发劣势”1 2
- SAP Netweaver的负载均衡消息服务器 vs CloudFoundry的App Router
- Android 主人VS宠物 游戏
- Playwright vs Selenium:最好用的自动化测试框架?
- pytest接口自动化测试框架 | 基于Pytest的Web UI自动化测试框架介绍
- Pytest自动化框架中使用pytest.exit中断用例执行和动态为用例添加mark标记
- 深度学习 vs 机器学习 vs 模式识别