httprunner其中一个比较好的点就是利用type动态创建类,使用setattr动态增加方法和属性。
将维护的用例进行转变为继承unittest.Textcase的类,很好的与unittest结合起来
以下为简单的例子
正常的写法:
import unittest
class TestMyFunc(unittest.TestCase):
def test_is_prime(self):
print('is_prime')
def test_add(self):
print('add')
def test_api_http(self):
print('api_http')
if __name__ == '__main__':
test_suit = unittest.TestSuite()
suit1 = unittest.TestLoader().loadTestsFromTestCase(TestMyFunc)
test_suit.addTest(suit1)
test_runner = unittest.TextTestRunner()
test_runner.run(test_suit)
动态的写法:
#-*-coding:utf-8-*-
import requests
def is_prime(self):
number = 1
def add(self):
return 1+2
def api_http(self):
contnet = requests.get(url='https://www.baidu.com')
print(contnet)
import unittest
if __name__ == '__main__':
TestMyFunc = type('TestMyFunc',(unittest.TestCase,),{})
setattr(TestMyFunc,'test_is_prime',is_prime)
setattr(TestMyFunc,'test_add',add)
setattr(TestMyFunc,'test_api_http',api_http)
test_suit = unittest.TestSuite()
suit1 = unittest.TestLoader().loadTestsFromTestCase(TestMyFunc)
test_suit.addTest(suit1)
test_runner = unittest.TextTestRunner()
test_runner.run(test_suit)
源码除了这部分内容为,还用到了高阶函数的方式。