感觉在单元测试当中可能有用,

但在django这种框架中,用途另一说。

  1. import pytest
  2. import tasks
  3. from tasks import Task
  4.  
  5. def test_add_1():
  6. task = Task('breathe', 'Brian', True)
  7. task_id = tasks.add(task)
  8. t_from_db = tasks.get(task_id)
  9. assert equivalent(t_from_db, task)
  10.  
  11. @pytest.mark.parametrize('task',
  12. [Task('sleep', done=True),
  13. Task('wake', 'brian'),
  14. Task('breath', 'BRIAN', True),
  15. Task('exercise', 'BrIaN', False)])
  16. def test_add_2(task):
  17. task_id = tasks.add(task)
  18. t_from_db = tasks.get(task_id)
  19. assert equivalent(t_from_db, task)
  20.  
  21. @pytest.mark.parametrize('summary, owner, done',
  22. [('sleep', None, False),
  23. ('wake', 'brian', False),
  24. ('breath', 'BRIAN', True),
  25. ('eat eggs', 'BrIaN', False),
  26. ])
  27. def test_add_3(summary, owner, done):
  28. task = Task(summary, owner, done)
  29. task_id = tasks.add(task)
  30. t_from_db = tasks.get(task_id)
  31. assert equivalent(t_from_db, task)
  32.  
  33. tasks_to_try = (Task('sleep', done=True),
  34. Task('wake', 'brian'),
  35. Task('breath', 'BRIAN', True),
  36. Task('exercise', 'BrIaN', False))
  37.  
  38. @pytest.mark.parametrize('task', tasks_to_try)
  39. def test_add_4(task):
  40. task_id = tasks.add(task)
  41. t_from_db = tasks.get(task_id)
  42. assert equivalent(t_from_db, task)
  43.  
  44. task_ids = ['Task({},{},{})'.format(t.summary, t.owner, t.done)
  45. for t in tasks_to_try]
  46.  
  47. @pytest.mark.parametrize('task', tasks_to_try, ids=task_ids)
  48. def test_add_5(task):
  49. task_id = tasks.add(task)
  50. t_from_db = tasks.get(task_id)
  51. assert equivalent(t_from_db, task)
  52.  
  53. @pytest.mark.parametrize('task', [
  54. pytest.param(Task('create'), id='just summary'),
  55. pytest.param(Task('inspire', 'Michelle'), id='summary/owner'),
  56. pytest.param(Task('encourage', 'Michelle', True), id='summary/owner/done'),])
  57. def test_add_6(task):
  58. task_id = tasks.add(task)
  59. t_from_db = tasks.get(task_id)
  60. assert equivalent(t_from_db, task)
  61.  
  62. @pytest.mark.parametrize('task', tasks_to_try, ids=task_ids)
  63. class TestAdd:
  64. def test_equivalent(self, task):
  65. task_id = tasks.add(task)
  66. t_from_db = tasks.get(task_id)
  67. assert equivalent(t_from_db, task)
  68.  
  69. def test_valid_id(self, task):
  70. task_id = tasks.add(task)
  71. t_from_db = tasks.get(task_id)
  72. assert t_from_db.id == task_id
  73.  
  74. def equivalent(t1, t2):
  75. return (t1.summary == t2.summary) and (t1.owner == t2.owner) and (t1.done == t2.done)
  76.  
  77. @pytest.fixture(autouse=True)
  78. def initialized_tasks_db(tmpdir):
  79. tasks.start_tasks_db(str(tmpdir), 'tiny')
  80. yield
  81. tasks.stop_tasks_db()

pytest的参数化测试的更多相关文章

  1. Pytest 学习(二十五)- 解决pytest参数化测试标题都一样问题

    前言 使用参数化测试化后,allure的报告如下显示: 源代码如下: # -*- coding: utf-8 -*- # @Time : 2020/12/13 17:27 # @Author : lo ...

  2. Python 中如何实现参数化测试?

    Python 中如何实现参数化测试? 之前,我曾转过一个单元测试框架系列的文章,里面介绍了 unittest.nose/nose2 与 pytest 这三个最受人欢迎的 Python 测试框架. 本文 ...

  3. Google C++单元测试框架GoogleTest---值参数化测试

    值参数化测试允许您使用不同的参数测试代码,而无需编写同一测试的多个副本. 假设您为代码编写测试,然后意识到您的代码受到布尔参数的影响. TEST(MyCodeTest, TestFoo) { // A ...

  4. JMeter学习-026-JMeter 分布式(远程)参数化测试实例

    以前文所述对文章详情的HTTP请求进行性能测试为例.日常实际场景中,不可能所有的人都在同时访问一篇文章,而是多人访问不同的文章,因而需要对文章编号进行参数化,以更好的模拟日常的性能测试场景.同时,因文 ...

  5. Junit4参数化测试实现程序与用例数据分离

    http://touchfu.iteye.com/blog/732930 现状:你是不是还在为自己的TestCase代码杂乱无章而苦恼,咎其根本还在于针对不同的用例,输入参数和mock信息的组装全部作 ...

  6. 同时使用Junit4的@Parameterized参数化测试和Spring容器

    转载:http://www.jianshu.com/p/d191fe54915f 整合Spring容器 @SpringApplicationConfiguration(classes = Applic ...

  7. MSTest不支持参数化测试的解决方案

    之前的项目中做单元测试一直用的是NUnit,这次做新项目,负责人要求统一用MsTest,理由是MsTest是Visual Studio内置的.用就用吧,我没什么意见.不过用了两天,我就发现一个大问题: ...

  8. 用JUnit4进行参数化测试

    参数化测试是一个JUnit 3不具备的功能. 基本使用方法 @RunWith 当类被@RunWith注解修饰,或者类继承了一个被该注解修饰的类,JUnit将会使用这个注解所指明的运行器(runner) ...

  9. junit参数化测试的使用方法

    JUnit参数化测试的五个步骤:(1)为准备使用参数化测试的测试类指定特殊的运行器 org.junit.runners.Parameterized.(2)为测试类声明几个变量,分别用于存放期望值和测试 ...

随机推荐

  1. python的内置模块time和datetime的方法详解以及使用(python内的time和datetime时间格式)

    time内置模块的方法 1.time() 时间戳 time() -> floating point number  浮点数 Return the current time in seconds ...

  2. linux(ubuntu) mysql安装使用

    简单的安装一下: sudo apt-get install mysql-server apt-get isntall mysql-client sudo apt-get install libmysq ...

  3. Docker 基础知识

    Docker Docker 是什么 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是 ...

  4. python---django中权限框架设计

    一:admin下的权限了解 推文:如何正确使用 Django的User Model (一)默认权限表是在自带auth模块,中permission表中 可以使用has_perm方法获取用户是否有这个权限 ...

  5. 2015/11/5用Python写游戏,pygame入门(5):面向对象的游戏设计

    昨天的内容里有了运动的子弹,虽然我们只添加了一个子弹,但你可以看到我们需要记录子弹的x,y坐标,每次要更新它的坐标.如果我们想要有多颗子弹,就需要存储多个坐标.那时候处理起来就不显得那么简单,也许我们 ...

  6. [整理]基于bootstrap的文本编辑器

    http://www.bootcss.com/p/bootstrap-wysiwyg/ http://jhollingworth.github.io/bootstrap-wysihtml5/ http ...

  7. JavaScript 运行机制之执行顺序详解

    JavaScript是一种描述型脚本语言,它不同于 Java 或 C# 等编译性语言,它不需要进行编译成中间语言,而是由浏览器进行动态地解析与执行.如果你不能理解 JavaScript 语言的运行机制 ...

  8. Jquery Ajax自定义无刷新提交表单Form

    Jquery的$.ajax方法可以实现ajax调用,要设置url,post,参数等. 如果要提交现有Form需要写很多代码,何不直接将Form的提交直接转移到ajax中呢. 以前的处理方法 如Form ...

  9. bzoj 2111 [ZJOI2010]Perm 排列计数(DP+lucas定理)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2111 [题意] 给定n,问1..n的排列中有多少个可以构成小根堆. [思路] 设f[i ...

  10. c++的类型转换(转)

    类型转换机制可以分为:隐式类型转换 和 显示类型转换(强制类型转换) C中的类型转换: 事情要从头说起,这个头就是C语言.我们已经习惯了使用C-like类型转换,因为它强大而且简单. 主要有以下两种形 ...