参考:
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%。