Python+selenium - 数据驱动 (页面自动化,加入数据驱动)
当前页面,有个待办中心的功能,点击待办中心待办事项的数值直接跳转到相关页面,并做筛选,显示数据。功能实现其实就是,点击跳转,校验数据。为了减少代码冗余,考虑通过数据驱动的方式进行测试脚本的编写。
方法一:通过paramunittest 传入参数,实现自动化
首先安装:pip install paramunittest
paramunittest 的参数既可以传元组也可以传字典参数 ("value1","value2")(“key”:"values")
从excel中读取数据作为入参数据,通过paramunittest 传递入参数据,进行测试
1 list = excel_to_list('\\data.xlsx', 'center').data_list() 2 3 @paramunittest.parametrized(*list) 4 class center(unittest.TestCase): 5 @classmethod 6 def setUpClass(cls): 7 cls.driver = Login().login() 8 9 def setParameters(self, moudle, element_path, text): 10 self.moudle = moudle 11 self.element_path = element_path 12 self.text = text 13 14 def testcase_01(self): 15 self.find_elements("//*[contains(text(),'待办中心')]") 16 ele = self.driver.find_element_by_xpath(self.element_path) 17 total = int(ele.text) 18 ele.click() 19 time.sleep(2) 20 total1 = data_total(self.driver) 21 logging.info("{0}-一周-{1}:{2},我的课程对应数据:{3}".format(self.moudle,self.text, self.total, self.total1)) 22 self.assertEqual(total, total1)
不过这里有个问题,我想要实现的是在进行这个脚本的时候只需要登录一次,可是如果我将类初始的时候,做登录操作。那么用paramunittest 传参的时候,相当于每一次入参都会跑一遍登 录。这个不是我最初想要实现的。可能在将登录不放在,setUpClass中能解决这个问题。这个暂时没有考究。
后续可以考虑的方案是将登录步骤简化,直接用cookies传值,直接进入需要测试的页面 (这个是后话,之后可以研究一下)
方法二:通过ddt
DDT : Data Driven Testing 将测试数据进行参数化
安装:pip install ddt
data:通过获取动态参数,将传进来的数组组成元组,对元组进行遍历传递参数(通过索引取值)
unpack :把数据data传递的元组进行拆分,这个时候需要增加动态参数 去接收拆分后的值
from ddt import ddt, data, unpack @ddt class center(unittest.TestCase): @classmethod def setUpClass(cls): cls.driver = Login().login() @data(*list) #传入参数 @unpack #将参数拆分 def testcase_01(self, moudle, element_path, text): # 添加动态参数,对应上面的参数拆分 self.find_elements("//*[contains(text(),'待办中心')]") ele = self.driver.find_element_by_xpath(element_path) total = int(ele.text) ele.click() time.sleep(2) total1 = data_total(self.driver) logging.info("{0}-一周-{1}:{2},我的课程对应数据:{3}".format(moudle,text, total, total1)) self.assertEqual(total, total1)
在对应的运行case中增加数据驱动,setUpClass内的内容只有在类开始时执行一次。这样就能达到我想要的目的了。只登录一次,然后通过定位元素的读取,进行重复操作和数据校验。