我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python中怎样实现参数化测试

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

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python中怎样实现参数化测试

Python中怎样实现参数化测试,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

1、什么是参数化测试?

对于普通测试来说,一个测试方法只需要运行一遍,而参数化测试对于一个测试方法,可能需要传入一系列参数,然后进行多次测试。

比如,我们要测试某个系统的登录功能,就可能要分别传入不同的用户名与密码,进行测试:使用包含非法字符的用户名、使用未注册的用户名、使用超长的用户名、使用错误的密码、使用合理的数据等等。

参数化测试是一种“数据驱动测试”(Data-Driven Test),在同一个方法上测试不同的参数,以覆盖所有可能的预期分支的结果。它的测试数据可以与测试行为分离,被放入文件、数据库或者外部介质中,再由测试程序读取。

2、参数化测试的实现思路?

通常而言,一个测试方法就是一个最小的测试单元,其功能应该尽量地原子化和单一化。

先来看看两种实现参数化测试的思路:一种是写一个测试方法,在其内部对所有测试参数进行遍历;另一种是在测试方法之外写遍历参数的逻辑,然后依次调用该测试方法。

这两种思路都能达到测试目的,在简单业务中,没有毛病。然而,实际上它们都只有一个测试单元,在统计测试用例数情况,或者生成测试报告的时候,并不乐观。可扩展性也是个问题。

那么,现有的测试框架是如何解决这个问题的呢?

它们都借助了装饰器,主要的思路是:利用原测试方法(例如 test()),来生成多个新的测试方法(例如 test1()、test2()……),并将参数依次赋值给它们。

由于测试框架们通常把一个测试单元统计为一个“test”,所以这种“由一生多”的思路相比前面的两种思路,在统计测试结果时,就具有很大的优势。

3、参数化测试的使用方法?

Python 标准库中的unittest 自身不支持参数化测试,为了解决这个问题,有人专门开发了两个库:一个是ddt ,一个是parameterized 。

ddt 正好是“Data-Driven Tests”(数据驱动测试)的缩写。典型用法:

import unittest  from ddt import ddt,data,unpack  @ddt  class MyTest(unittest.TestCase):      @data((3, 1), (-1, 0), (1.2, 1.0))      @unpack      def test_values(self, first, second):          self.assertTrue(first > second)  unittest.main(verbosity=2)

运行的结果如下:

test_values_1__3__1_ (__main__.MyTest) ... ok  test_values_2___1__0_ (__main__.MyTest) ... FAIL  test_values_3__1_2__1_0_ (__main__.MyTest) ... ok  ==================================================  FAIL: test_values_2___1__0_ (__main__.MyTest)  --------------------------------------------------  Traceback (most recent call last):    File "C:\Python36\lib\site-packages\ddt.py", line 145, in wrapper      return func(self, *args, **kwargs)    File "C:/Users/pythoncat/PycharmProjects/study/testparam.py", line 9, in test_values      self.assertTrue(first > second)  AssertionError: False is not true  ----------------------------------------------  Ran 3 tests in 0.001s  FAILED (failures=1)

结果显示有 3 个 tests,并详细展示了运行状态以及断言失败的信息。

需要注意的是,这 3 个 test 分别有一个名字,名字中还携带了其参数的信息,而原来的 test_values 方法则不见了,已经被一拆为三。

在上述例子中,ddt 库使用了三个装饰器(@ddt、@data、@unpack),实在是很丑陋。下面看看相对更好用的 parameterized 库:

import unittest  from parameterized import parameterized  class MyTest(unittest.TestCase):      @parameterized.expand([(3,1), (-1,0), (1.5,1.0)])      def test_values(self, first, second):          self.assertTrue(first > second)  unittest.main(verbosity=2)

测试结果如下:

test_values_0 (__main__.MyTest) ... ok  test_values_1 (__main__.MyTest) ... FAIL  test_values_2 (__main__.MyTest) ... ok  =========================================  FAIL: test_values_1 (__main__.MyTest)  -----------------------------------------  Traceback (most recent call last):    File "C:\Python36\lib\site-packages\parameterized\parameterized.py", line 518, in standalone_func      return func(*(a + p.args), **p.kwargs)    File "C:/Users/pythoncat/PycharmProjects/study/testparam.py", line 7, in test_values      self.assertTrue(first > second)  AssertionError: False is not true  ----------------------------------------  Ran 3 tests in 0.000s  FAILED (failures=1)

这个库只用了一个装饰器 @parameterized.expand,写法上可就清爽多了。

同样提醒下,原来的测试方法已经消失了,取而代之的是三个新的测试方法,只是新方法的命名规则与 ddt 的例子不同罢了。

介绍完 unittest,接着看已经死翘翘了的nose 以及新生的nose2 。nose 系框架是带了插件(plugins)的 unittest,以上的用法是相通的。

另外,nose2 中还提供了自带的参数化实现:

import unittest  from nose2.tools import params  @params(1, 2, 3)  def test_nums(num):      assert num < 4  class Test(unittest.TestCase):      @params((1, 2), (2, 3), (4, 5))      def test_less_than(self, a, b):      assert a < b

最后,再来看下 pytest 框架,它这样实现参数化测试:

import pytest  @pytest.mark.parametrize("first,second", [(3,1), (-1,0), (1.5,1.0)])  def test_values(first, second):      assert(first > second)

测试结果如下:

==================== test session starts ====================  platform win32 -- Python 3.6.1, pytest-5.3.1, py-1.8.0, pluggy-0.13.1  rootdir: C:\Users\pythoncat\PycharmProjects\study collected 3 items  testparam.py .F  testparam.py:3 (test_values[-1-0])  first = -1, second = 0      @pytest.mark.parametrize("first,second", [(3,1), (-1,0), (1.5,1.0)])      def test_values(first, second):  >       assert(first > second)  E       assert -1 > 0  testparam.py:6: AssertionError  .                                                         [100%]  ========================= FAILURES ==========================  _________________________ test_values[-1-0] _________________________  first = -1, second = 0       @pytest.mark.parametrize("first,second", [(3,1), (-1,0), (1.5,1.0)])      def test_values(first, second):  >       assert(first > second)  E       assert -1 > 0  testparam.py:6: AssertionError  ===================== 1 failed, 2 passed in 0.08s =====================  Process finished with exit code 0

看完上述内容,你们掌握Python中怎样实现参数化测试的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网行业资讯频道,感谢各位的阅读!

免责声明:

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

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

Python中怎样实现参数化测试

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python中怎样实现参数化测试

Python中怎样实现参数化测试,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1、什么是参数化测试?对于普通测试来说,一个测试方法只需要运行一遍,而参数化测试对于一个测试方法,
2023-06-16

JUnit5中的参数化测试实现

参数化测试使得我们可以使用不同的参数运行同一个测试方法,从而减少我们编写测试用例的工作量,本文主要介绍了JUnit5中的参数化测试实现,感兴趣的可以了解一下
2023-05-20

pytest如何实现测试用例参数化

小编给大家分享一下pytest如何实现测试用例参数化,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!说明软件测试中,输入相应值,检查期望值,是常见测试方法。在自动化
2023-06-14

Python怎么实现自动化测试

本篇文章为大家展示了Python怎么实现自动化测试,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Python的优点有哪些1、简单易用,与C/C++、Java、C# 等传统语言相比,Python对代码
2023-06-14

Python中怎样实现数据可视化

本篇文章为大家展示了Python中怎样实现数据可视化,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Matplotlib 是一个流行的 Python 库,可以用来很简单地创建数据可视化方案。但每次创建
2023-06-17

python实现hive自动化测试

本程序主要实现hive权限测试。系统中有管理员用户single和测试用户test。在路径/home/test/下,将用例和预期结果写在xml文件中。        执行过程:kinit single用户,beeline -u -e登录并执行
2023-01-31

基于覆盖率的golang函数测试自动化怎样实现?

基于覆盖率的 golang 函数测试自动化可确保函数在测试中完全执行。实现步骤包括:安装依赖项。创建测试文件。编写测试用例,使用 mock 依赖项。启用覆盖率收集。生成覆盖率报告。基于覆盖率的 Golang 函数测试自动化概述Golan
基于覆盖率的golang函数测试自动化怎样实现?
2024-04-26

Jenkins中怎么实现自动化测试

Jenkins是一个持续集成工具,可以通过配置自动化测试任务来实现自动化测试。以下是在Jenkins中实现自动化测试的一般步骤:创建一个新的Jenkins任务:在Jenkins的主界面点击“新建任务”,选择“构建一个自由风格的软件项目”或者
Jenkins中怎么实现自动化测试
2024-03-05

Python中怎么实现突变测试

Python中怎么实现突变测试,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。首先,写一个简单的单元测试:import angle def test_twelve
2023-06-15

python+pytest自动化测试封装怎么实现

本篇内容介绍了“python+pytest自动化测试封装怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!例如单个接口的请求代码如下:i
2023-07-02

Python + selenium 自动化测试框架是怎样的

今天就跟大家聊聊有关Python + selenium 自动化测试框架是怎样的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。自动化测试框架项目自动化测试框架设计为4层1.基础层(通用
2023-06-22

python中怎么实现unittest单元测试

python中怎么实现unittest单元测试,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。说明1、导入unittest模块。2、导入被测对象。3、创建测试类unittest.
2023-06-20

教你怎么用python selenium实现自动化测试

一、安装selenium 打开命令控制符输入:pip install -U selenium 火狐浏览器安装firebug:www.firebug.com,调试所有网站语言,调试功能 Selenium IDE 是嵌入到Firefox 浏览器
2022-06-02

pytest fixtures函数及测试函数的参数化实例分析

这篇文章主要介绍“pytest fixtures函数及测试函数的参数化实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“pytest fixtures函数及测试函数的参数化实例分析”文章能帮助大
2023-06-30

Docker与自动化测试及其测试实践过程是怎样的

Docker与自动化测试及其测试实践过程是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Docker 与自动化测试对于重复枯燥的手动测试任务,可以考虑将其
2023-06-19

UIAutomation自动化测试怎么实现

UIAutomation是一种自动化测试工具,它可以通过模拟用户操作来进行界面的自动化测试。实现UIAutomation自动化测试的步骤如下:1. 确定测试目标:首先需要明确要测试的界面和功能,确定测试的目标。2. 编写测试用例:根据测试目
2023-08-20

怎么用Python实现数据驱动的接口自动化测试

这篇文章主要讲解了“怎么用Python实现数据驱动的接口自动化测试”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用Python实现数据驱动的接口自动化测试”吧!在接口测试的过程中,很多时
2023-06-17

Python实现DBSCAN聚类算法并样例测试

什么是聚类算法 聚类是一种机器学习技术,它涉及到数据点的分组。给定一组数据点,我们可以使用聚类算法将每个数据点划分为一个特定的组。理论上,同一组中的数据点应该具有相似的属性和/或特征,而不同组中的数据点应该具有高度不同的属性和/或特征。聚类
2022-06-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录