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 传参

  不过这里有个问题,我想要实现的是在进行这个脚本的时候只需要登录一次,可是如果我将类初始的时候,做登录操作。那么用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)
ddt 传参

  在对应的运行case中增加数据驱动,setUpClass内的内容只有在类开始时执行一次。这样就能达到我想要的目的了。只登录一次,然后通过定位元素的读取,进行重复操作和数据校验。

  

 

 

 

 

 

  

  

 

 

 

  

posted @ 2021-04-16 11:39  依米花开了  阅读(270)  评论(0编辑  收藏  举报