• 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内的内容只有在类开始时执行一次。这样就能达到我想要的目的了。只登录一次,然后通过定位元素的读取,进行重复操作和数据校验。

      

      

      

      

  • 相关阅读:
    2015年 Stoi&Gdoi 反思总结与未来计划
    bzoj4517: [Sdoi2016]排列计数--数学+拓展欧几里得
    bzoj4518: [Sdoi2016]征途--斜率DP
    BZOJ 1391: [Ceoi2008]order
    BZOJ 2527: [Poi2011]Meteors
    BZOJ 2087: [Poi2010]Sheep
    BZOJ 1283: 序列
    BZOJ 1914: [Usaco2010 OPen]Triangle Counting 数三角形
    BZOJ 3513: [MUTC2013]idiots
    BZOJ 3771: Triple
  • 原文地址:https://www.cnblogs.com/yimihua-kai/p/14666248.html
Copyright © 2020-2023  润新知