• python UI自动化测试


    为了减小维护成本:

      1.UI自动化测试需要有较为稳定的环境

      2.代码设计合理,那么我们就需要面向对象的设计一个框架,将重复的代码模块化

    一、首先总结一下 UI自动化大概要哪些模块

      1.config(配置文件):用来存放配置文件(YML,XML,HTML。。。)

      2.data(数据文件):存放测试数据等

      3.drivers(驱动):Chromedriver,IEdriver

      4.log(日志文件):打印测试log

      5.report(报告):生成HTML测试报告

      6.test(测试用例):写TestCase调用其他模块中的方法

      7.utils(公共方法):写调用config、data、log、report等其他模块的方法

      8.后续可自己增加其他模块,比如针对某类型元素的获取,page中元素的定位等

    二、结合起来运用

      首先如果我们没有框架的话, 写一个testcase可以直接写到一个class中,甚至不用class,甚至连def都可以不用就实现了一个case;

    但是,万一下次又用到了同样的功能,需要写同样的内容怎么办呢???甚至它和之前的case只有一点点不一样的话呢???我们需要不断的复制粘贴并且修改;

    那么我们这里需要用到class来实现不同模块之间的调用

      1、我们需要在utils方法中写入一些基本方法,实现对其他模块的调用

      1)、file_reader.py(读取文件):我们上面描述的框架中包含了config中的YML文件(或者其他)、data中的Excel文件,

    config---YML:

     1 import os
     2 
     3 class YamlReader(object):
     4     def __init__(self,yaml):
     5         #有yaml文件就返回文件,没有就报异常
     6         if os.path.exists(yaml):
     7             self.yaml = yaml
     8         else:        
     9             raise FileNotFoundError("yaml文件不存在!")
    10         self._data = None
    11     
    12     @property            #这里需要了解yaml返回的内容格式等信息
    13     def data(self):        #调用yaml文件中的内容data
    14         if not self._data:
    15             with open(self.yaml,'rb') as f:
    16                 self._data = list(yaml.safe_load_all(f))
    17         return self._data

    data--Excel:

     1 import os
     2 import xlrd
     3 
     4 class ExcelReader(object):
     5     #title_line =True 判断是否有标题,为True时有标题
     6     def __init__(self,excel,sheet=0,title_line=True):
     7         if os.path.exists(excel):
     8             self.excel = excel
     9         else:
    10             raise FileNotFoundError("Excel文件不存在!")
    11             
    12         self.sheet = sheet
    13         self.title_line = title_line
    14         self._data = list()
    15     
    16     @property
    17     def data(self):
    18         if not self.data:
    19             workbook = open_workbook(self.excel)
    20             #获取sheet
    21             if type(self.sheet) not in [int,str]:
    22                 raise SheetTypeError('Please pass in <type int> or <type str> not {}'.format(type(self.sheet)))
    23             elif type(self.sheet)==int:
    24                 sheet = workbook.sheet_by_index(self.sheet)
    25             elif type(self.sheet)==str:
    26                 sheet = workbook.sheet_by_name(self.sheet)
    27             
    28             if self.title_line:    #获取data值,有title为dict,没有title为list
    29                 title = sheet.row_value()    #第一行定义为title
    30                 for col in range(1,sheet.nrows):
    31                     self._data.append(dict(zip(title,sheet.row_values(col))))
    32             else:
    33                 for col in range(0,sheet.nrows):
    34                     self._data.append(sheet.row_values(col))
    35             return self._data

    未完待续。。。。。

  • 相关阅读:
    dubbo踩坑
    windows下面使用protobuf
    解决端口占用的问题
    建设检验
    统计学资料整理
    java cpu 负载高分析
    演讲/汇报
    管理和领导
    css渐变动画
    vue组件之间互相传值:父传子,子传父
  • 原文地址:https://www.cnblogs.com/nieliangcai/p/9140515.html
Copyright © 2020-2023  润新知