4.构造测试套件
1.按照顺序执行
代码如下:
import unittest from selenium import webdriver class BaiduTest(unittest.TestCase): def setUp(self): self.driver=webdriver.Chrome() self.driver.maximize_window() self.driver.implicitly_wait(30) self.driver.get("http://www.baidu.com") def tearDown(self): self.driver.quit() def test_baidu_news(self): "验证百度首点击新闻后的跳转" self.driver.find_element_by_link_text("新闻").click() url = self.driver.current_url self.assertEqual(url,'http://news.baidu.com/') def test_baidu_map(self): "验证百度首页点击地图后的跳转" self.driver.find_element_by_link_text("地图").click() self.driver.get("http://www.baidu.com") if __name__ == '__main__': suite= unittest.TestSuite() suite.addTest(BaiduTest("test_baidu_news")) suite.addTest(BaiduTest("test_baidu_map")) unittest.TextTestRunner().run(suite)
注解:首先对TestSuite类进行实例化,使之成为一个对象suite,然后调用TestSuite类中addTest方法,把测试用例添加到测试套件中,最后执行测试套件,从而执行测试套件中的测试用例。运行以上代码后,测试用例会按照添加到测试套件的顺序执行,也就是说先添加进去的先执行,后添加进去的后执行。
2.按测试类执行
import unittest from selenium import webdriver class BaiduTest(unittest.TestCase): def setUp(self): self.driver=webdriver.Chrome() self.driver.maximize_window() self.driver.implicitly_wait(30) self.driver.get("http://www.baidu.com") def tearDown(self): self.driver.quit() def test_baidu_news(self): "验证百度首点击新闻后的跳转" self.driver.find_element_by_link_text("新闻").click() url = self.driver.current_url self.assertEqual(url,'http://news.baidu.com/') def test_baidu_map(self): "验证百度首页点击地图后的跳转" self.driver.find_element_by_link_text("地图").click() self.driver.get("http://www.baidu.com") if __name__ == '__main__': suite = unittest.TestSuite(unittest.makeSuite(BaiduTest)) unittest.TextTestRunner().run(suite)
注解:以上代码可以看出,在测试套件TestSuite类中,unittest模块调用了makeSuite的方法,makeSuite的参数是testCaseClass,也就是测试类。
3.加载测试类
在unittest模块中也可以使用TestLoader类来加载测试类,也就是说TestLoader加载测试类并将它们返回到TestSuite中,TestLoader类的应用代码如下:
import unittest from selenium import webdriver class BaiduTest(unittest.TestCase): def setUp(self): self.driver=webdriver.Chrome() self.driver.maximize_window() self.driver.implicitly_wait(30) self.driver.get("http://www.baidu.com") def tearDown(self): self.driver.quit() def test_baidu_news(self): "验证百度首点击新闻后的跳转" self.driver.find_element_by_link_text("新闻").click() url = self.driver.current_url self.assertEqual(url,'http://news.baidu.com/') def test_baidu_map(self): "验证百度首页点击地图后的跳转" self.driver.find_element_by_link_text("地图").click() self.driver.get("http://www.baidu.com") if __name__ == '__main__': suite = unittest.TestLoader().loadTestsFromTestCase(BaiduTest) unittest.TextTestRunner().run(suite)
4.按照测试模块执行
在TestLoader类中也可以按模块来执行测试。在python中,一个python文件就是一个模块,一个模块中可以有N个测试类,一个测试类中可以有N个测试用例。按照模块执行的代码如下:
import unittest from selenium import webdriver class BaiduTest(unittest.TestCase): def setUp(self): self.driver=webdriver.Chrome() self.driver.maximize_window() self.driver.implicitly_wait(30) self.driver.get("http://www.baidu.com") def tearDown(self): self.driver.quit() def test_baidu_news(self): "验证百度首点击新闻后的跳转" self.driver.find_element_by_link_text("新闻").click() url = self.driver.current_url self.assertEqual(url,'http://news.baidu.com/') def test_baidu_map(self): "验证百度首页点击地图后的跳转" self.driver.find_element_by_link_text("地图").click() self.driver.get("http://www.baidu.com") class BaiduMap(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome() self.driver.maximize_window() self.driver.implicitly_wait(30) self.driver.get("http://www.baidu.com") def tearDown(self): self.driver.quit() def test_baidu_map(self): "验证:测试百度首页点击地图后的跳转" self.driver.find_element_by_link_text("地图").click() self.driver.get("http://baidu.com") if __name__ == '__main__': suite = unittest.TestLoader().loadTestsFromModule("test.py") unittest.TextTestRunner(verbosity=2).run(suite) if __name__ == '__main__': suite = unittest.TestLoader().loadTestsFromTestCase(BaiduTest) unittest.TextTestRunner().run(suite)
注解:在以上代码中可以看到,测试类分别是BaiduMap和BaiduTest,模块名称为test.py,TestLoader类直接调用loadTestFromModule方法返回给指定模块中包含的所有测试用例套件。
5.优化测试套件
以上实例是把测试套件写在了main主函数中,也可以单独把测试套件写成一个方法来调用这里以加载测试类为例,把测试套件写成一个单独的方法,代码如下:
from selenium import webdriver import unittest class BaiduTest(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome() self.driver.maximize_window() self.driver.get('http://www.baidu.com') self.driver.implicitly_wait(30) def tearDown(self): self.driver.quit() def test_baidu_news(self): self.driver.find_element_by_link_text('新').click() def test_baid_taps(self): self.driver.find_element_by_link_text('地图').click() @staticmethod def suite(testcaseClass): suite = unittest.TestLoader().loadTestsFromTestCase(testcaseClass) return suite if __name__ == '__main__': unittest.TextTestRunner(verbosity=2).run(BaiduTest.suite(BaiduTest))