目录
for循环读取数据
ddt数据驱动方式:
本文主要对比一下当导入数据的时候采用for循环和采用数据驱动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数据驱动方式:
基本流程:
- 导入代码库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
|