多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] 前言 熟悉java的应该都清楚常见的单元测试框架Junit和TestNG,这个招聘的需求上也是经常见到的。python里面也有单元测试框架-unittest,相当于是一个python版的junit。 python里面的单元测试框架除了unittest,还有一个pytest框架。 <br /> ## 一、unittest简介 ``` 1. 先导入unittest 2. 用help函数查看源码解析 3. 查看描述: Python unit testing framework, based on Erich Gamma's JUnit and Kent Beck's Smalltalk testing framework. 翻译:python的单元测试框架,是基于java的junit测试框架 ``` ![](http://images2015.cnblogs.com/blog/1070438/201704/1070438-20170404201834113-1812106740.png) <br /> ## 二、简单用法 1.可以把上图的这段代码copy出来,单独运行,看看测试结果。 Simple usage: import unittest class IntegerArithmeticTestCase(unittest.TestCase): def testAdd(self): ## test method names begin 'test*' self.assertEqual((1 + 2), 3) self.assertEqual(0 + 1, 1) def testMultiply(self): self.assertEqual((0 * 10), 0) self.assertEqual((5 * 8), 40) if __name__ == '__main__': unittest.main() 2. 第一行是导入unittest这个模块 3. class这一行是定义一个测试的类,并继承unittest.TestCase这个类 4. 接下来是定义了两个测试case名称:testAdd和testMultiply 5. 注释里面有句话很重要,这个要敲下黑板记笔记了:## test method names begin 'test*' --翻译:**测试用例的名称要以test开头** 6. 然后是断言assert,这里的断言方法是assertEqual-判断两个是否相等,这个断言可以是一个也可以是多个 7. if下面的这个unittest.main()是运行主函数,运行后会看到测试结果(跑了两个用例耗时0.000秒,两个用例都通过): ``` .. ---------------------------------------------------------------------- Ran 2 tests in 0.000s OK ``` <br /> ## 三、小试牛刀 1. 上面的两个案例是加法和乘法,我们可以写个case试下减法和除法。 2. 有很多小伙伴不知道断言怎么写,断言其实就是拿实际结果和期望结果去对比,对比的方法很多,这里只是举的最简单的一个判断相等的方法。 ``` import unittest class Test(unittest.TestCase): def testMinus(self): # test method names begin 'test*' '''测试减法''' result = 100 - 10 # 实际结果 hope = 90 # 期望结果 self.assertEqual(result, hope) def testDivide(self): '''测试除法''' result = 7/2 # 实际结果 hope = 3.5 # 期望结果 self.assertEqual(result, hope) if __name__ == '__main__': unittest.main() ``` <br /> ## 四、前置和后置 1. setUp:在写测试用例的时候,每次操作其实都是基于打开浏览器输入对应网址这些操作,这个就是执行用例的前置条件。 2. tearDown:执行完用例后,为了不影响下一次用例的执行,一般有个数据还原的过程,这就是执行用例的后置条件。 3. 很多人执行完用例,都不去做数据还原,以致于下一个用例执行失败,这就是不喜欢擦屁股的事情,习惯不好。 4. 前置和后置都是非必要的条件,如果没有也可以写pass ``` import unittest class Test(unittest.TestCase): def setUp(self): pass # 如果没有可以不写,或者pass代替 def tearDown(self): pass ``` <br /> ## 五、博客案例 1. 打开博客首页为例,写一个简单的case 2. 判断title完全等于期望结果 3. 运行通过,下面会有一个绿条显示:1 test passed ![Snipaste_2020-09-10_16-58-53.png](http://i.loli.net/2020/09/10/N6fubYaVI7UJP1W.png) <br /> 六、参考代码 ``` from selenium import webdriver from selenium.webdriver.support import expected_conditions as EC from time import sleep import unittest class Blog(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome() self.driver.get("https://home.cnblogs.com/zjut-cheng") def test_blog(self): sleep(3) result = EC.title_is("栀楠的主页 - 博客园")(self.driver) print(result) self.assertTrue(result) def tearDown(self): self.driver.quit() if __name__ == "__main__": unittest.main() ```