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

未完待续。。。。。

猜你喜欢

转载自www.cnblogs.com/nieliangcai/p/9140515.html