自动化冒烟测试unittest,pytest哪家强?

Posted 软件测试呀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自动化冒烟测试unittest,pytest哪家强?相关的知识,希望对你有一定的参考价值。

前言:之前有一段时间一直用 Python Uittest做自动化测试,觉得Uittest组织冒烟用例比较繁琐,后来康哥提示我使用pytest.mark来组织冒烟用例

本文讲述以下几个内容:

1、Unittest 如何组织冒烟用例
2、Pytest 组织冒烟测试
3、Pytest 执行unittest冒烟用例

环境准备:

Python 3.6.4
Pytest 5.0.1

项目目录:

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 即可

自动化冒烟测试 Unittest , Pytest 哪家强?

笔者个人见解:

使用Uittest组织冒烟测试,关注点有至少有两个
1、当编写新功能的冒烟测试,需要去维护冒烟测试用例集
2、合并代码时,如果有两个人同时修改了这个冒烟用例集,还要解决冲突,防止遗漏冒烟用例

使用Pytest组织冒烟测试,关注点在于用例的本身
当编写新功能的冒烟测试,我只需在给用例加一个编写用例人员约定好的@pytest.mark,例如@pytest.mark.smoke

房子要一层一层盖,知识要一点一点学。大家在学习过程中要好基础,多上手实操,话不多说,这里狠狠上一次干货!这是我熬夜整理好的各阶段(功能、接口、自动化、性能、测开)技能学习资料+实操讲解,非常适合私下里学习,比找资料自学高效多了,分享给你们。

领取关 w/x/g/z/h:软件测试小dao

自学推荐B站视频:

零基础转行:38天!自学完软件测试,拿到了字节的测试岗offer,堪称B站最好的视频!【自动化测试、性能测试、测试开发】

自动化进阶:2022B站首推超详细python自动化软件测试实战教程,备战金三银四跳槽季,进阶学完暴涨20K

敲字不易,如果此文章对你有帮助的话,点个赞收个藏来个关注,给作者一个鼓励。也方便你下次能够快速查找。

创作打卡挑战赛 赢取流量/现金/CSDN周边激励大奖

以上是关于自动化冒烟测试unittest,pytest哪家强?的主要内容,如果未能解决你的问题,请参考以下文章

自动化冒烟测试unittest,pytest哪家强?

Python接口自动化测试之pytest与unittest区别

Python接口自动化测试之pytest与unittest区别

软件测试框架之unittest与pytest的对比-

Python 自动化测试框架unittest与pytest的区别

pytest接口自动化测试框架 | unittest与pytest的区别