目录
一、分拆后的实现代码
二、创建用于执行所有用例的ALL_HTMLtest.py文件
三、集成测试报告
随着软件不断迭代功能越来越多,对应的测试用例也会呈指数增长。一个实现几十个功能的项目,对应的用例可能有上百个甚至更多,如果全部集成在一个文件中,那么这个文件就很臃肿且维护麻烦。
一个很好的方法就是将这些用例按照功能类型进行拆分,分散到不同测试文件中,即一个项目,对应多个分支。
一、分拆后的实现代码
1、testbaidu.py
1 from selenium import webdriver
2 import unittest
3 import time
4
5 class MyTest(unittest.TestCase):
6 def setUp(self):
7 self.driver = webdriver.Chrome("F:\安装工具\python\chromedriver.exe")
8 self.driver.maximize_window()
9 self.driver.implicitly.wait(10)
10 self.base_url = "http://www.baidu.com"
11
12 def test_baidu(self):
13 driver = self.driver
14 driver.get(self.base_url + "/")
15 driver.find_element_by_id("kw").clear()
16 driver.find_element_by_id("kw").send_key("unittest")
17 driver.find_element_by_id("su").click()
18 time.sleep(2)
19 title = assertEqual(title,"unittest_百度搜索")
20
21 def tearDown(self):
22 self.driver.quit()
2、testyoudao.py
1 from selenium import webdriver
2 import unittest
3 import time
4
5 class Mytest(unittest.TestCase):
6
7 def setUp(self):
8 self.driver = webdriver.Chrome("F:\安装工具\python\chromedriver.exe")
9 self.driver.maximize_window()
10 self.driver.implicitly_wait(10)
11 self.base_url = "http://www.youdao.com"
12
13 def test_youdao(self):
14 driver = self.driver
15 driver.get(self.base_url + "/")
16 driver.find_element_by_id("query").clear()
17 driver.find_element_by_id("query").send.keys("webdriver")
18 driver.find_element_by_id("qb").click()
19 time.sleep(2)
20 title = driver.title
21 self.assertEqual(title, "webdriver - 有道搜索")
22
23 def tearDown(self):
24 self.driver.close()
二、创建用于执行所有用例的ALL_HTMLtest.py文件
1、ALL_HTMLtest.py
1 # coding=utf-8
2 import unittest
3 import time
4 from HTMLTestRunner import HTMLTestRunner
5
6 # 加载用例testbaidu,testyoudao
7 import testbaidu
8 import testyoudao
9
10 # 将测试用例添加到测试集中
11 suite = unittest.TestSuite()
12
13 suite.addTest(testbaidu.MyTest("test_baidu"))
14 suite.addTest(testyoudao.Mytest("test_youdao"))
15
16 if __name__ == '__main__':
17 # 执行测试
18 runner = unittest.TextTestRunner()
19 runner.run(suite)
拆分带来的好处显而易见,可以根据不同功能创建不同的测试文件,甚至不同的目录,还可以将不同的小功能划分为不同的测试类,在类下编写测试用例,整体结构更加清晰。
但依然存在缺陷(当用例达到成百上千条时,在ALL_HTMLtest.py中addTest()添加测试用例就变得很麻烦)。。。
2、TestLoader类
unittest单元测试框架提供了TestLoader类,该类负责根据各种标准加载测试用例,并将它们返回给测试套件。
unittest提供了可以共享的defaultTestLoader类,可以使用其子类和方法创建实例,discover()方法就是其中之一。
discover(start_dir, pattern='test*.py', top_level_dir=None)
找到指定目录下的所有测试模块,并递归查找子目录下的测试模块,只有匹配到文件名才能被加载,如果启动的不是顶层目录,则顶层目录必须单独指定。
start_dir:要测试的模块名或测试用例目录;
pattern='test*.py':表示用例文件名的匹配原则,下面的例子中匹配文件名为以“test”开头的“.py”文件,星号“*”表示任意多个字符;
top_level_dir=None:测试模块的顶层目录,如果没有顶层目录,默认为None;
1 # coding=utf_8
2 import unittest
3 from unittest import defaultTestLoader
4 # 定义测试用例的目录为当前目录
5 test_dir = './'
6 discover = unittest.defaultTestLoader.discover(test_dir,pattern='test*.py')
7
8 if __name__ == '__main__':
9 runner = unittest.TextTestRunner()
10 runner.run(discover)
三、集成测试报告
HTMLTestRunner目前只针对单个测试文件生成测试报告,因此需要对上面的代码进行修改,修改后内容如下:
执行后,结果如下:
PS:请忽略报错,这里主要是举个例子,具体的实践请以实际业务场景进行调整。。。
加油吧,测试人!如果你需要提升规划,那就行动吧,在路上总比在起点观望的要好。未来的你肯定会感谢现在拼命的自己!