PYTHON | unittest单元测试入门

    xiaoxiao2022-07-12  148

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

    最新回复(0)