Python单元测试框架:unittest(二)
一、直接使用TestCase
注意所有测试方法都需要以test开头。代码如下:
import unittest class Test1(unittest.TestCase): @classmethod def setUpClass(self): print("execute setUpClass") @classmethod def tearDownClass(self): print("execute tearDownClass") def setUp(self): print("execute setUp") def tearDown(self): print("execute tearDown") def test_one(self): print('execute test_one') self.assertTrue('FOO'.isupper()) def test_two(self): print('execute test_two') if __name__ == '__main__': unittest.main()
执行如下:
二、使用TestSuite
直接写TestCase执行时是按字母排序的顺序执行的,如果要设定测试用例的执行先后顺序则需要将TestCase封装到TestSuite。代码如下:
import unittest class Test2(unittest.TestCase): @classmethod def setUpClass(self): print("execute setUpClass") @classmethod def tearDownClass(self): print("execute tearDownClass") def setUp(self): print("execute setUp") def tearDown(self): print("execute tearDown") def test_one(self): print('execute test_one') self.assertTrue('FOO'.isupper()) def test_two(self): print('execute test_two') if __name__ == '__main__': suite = unittest.TestSuite() # Test2是要测试的类名,test_two是要执行的测试方法 suite.addTest(Test2("test_two")) suite.addTest(Test2("test_one")) runner = unittest.TextTestRunner() runner.run(suite)
执行如下,可以看到先添加的test_two先执行:
三、使用HTMLTestRunner
我们可能还会希望生成一个简单的HTML报告,可使用HTMLTestRunner实现。但pypi和官网上最新的都是只支持python2.x的0.8.2版本。可将以下代码自行保存成HTMLTestRunner.py放到自己项目目录下
View Code
代码如下:
import unittest import HTMLTestRunner class Test3(unittest.TestCase): @classmethod def setUpClass(self): print("execute setUpClass") @classmethod def tearDownClass(self): print("execute tearDownClass") def setUp(self): print("execute setUp") def tearDown(self): print("execute tearDown") def test_one(self): print('execute test_one') self.assertTrue('FOO'.isupper()) def test_two(self): print('execute test_two') if __name__ == '__main__': suite = unittest.TestSuite() # Test3是要测试的类名,test_one是要执行的测试方法 suite.addTest(Test3("test_one")) suite.addTest(Test3("test_two")) # 实践中发现执行时的当前路径,不一定是此文件所在的文件夹,所以使用绝对路径 # print(f"{os.getcwd()}") filename = 'F:\\PycharmProjects\\test3\\apptestresult.html' fb = open(filename, 'wb') runner = HTMLTestRunner.HTMLTestRunner(stream=fb, title="测试HTMLTestRunner", description="测试HTMLTestRunner") runner.run(suite) fb.close()
执行如下:
报告如下:
四、HTMLTestRunner未生成报告问题处理
4.1 pytest干扰
如果python环境中安装了pytest,那么默认运行时会是Run 'py.test for'(如下图所示),这时if __name__ == "__main__"下的语句是不被执行的所以报告肯定不会生成(原理未知)。
些时需要依次点开pycharm菜单----Run----Edit Configurations...自行添加一个运行配置,如下图
4.2 路径问题
一是注意自己把报告输出到了哪个位置,特别是如果有几个地方都会输出报告时不要弄混了,搞得自己在浏览器中刷新半天没看到有变化,认为没生成报告。
二是实践中通过os.getcwd()发现python运行时的目录不一定是当前目录,所以如果报告使用相对路径然后又没看到有报告生成,那就注意看os.getcwd()返回的运行路径是不是当前文件夹。