Uniitest是python内置的标准类库,它的API和java的junit很相似。---单元测试(pytest是python第三方的测试框架,更灵活)
unnitest单元测试讲解:
单元测试方法:
1)语句覆盖 设计的用例执行完我们所有的代码语句 比较薄弱(如:and条件语句,如果写成了or,测试的例子该条语句也能通过,测试就发现不了该问题)
2)判断覆盖 关注整个判断语句(true or false),不关心判断语句内是否有多个条件(也会有漏洞)
3)条件覆盖 关注整个判断语句的同时也关注每个语句里面的条件(测试用例庞大)
4)路径覆盖 通过流程图去保证每条路径都覆盖到
#单元测试框架import unittestclass myunitest(unittest.TestCase): @classmethod def setUpClass(cls) -> None: print("1111") @classmethod def tearDownClass(cls) -> None: print("22222") def setUp(self) -> None: print("开始前准备") def tearDown(self) -> None: print("结束后 *** 作") def test_01(self): print("这是case1") r=2 self.assertEqual(2,r,"判断相等") def test_02(self): print("这是case2") def main(self): unittest.main
setupclass和teardown作用域是整个类,先执行setup,再执行所有用例,最后执行teardown
setup和teardown作用域是单挑case,先执行setup,然后执行case01,再执行teardown。然后重复再执行setup,执行case02,再执行teardown...
如何设置跳过某条用例(方法1):在那条用例上面加@unnitest.skip,代码示例:
#单元测试框架import unittestclass myunitest(unittest.TestCase): @classmethod def setUpClass(cls) -> None: print("第一次开始前准备") @classmethod def tearDownClass(cls) -> None: print("第一次结束后 *** 作") @unittest.skipIf(1+1==2,"case0跳过") def test_01(self): print("这是case1") r=2 self.assertEqual(2,r,"判断相等") def test_02(self): print("这是case2") def main(self): unittest.main
如何设置跳过某条用例(方法2):创建测试套件,将要执行的用例放到测试套件中,然后去调用unnitest.TextTestrunner去run测试套件:
#单元测试框架import unittestclass myunitest(unittest.TestCase): @classmethod def setUpClass(cls) -> None: print("第一次开始前准备") @classmethod def tearDownClass(cls) -> None: print("第一次结束后 *** 作") def test_01(self): print("这是case1") r=2 self.assertEqual(2,r,"判断相等") def test_02(self): print("这是case2")class my2(unittest.TestCase): @classmethod def setUpClass(cls) -> None: print("第二次开始前准备") @classmethod def tearDownClass(cls) -> None: print("第二次结束后 *** 作") def test_03(self): print("这是case03")if __name__ == '__main__': suite=unittest.TestSuite() suite.addTest(myunitest("test_01")) suite.addTest(my2("test_03")) unittest.TextTestRunner().run(suite)
如何设置跳过某条用例(方法3):选择指定类中的用例执行(将要执行的类中的用例加载出来,放到测试套件中,再去run这些用例)。代码示例:
#单元测试框架import unittest#测试用例(类1)class myunitest(unittest.TestCase): @classmethod def setUpClass(cls) -> None: print("第一次开始前准备") @classmethod def tearDownClass(cls) -> None: print("第一次结束后 *** 作") def test_01(self): print("这是case1") r=2 self.assertEqual(2,r,"判断相等") def test_02(self): print("这是case2")#测试用例(类2)class my2(unittest.TestCase): @classmethod def setUpClass(cls) -> None: print("第二次开始前准备") @classmethod def tearDownClass(cls) -> None: print("第二次结束后 *** 作") def test_03(self): print("这是case03")#测试用例(类3)class my3(unittest.TestCase): @classmethod def setUpClass(cls) -> None: print("第三次开始前准备") @classmethod def tearDownClass(cls) -> None: print("第三次结束后 *** 作") def test_04(self): print("这是case4")if __name__ == '__main__': suite1=unittest.TestLoader().loadTestsFromTestCase(myunitest) suite2=unittest.TestLoader().loadTestsFromTestCase(my3) suiteall=unittest.TestSuite([suite1,suite2]) unittest.TextTestRunner().run(suiteall)
pytest还可以以加载路径下用例的方式,去执行想要执行的用例(使用unnitest.defaultTestLoader.discover(test_dir,patter="文件关键字")。代码示例如下:
#单元测试框架import unittestimport osclass myunitest(unittest.TestCase): @classmethod def setUpClass(cls) -> None: print("第一次开始前准备") @classmethod def tearDownClass(cls) -> None: print("第一次结束后 *** 作") def test_01(self): print("这是case1") r=2 self.assertEqual(2,r,"判断相等") def test_02(self): print("这是case2")class my2(unittest.TestCase): @classmethod def setUpClass(cls) -> None: print("第二次开始前准备") @classmethod def tearDownClass(cls) -> None: print("第二次结束后 *** 作") def test_03(self): print("这是case03")class my3(unittest.TestCase): @classmethod def setUpClass(cls) -> None: print("第三次开始前准备") @classmethod def tearDownClass(cls) -> None: print("第三次结束后 *** 作") def test_04(self): print("这是case4")if __name__ == '__main__': print(os.path) discover=unittest.defaultTestLoader.discover("./","test_*.py") unittest.TextTestRunner().run(discover)
总结
以上是内存溢出为你收集整理的python_unnitest测试框架全部内容,希望文章能够帮你解决python_unnitest测试框架所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)