引言:本文首先对比当执行脚本时采用for循环和采用ddt数据驱动的不同,然后讲解一下如何使用ddt。
目录
For循环读取数据
代码示例:
import unittest2 from selenium.webdriver.common.by import By from func.csvFileManager2 import reader from test_case.BaseTestCase import BaseTestCase class Register2Test(BaseTestCase): def test_register(self): table = reader("register_test_cases.csv") for row in table: self.driver.get("http://localhost/index.php?m=user&c=public&a=reg") self.driver.find_element(By.NAME, "username").send_keys(row[0]) self.driver.find_element(By.NAME, "password").send_keys(row[1]) self.driver.find_element(By.NAME, "userpassword2").send_keys(row[2]) self.driver.find_element(By.NAME, "mobile_phone").send_keys(row[3]) self.driver.find_element(By.NAME, "email").send_keys(row[4])
缺点:用for循环的方式,当其中任何一条测试用例执行失败,后续的测试数据将不被执行。
DDT数据驱动方式
基本流程:
- 导入代码库ddt
- 调用读取csv文件的方法
- 在类的上面加装饰器@ddt.ddt 表示当前类是一个数据驱动测试的类
- 在方法上面加装饰器@ddt.data() 用来指定测试数据源,要求数据源的格式是多个参数
代码如下:
import ddt import unittest2 from selenium.webdriver.common.by import By from func.csvFileManager2 import reader from test_case.BaseTestCase import BaseTestCase @ddt.ddt class Register3Test(BaseTestCase): table = reader("register_test_cases.csv") @ddt.data(*table) def test_register(self, row): self.driver.get("http://localhost/index.php?m=user&c=public&a=reg") self.driver.find_element(By.NAME, "username").send_keys(row[0]) self.driver.find_element(By.NAME, "password").send_keys(row[1]) self.driver.find_element(By.NAME, "userpassword2").send_keys(row[2]) self.driver.find_element(By.NAME, "mobile_phone").send_keys(row[3]) self.driver.find_element(By.NAME, "email").send_keys(row[4]) if __name__ == '__main__': unittest2.main()
注意点:
- 因为table是一个列表所以在前面加上*号。
- 列表前面加星号的作用:举例 list=[1,2,3,4]
- print(list) --> [1,2,3,4]
- print(*list) --> 1,2,3,4