参考: https://zhuanlan.zhihu.com/p/55528807 https://www.jianshu.com/p/07f0847fa667
1.
test_article.py:
import unittest
class MyTestCase(unittest
.TestCase
):
def
setUp(self
):
print("环境预测")
def
test_something(self
):
print("测试用例")
self
.assertEquals(True
, False
)
def
tearDown(self
):
print("环境销毁")
if __name__
== '__main__':
unittest
.main()
执行
python test_article.py
输出
2.
test_article.py:
# coding
=utf
-8
import unittest
class TestCase1(unittest
.TestCase
):
def
testCase1(self
):
print("一")
def
testCase2(self
):
print("二")
class TestCase2(unittest
.TestCase
):
def
testCase1(self
):
print("三")
def
testCase2(self
):
print("四")
if __name__
== '__main__':
suite1
= unittest
.TestLoader().loadTestsFromTestCase(TestCase1
)
suite2
= unittest
.TestLoader().loadTestsFromTestCase(TestCase2
)
suite
= unittest
.TestSuite([suite1
, suite2
])
unittest
.TextTestRunner(verbosity
=2).run(suite
)
执行
python test_article.py
输出
3.
# coding
=utf
-8
import unittest
class MyTestCase(unittest
.TestCase
):
@classmethod
def
setUpClass(cls
):
print("环境预测")
@classmethod
def
tearDownClass(cls
):
print("环境销毁")
def
test_1(self
):
print("一")
def
test_2(self
):
print("二")
def
test_3(self
):
print("三")
if __name__
== '__main__':
unittest
.main()
4. flask测试
# coding
=utf
-8
import unittest
,os
from app
import app
class WatchlistTestCase(unittest
.TestCase
):
def
setUp(self
):
# 使用flask提供的测试客户端进行测试,flask自带测试客户端,直接模拟终端请求
self
.client
= app
.test_client()
# 测试
URL
def
test_url(self
):
print("======测试URL========")
response
= self
.client
.get('/')
data
= response
.get_data(as_text
=True
)
self
.assertIn('全文检索', data
)
self
.assertIn('使用说明', data
)
self
.assertEqual(response
.status_code
, 200)
response
= self
.client
.get('/404')
data
= response
.get_data(as_text
=True
)
self
.assertIn('抱歉', data
)
self
.assertEqual(response
.status_code
, 404)
response
= self
.client
.get('/read')
data
= response
.get_data(as_text
=True
)
self
.assertIn('序号', data
)
self
.assertEqual(response
.status_code
, 200)
response
= self
.client
.get('/article/2010')
data
= response
.get_data(as_text
=True
)
self
.assertIn('返回', data
)
self
.assertEqual(response
.status_code
, 200)
print("======URL测试通过========")
# 测试输入为空
def
test_empty_query(self
):
print("=====测试输入为空======")
response
= self
.client
.post("/", data
={"query": ""})
data
= response
.get_data(as_text
=True
)
self
.assertIn('请在搜索框输入您想要查询的内容~', data
)
print("=====输入为空测试通过======")
# 测试正常输入
def
test_normal_query(self
):
print("=====测试正常输入======")
response
= self
.client
.post("/", data
={"query": "搜索"})
data
= response
.get_data(as_text
=True
)
self
.assertIn('结果', data
)
print("=====正常输入测试通过======")
# 测试继续搜索
def
test_continue_search(self
):
print("=====测试继续搜索======")
response
= self
.client
.post("/", data
={"query": "【搜索】"})
data
= response
.get_data(as_text
=True
)
self
.assertIn('结果', data
)
print("=====继续搜索测试通过======")
# 测试错误输入
def
test_wrong_query(self
):
print("=====测试错误输入======")
response
= self
.client
.post("/", data
={"query": "砖业"})
data
= response
.get_data(as_text
=True
)
self
.assertIn('仍然', data
)
print("=====错误输入测试通过======")
# 测试文章简介
def
test_article_introduction(self
):
print("=====测试文章简介======")
path
= "assets\\books" # 文件夹目录
files
= os
.listdir(path
) # 得到文件夹下的所有文件名称
for file
in files
:
title
= file
[0:-4]
response
= self
.client
.post("/read", data
={"title": title
})
data
= response
.get_data(as_text
=True
)
self
.assertIn('阅读原文', data
)
print("=====文章简介测试通过======")
# 测试阅读原文
def
test_article(self
):
print("=====测试阅读原文======")
path
= "assets\\books" # 文件夹目录
files
= os
.listdir(path
) # 得到文件夹下的所有文件名称
for file
in files
:
title
= file
[0:-4]
path
= '/article/' + title
response
= self
.client
.get(path
)
data
= response
.get_data(as_text
=True
)
self
.assertIn('返回', data
)
self
.assertEqual(response
.status_code
, 200)
print("=====阅读原文测试通过======")
if __name__
== '__main__':
unittest
.main()
5. 覆盖率
执行:
coverage run
--source
=app test_article
.py
coverage report
结果(覆盖率报告):
从上面的表格可以看出,一共有 98 行代码,没测试到的代码有 9 行,测试覆盖率为 91%。