900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > python生成测试数据_Python基于Hypothesis测试库生成测试数据

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

时间:2019-03-17 10:20:54

相关推荐

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@

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或接口自动化测试中么?

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。