Python unittest & ddt 实现
一、安装 unittest & ddt二、ddt 实现三、小结
ddt 对于测试来说,非常方便生成用例,特别是数据很多,用例类似的。
个人经历的一个项目,文本过滤。需要对海量数据进行排查过滤文字,就是使用这个方式处理。
一、安装 unittest & ddt
pip install unittest
pip install ddt
二、ddt 实现
核心代码
import unittest
import ddt
from xmlrunner
import XMLTestRunner
from Predict
import Predict
from char_cnn_api
import get_csv_data
, write_csv_data
@ddt
.ddt
class CharCnnTest(unittest
.TestCase
):
@
classmethod
def setUpClass(cls
):
cls
.test_res
= {'matched': [], 'unmatched': [], 'results': []}
@ddt
.data
(*get_csv_data
('./test_data/CurrentPolitical.csv'))
@ddt
.unpack
def test_char_cnn_predict(self
, data
, result
):
predict_test
= Predict
()
ret
= predict_test
.http_predict
(data
)
self
.test_res
['results'].append
(str(ret
) + data
)
print(ret
)
if ret
['output'] == result
:
self
.test_res
['matched'].append
(data
)
elif ret
['output'] != result
:
self
.test_res
['unmatched'].append
(data
)
@
classmethod
def tearDownClass(cls
):
for key
, val
in cls
.test_res
.items
():
write_csv_data
('./report/{}.csv'.format(key
), val
)
if __name__
== '__main__':
suite
= unittest
.TestSuite
()
loader
= unittest
.TestLoader
()
suite
.addTest
(loader
.loadTestsFromTestCase
(CharCnnTest
))
with open('report/test_result.xml', 'w') as output
:
runner
= XMLTestRunner
(output
=output
, verbosity
=2)
report
= runner
.run
(suite
)
if not report
.wasSuccessful
():
exit
(1)
数据源获取代码和过滤存储
import csv
import requests
import json
import numpy
as np
import pandas
def get_csv_data(csv_path
):
"""
read test data from csv and return as list
@type csv_path: string
@param csv_path: some csv path string
@return list
"""
rows
= []
with open(str(csv_path
), "r") as fp
:
content
= fp
.readlines
()
for line
in content
:
line
= str(line
).replace
(',', '。').replace
(',', '。')
rows
.append
([line
, 1])
return rows
def write_csv_data(csv_path
, data
):
with open(str(csv_path
), 'w') as fp
:
for line
in data
:
fp
.write
(line
)
三、小结
以上就是简单实现ddt过程。不过这里数据量很多,还需要使用多线程,多进程加快执行用例。