前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >自动化冒烟测试:Unittest vs Pytest框架

自动化冒烟测试:Unittest vs Pytest框架

作者头像
测试开发技术
发布2022-09-28 15:30:24
5870
发布2022-09-28 15:30:24
举报
文章被收录于专栏:测试开发技术测试开发技术

本文讲述以下几个小知识点:

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

环境准备:

  • Python 3.x
  • Pytest 5.x

项目目录:

代码语言:javascript
复制
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 方法简介

代码语言:javascript
复制
# loader.py 该文件在python3.7已不存在,建议使用python3.64 查看使用方法

class TestLoader(object):
    """
    该类负责根据各种标准加载测试并将它们包装在TestSuite中
    """


def loadTestsFromNames(self, names, module=None):
    """
    返回给定的一组用例名的测试用例的套件
    """ 

loadTestsFromNames 组织冒烟用例

代码语言:javascript
复制
# 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)
代码语言:javascript
复制
# 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)

冒烟测试用例集

代码语言:javascript
复制
# 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)

运行结果

代码语言:javascript
复制
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 组织冒烟用例

代码语言:javascript
复制
# 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

代码语言:javascript
复制
pytest test_case_with_pytest.py -v -m smoke

运行结果

代码语言:javascript
复制
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的用例

代码语言:javascript
复制
pytest test_case_with_pytest.py -v -m test_env

运行结果

代码语言:javascript
复制
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

代码语言:javascript
复制
# 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

代码语言:javascript
复制
pytest test_case_with_unittest2.py -v -m smoke

运行结果

代码语言:javascript
复制
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。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-06-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试开发技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档