python生成测试数据_Python基于Hypothesis测试库生成测试数据

Hypothesis是Python的一个高级测试库。它允许编写测试用例时参数化,然后生成使测试失败的简单易懂的测试数据。可以用更少的工作在代码中发现更多的bug。

安装

pip install hypothesis

如何设计测试数据

通过介绍也许你还不了解它是干嘛的,没关系!我们举个例子。

首先,我有一个需要测试的函数:

def add(a, b):

"""实现加法运算"""

return a + b

测试代码是这样的:

import unittest

class AddTest(unittest.TestCase):

def test_case1(self):

c = add(1, 2)

self.assertEqual(c, 3)

def test_case2(self):

c = add(0, 2)

self.assertEqual(c, 2)

def test_case3(self):

c = add(-2, 2)

self.assertEqual(c, 0)

if __name__ == "__main__":

unittest.main()

为了更全面的验证的 add() 函数,我必须设计足够多的 测试数据, 同样也需要很多条用例!

当然,为了测试足够多的数据,我们也可以将代码改称这样。

import unittest

from random import randint

class AddTest(unittest.TestCase):

def test_case(self):

for i in range(10):

a = randint(-32768, 32767)

b = randint(-32768, 32767)

print("a->", a)

print("b->", b)

c1 = a + b

c2 = add(a, b)

self.assertEqual(c1, c2)

if __name__ == "__main__":

unittest.main()

通过调用 randint() 函数生成随机数。循环10次(也可以是100次,1000次),用更少的代码做更多的测试,测试的数据越多,发现bug的可能性越大。

测试结果如下:

> python test_hypothesis_demo.py

a-> 11503

b-> -784

a-> -31548

b-> 13057

a-> 22033

b-> 3618

a-> -32249

b-> 28025

a-> -15429

b-> 31055

a-> 16095

b-> 13445

a-> -31536

b-> 14606

a-> 18655

b-> -18039

a-> 17923

b-> -12079

a-> -9256

b-> -26440

.

------------------------

Ran 1 test in 0.002s

OK

用 hypothesis生成测试数据

上面的测试数据很难随机到 边界值,除非我手动设计数据,而且用for循环也不是太好的设计。是时候让hypothesis登场了。

import unittest

from hypothesis import given, settings

import hypothesis.strategies as st

class AddTest(unittest.TestCase):

@settings(max_examples=10)

@given(a=st.integers(), b=st.integers())

def test_case(self, a, b):

print("a->", a)

print("b->", b)

c1 = a + b

c2 = add(a, b)

self.assertEqual(c1, c2)

if __name__ == "__main__":

unittest.main()

通过@given() 装饰测试用例,调用strategies 模块下面的 integers() 方法生成随机的测试数。在@setting()装饰器中通过max_examples用来控制随机数的个数。

运行结果如下:

> python test_hypothesis_demo.py

a-> 0

b-> 0

a-> 5980

b-> -3607224505277606703

a-> 324106882

b-> 23975

a-> 23272

b-> 4917

a-> 107

b-> -155

a-> -4500

b-> -8303

a-> 2683

b-> 4384

a-> 27

b-> -81

a-> -122472823694675410551869872440384533757

b-> -89

a-> 19075

b-> 4362

.

-------------------------------------------------

Ran 1 test in 0.032s

hypothesis 生成的数据会更具有 测试价值,对吧? hypothesis 还可以生成更多类型的测试数据。例如 email格式和text格式。

email-> 0@A.com

text->

email-> ^H@R70-s0Xke.Sb-UBn08.VzT--dz000I0o00r00s--EJY.e.Ov.aRaMcO text-> -

email-> 6a#@T.HKt

text-> ↕

email-> "/YAw/jnIZ!0fS+A@E7UJ.expErt

text-> +�

email-> *xh*-#t5$0-L8O&r10XnXU-**+e%0xy-@k.O.e.lEase

text-> #�����/���+

�)�▲�

email-> 2U!N0+|*%~@T.q-NX-0-0gWl.x.Lv

text->

email-> &i/o!F*@xuW--03.p00-t0Y-0Z0.MW.K-000-n-sB0rR-0L.Y.y2u.NXptL0bgG-0U.XN--FLw351E

text-> �0▲-���

email-> oK*-@p.ZiP

text-> ☺

email-> /@mOL.Y-Q.j.p.d-3Mzi.i.Utv-M.yachts

text-> (

email-> 4ql$y2%N4h@c.veRSIcheruNG

text->

这些数据看上去就具有很高的测试价值。好吧!测试一定明白我在说什么。

问题来了,我们可以将 hypothesis 生成的数据应用到 Web或接口自动化测试中么?

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持云海天教程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hypothesis是一个基于属性的测试,可以生成符合要求的随机数据,支持多种数据类型和数据结构。使用Hypothesis生成智能座舱测试的数据的步骤如下: 1. 安装Hypothesis:使用pip命令安装Hypothesis,命令如下: ``` pip install hypothesis ``` 2. 导入Hypothesis:在Python程序中导入Hypothesis,命令如下: ``` import hypothesis.strategies as st ``` 3. 定义数据模型:根据智能座舱测试的需求和要求,定义座舱测试数据的模型,包括数据类型、取值范围、数据格式等。 ``` @st.composite def cabin_data(draw): # 定义座舱测试数据的模型 flight_status = draw(st.sampled_from(['takeoff', 'cruise', 'landing'])) oxygen_supply = draw(st.integers(min_value=0, max_value=100)) seat_adjustment = draw(st.sampled_from(['up', 'down', 'middle'])) # 返回生成的座舱测试数据 return (flight_status, oxygen_supply, seat_adjustment) ``` 4. 生成测试数据:使用Hypothesis生成测试数据,命令如下: ``` test_data = cabin_data().example() ``` 使用example()函数可以生成一组随机的测试数据。也可以使用for循环批量生成多组测试数据,命令如下: ``` for i in range(10): test_data = cabin_data().example() print(test_data) ``` 5. 写入数据文件:将生成的数据写入文件中,可以使用Python的文件操作,如csv、pandas等,将数据写入csv文件、Excel文件等。需要注意的是,写入文件时应该按照一定的格式和规范进行,以便后续的数据处理和分析。 以上是使用Hypothesis生成智能座舱测试数据的步骤,需要根据实际需求和测试要求,适当调整数据模型和生成测试数据的方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值