900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 使用Hypothesis生成测试数据

使用Hypothesis生成测试数据

时间:2021-08-19 15:13:06

相关推荐

使用Hypothesis生成测试数据

一、什么是Hypothesis

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

二、环境准备

安装hypothesis包

py -3 -m pip install hypothesis

三、如何设计测试数据

待测试函数:

def add(a,b):

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

return a+b

3.1 传统测试方法

import unittest

from test import add

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()

不足:需要设计足够多的测试case

3.2 优化版:使用randint()函数生成随机数

import unittest

from test import add

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,b)

c1=a+b

c2=add(a,b)

self.assertEqual(c1,c2)

if __name__=="__main__":

unittest.main()

好处:用更少的代码做更多的测试,循环次数越多,发现Bug概率越大

不足:测试数据很难随机到边界值

3.3 用hypothesis生成测试数据

import unittest

from test import add

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,b)

c1=a+b

c2=add(a,b)

self.assertEqual(c1,c2)

if __name__=="__main__":

unittest.main()

注释:

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

3.4 生成更多类型的测试数据

import unittest

from hypothesis import given,settings

import hypothesis.strategies as st

class AddTest(unittest.TestCase):

@settings(max_examples=10)

@given(a=st.text(),b=st.emails())

#生成text格式和email格式

def test_case(self,a,b):

print(a,b)

if __name__=="__main__":

unittest.main()

更多的数据类型:

import hypothesis

dir(hypothesis.strategies)

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