wordpress工作室主题下载,神马搜索seo优化排名,夜蝶直播app下载安装,四川成都装修公司排名点击上方“Python编程时光”#xff0c;选择“加为星标”第一时间关注Python技术干货#xff01;介绍无论你使用哪种编程语言或框架#xff0c;测试都非常重要。Hypothesis是 Python 的一个高级测试库。它允许编写测试用例时参数化#xff0c;然后生成使测试失败的简单易懂… 点击上方“Python编程时光”选择“加为星标”第一时间关注Python技术干货介绍无论你使用哪种编程语言或框架测试都非常重要。Hypothesis是 Python 的一个高级测试库。它允许编写测试用例时参数化然后生成使测试失败的简单易懂的测试数据。可以用更少的工作在代码中发现更多的bug。该测试库覆盖了大多数情况并且确实可以帮助你查找代码中的错误。这篇文章为展示了如何使用Hypothesis在Python中进行测试并提供了一些示例。我们如何区分测试在我们开始进行基于属性的测试之前我们需要知道测试的一般区别。有不同的分组测试方法两种最常见的方法基于测试方法和测试级别。让我们从大多数人已经听说的测试级别开始。本质上存在四个测试级别(尽管人们可能也知道或定义其他级别)单元测试集成测试系统测试端到端测试不同测试级别侧重专注于不同的事物。单元测试侧重于软件的特定部分或功能。这可以是单个功能或功能的一部分。相反集成测试侧重于通过软件组件的接口进行协作。系统测试甚至更进一步可以测试整个系统。现在我们将看看存在的各种各样的测试方法。最常见和已知的是静态和动态测试。所谓静态测试(static testing)就是不实际运行被测软件而只是静态地检查程序代码、界面或文档中可能存在的错误的过程。如果软件或其部分实际执行我们称之为动态测试。编写单元测试和集成测试属于动态测试。另一种常见的方法是盒式方法。基本上它可以分为白盒测试和黑盒测试(以及灰盒测试作为两者的混合)。白盒测试可验证程序的内部结构或工作情况。黑盒测试与之相反在黑盒测试中应用程序被视为黑盒并且对其交互进行测试。这意味着在不了解内部实现的情况下测试功能。什么是基于属性的测试现在我们快速了解了如何区分测试您可能会问什么是基于属性的测试基于属性的测试技术( Property-based testing)是指编写对你的代码来说为真的逻辑语句(即“属性”)然后使用自动化工具来生成测试输入(一般来说是指某种特定类型的随机生成输入数据)并观察程序接受该输入时属性是否保持不变。如果某个输入违反了某一条属性则用户证明程序存在一处错误并找到一个能够演示该错误的便捷示例。使用Hypothesis进行基于属性的测试让我们举一个简单的例子。假设您有两个函数crement()和decrement()。一个示例实现可能如下所示# increment_decrement.pydef increment(number: int) - int: return number 1def decrement(number: int) - int: return number - 1您可能会为两者编写单元测试代码如下所示# test_increment_decrement_pytest.pyfrom increment_decrement import decrementfrom increment_decrement import incrementdef test_increment(): x 5 expected 6 actual increment(x) assert actual expecteddef test_decrement(): x 5 expected 4 actual decrement(x) assert actual expected注意测试代码是使用pytest框架编写的。当然您可以编写更多的测试脚本来测试具有不同值的两个函数甚至可以对测试进行参数化。但是最后您将使用预定义的值来测试这两个功能。使用基于属性的测试库(例如Hypothesis )编写测试是不同的。在这里您可以指定要测试的类型以及软件的工作方式或行为方式。然后该库根据指定的类型生成随机值来进行实际测试功能。让我们看看如何使用Hypothesis来测试我们的两个功能。# test_increment_decrement_hypothesis.pyfrom hypothesis import givenimport hypothesis.strategies as stfrom increment_decrement import decrementfrom increment_decrement import incrementgiven(st.integers())def test_increment(x): expected x 1 actual increment(x) assert actual expectedgiven(st.integers())def test_decrement(x): expected x - 1 actual decrement(x) assert actual expected如您所见这两个测试脚本都有一个参数x。x的值是由Hypothesis使用integers()方法生成的。Hypothesis提供了各种方法。本质上这些方法对应于内置类型或其他结构并生成与给定类型匹配的随机数据。听起来不错不是吗但是如果我们想测试具有特定值的函数以确保它也可以使用该值怎么办Hypothesis提供了一个example()装饰器您可以在其中定义一个值即使该值不属于随机生成的测试数据集也可以将该值传递给相应的函数。让我们举个简单的例子# div.pydef div(dividend: int, divisor: int) - int: return dividend // divisor我们定义了一个函数div()该函数接受一个除数和一个被除数并返回两者的商。请注意这两个参数都是整型数据因此结果也应该是整型数据我们使用Python的//运算符执行整数除法。为了测试div()函数我们创建了一个新的测试文件test_div.py并编写了一个名为test_div()的测试脚本。# test_div.pyfrom hypothesis import examplefrom hypothesis import givenimport hypothesis.strategies as stfrom div import divgiven(dividendst.integers(), divisorst.integers())def test_div(dividend, divisor): if divisor 0: expected -1 else: expected dividend // divisor actual div(dividend, divisor) assert actual expected同样我们使用Hypothesis的integers()方法生成除数和被除数的值。我们编写的测试脚本可能通过也可能不会通过具体取决于执行时Hypothesis产生的值。为了确保始终将值0传递给div()函数我们将example(10)添加到test_div()函数。因此即使div()不在随机生成的数据集中也至少会用除数的值0调用一次。如果我们按原样运行测试脚本则test_div()将始终失败。因此让我们修改div()函数来处理这种情况并使测试通过# div.pydef div(dividend: int, divisor: int) - int: if divisor 0: return -1 return dividend // divisor概要本文主要讲了什么是基于属性的测试以及为什么有用。此外您快速浏览了Hypothesis库该库使您可以编写基于属性的测试并与pytest测试一起执行。文末福利明哥整理了 21 张 Python 代码速查表每一张都是国外的大师总结的非常实用 ~还有 2 张高清的 PyCharm 快捷键一览图一张 Windows 一张 Mac放在桌面上需要的时候打开一查非常方便。。怎么获取呢添加明哥微信备注 速查表 和 快捷键 获取- EOF -推荐阅读 点击标题可跳转求你了别再用 print 调试代码了GitHub 捍卫开发者重新上架 7.2 万星开源项目 youtube-dl使用 Python 打印漂亮的表格这两项基本功你可会别这样直接运行Python命令否则电脑等于“裸奔”5 个 Git 工作流改善你的开发流程8 个 Jupyter Notebook Tips隐藏得太深了用 Python 读取资源文件这个技巧保你涨姿势觉得本文对你有帮助请分享给更多人