【python+selenium-02】关键字驱动结合ddt
unittest是python自动化测试的框架,里面集成了很多好用的方法。
我们先来看下下面的一段代码(实现了3个测试用例)
import unittest from selenium import webdriver from time import sleep class TestDemo01(unittest.TestCase): # 前置条件 def setUp(self): self.driver = webdriver.Firefox() self.driver.get("http://www.baidu.com") # 后置条件 def tearDown(self): sleep(2) self.driver.quit() def test_01(self): self.driver.find_element_by_id("kw").send_keys("python") self.driver.find_element_by_id("su").click() def test_02(self): self.driver.find_element_by_id("kw").send_keys("java") self.driver.find_element_by_id("su").click() def test_03(self): self.driver.find_element_by_id("kw").send_keys("mysql") self.driver.find_element_by_id("su").click() if __name__ == '__main__': unittest.main()
我们发现一个什么问题?
相同的操作,只是输入的内容不同,代码冗余,这个时候ddt就出现了。
import unittest from selenium import webdriver from time import sleep from ddt import ddt, data @ddt() class TestDemo01(unittest.TestCase): # 前置条件 def setUp(self): self.driver = webdriver.Firefox() self.driver.get("http://www.baidu.com") # 后置条件 def tearDown(self): sleep(2) self.driver.quit() @data('python', 'java', 'mysql') def test_04(self, text): self.driver.find_element_by_id("kw").send_keys(text) self.driver.find_element_by_id("su").click() if __name__ == '__main__': unittest.main()
通过ddt的 @ddt 和 @data注解,让代码"瘦身"了!
最后怎么让关键字驱动与ddt结合呢?
import unittest from time import sleep from ddt import ddt, data, unpack from auto.tool.webui_autotest import * @ddt() class TestDemo02(unittest.TestCase): # 前置条件 def setUp(self): self.driver = WebUIInit("firefox", "http://www.baidu.com") # 后置条件 def tearDown(self): sleep(2) self.driver.quit() @data(('id', 'kw', 'su', 'python'), ('id', 'kw', 'su', 'java')) @unpack def test_05(self, locator_type, locator, locator1, text): self.driver.send_keys(locator_type, locator, text) self.driver.click(locator_type, locator1) if __name__ == '__main__': unittest.main()
是不是觉得好简单?
---------------------------------------------------
立足软件测试领域,并重新定义测试!
---------------------------------------------------