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

本文讲述以下几个内容:

1、Unittest 如何组织冒烟用例

2、Pytest 组织冒烟测试

3、Pytest 执行unittest冒烟用例

环境准备:

Python 3.64

Pytest 5.01

项目目录:

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
  • 更多Uittest组织用例方法可参考《Unittest组织用例的姿势》这篇博文,链接在文末

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'
  • 执行用例是根据数组元素的的顺序执行
ps: 更多通过loadTestsFromNames 使用技巧,
可以查看《Unittest组织用例的姿势》这篇博文,链接在文末

二、Pytest 组织冒烟测试

  • pytest 提供了测试用例标记机制
  • 一个测试用例允许被多个@pytest.mark进行标记
  • 同一个@pytest.mark可以标记多个测试用例
  • pytest.mark常用于冒烟测试用例组织
ps:更多的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

推荐阅读:

《安利一下pytest的mark用法》

《Python Unittest - 根据不同测试环境跳过用例详解》

源码地址:

https://github.com/SEtester/smoke_testing_demo

最后,欢迎同学们留言, 你认为自动化冒烟测试 Unittest , Pytest 哪家强?

文章如有不是,欢迎同学们斧正

自动化冒烟测试 Unittest , Pytest 哪家强?的更多相关文章

  1. [转]Python测试框架对比----unittest, pytest, nose, robot framework对比

      测试框架 什么是框架? 框架(Framework)是整个或部分系统的可重用设计,框架是用来解决代码的组织及运行控制问题的. 在我们编写自动化脚本的时候,经常需要读取配置文件,读取数据文件,发送请求 ...

  2. Python测试框架对比----unittest, pytest, nose, robot framework对比

    什么是框架? 框架(Framework)是整个或部分系统的可重用设计, 框架是用来解决代码的组织及运行控制问题的. 在我们编写自动化脚本的时候,经常需要读取配置文件,读取数据文件,发送请求,记录日志, ...

  3. PAT 1032 挖掘机技术哪家强(20)(有测试样例)

    1032 挖掘机技术哪家强(20)(20 分) 为了用事实说明挖掘机技术到底哪家强,PAT组织了一场挖掘机技能大赛.现请你根据比赛结果统计出技术最强的那个学校. 输入格式: 输入在第1行给出不超过10 ...

  4. python测试框架-pytest

    一.pytest 介绍.运行.参数化和数据驱动.Fixture pytest安装与介绍 官网 : pip install -U pytest 查看版本号:pytest --version 为何选择py ...

  5. 可能是 Python 中最火的第三方开源测试框架 pytest

    作者:HelloGitHub-Prodesire HelloGitHub 的<讲解开源项目>系列,项目地址:https://github.com/HelloGitHub-Team/Arti ...

  6. Python最火的第三方开源测试框架 ——pytest

    一.介绍 本篇文章是介绍的是Python 世界中最火的第三方单元测试框架:pytest.它有如下主要特性: assert 断言失败时输出详细信息(再也不用去记忆 self.assert* 名称了) 自 ...

  7. 某互联网后台自动化组合测试框架RF+Sikuli+Python脚本

    某互联网后台自动化组合测试框架RF+Sikuli+Python脚本 http://www.jianshu.com/p/b3e204c8651a 字数949 阅读323 评论1 喜欢0 一.**Robo ...

  8. 冒烟测试 smoking test

    冒烟测试的概念: 版权声明:本文为博主原创文章,未经博主允许不得转载. 冒烟测试既是对软件基本的功能进行测试,测试的对象是每一个新编译的需要正式测试的软件版本,目的是确认软件基本的功能正常,保证软件系 ...

  9. 一次完整的自动化登录测试-基于python+selenium进行cnblog的自动化登录测试

    Web登录测试是很常见的测试!手动测试大家再熟悉不过了,那如何进行自动化登录测试呢!本文作者就用python+selenium结合unittest单元测试框架来进行一次简单但比较完整的cnblog自动 ...

随机推荐

  1. Angular语法(一)——展示数据

    双花括号{{}} 展示数据 title = 'Tour of Heroes'; myHero = 'Windstorm'; <h1>{{title}}</h1> <h2& ...

  2. 一款好用的视频转换gif的小软件——抠抠视频秀

           在平常生活中,我们拍下来精彩的视频想要转换为gif动画,或是想要录制网页上的视频.电脑上的鼠标操作等等,大家可以使用以下这款很好用的视频转换gif的小软件——抠抠视频秀,这个软件操作简单 ...

  3. Win10如何设置开机自动登录

    原文:Win10如何设置开机自动登录 第一步: 小娜搜索"netplwiz",进入用户账户设置. 第二步: 先勾选选中一次,要使用本计算机,用户必须输入用户名和密码. 第三步: 取 ...

  4. vs2010 编译release没问题debug编译不通过

    ------ 已启动全部重新生成: 项目: VM661JTcpDLL, 配置: Debug Win32 ------生成启动时间为 2018-12-29 14:07:20.项目文件包含 ToolsVe ...

  5. ArchLinux 安装记录

    主要步骤 下载镜像及刻录 开机安装 联网 编辑镜像站文件 分区 格式化分区并挂载 安装基本操作系统 配置基础操作系统 引导系统 用户管理 网络配置 安装Gonme桌面环境 其他优化 开始准备 下载镜像 ...

  6. enum 枚举一般用法 dotnet

    public enum Demo { [Description("Moning描述")] Moning = , [Description("Afternoon描述&quo ...

  7. 全面提价2499元起小米6发布:四曲陶瓷机身+骁龙835+变焦双摄(小米在设计上也多次获得红点最佳、iF金奖等72项工业设计大奖)

    集微网  4月19日报道 今日,小米公司在北京召开正式推出了新一代旗舰手机“小米手机6”.在试玩过真机后,第一感觉就是这款手机做工与颜值相比此前小米手机提升巨大:有四曲面玻璃或陶瓷机身.不锈钢高亮边框 ...

  8. 关于Android应用内存泄露问题

    在Java中内存泄漏是指某个(某些)对象已经不再被使用,应该被GC所回收的空间,但有一个对象持有这个对象的引用从而阻止这个对象被回收.比如我们通常会这样创建一个View, TextView tv = ...

  9. delphi android 录像(使用了JMediaRecorder,MediaRecorder的使用方法可参考网上java的相关说明)

    delphi xe系列自带的控件都无法保存录像,经网友帮忙,昨天终于实现了录像功能(但有个问题是录像时无画面显示),程序主要使用了JMediaRecorder,MediaRecorder的使用方法可参 ...

  10. C语言实现常用数据结构——栈

    #include<stdio.h> #include<stdlib.h> //用链表实现栈 typedef struct Node { int data; struct Nod ...