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))

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2019-08-22 23:53  WiltChamberlain  阅读(300)  评论(0编辑  收藏  举报