Python_自动化_ATP框架

接口自动化测试框架-数据驱动-ATP   优点:用例特别多,批量运行,缺点:每条用例之间没有关系

整体描述:从启动文件看start,

1.glob找测试用例.xls文件们,

2.获取所有用例:readExcel()函数,是打开EXCEL,打不开返回异常,打开了获取sheet页,循环获取所有用例,拿回来存在一个变量里all_case,

3.执行用例:run_case(all_case),把所有的用例拿过来循环,url,请求参数,方法,校验结果获取,请求参数转字典,判断请求方式调接口,然后校验结果,调用check_res(),判断‘’通过‘’失败‘,循环的结果放在一个list(all_res[res,check])里返回

4.写回到原来的文件里write_res()

5.所有用例得个数 case_count

6.通过用列得个数

7.累加每个文件里面的用例

8.累加通过得用例数

9.附件加入

一、作业思路--(写一个一个组件)

1.读取Excel所有的测试用例------xlrd模块

2.根据测试用例调用接口--requests

3.校验结果--if

4.结果写入Excel    xlutils

5.生成报告,发送邮件  yagmail

二、解决方案

框架:一些工具的集合。对功能进行封装,提高复用性

1.获取用例

2.执行用例

3.校验结果

4.生成报告

数据驱动:根据数据去测试

代码驱动:根据代码去测试

关键字驱动:根据关键字去测试

三、程序清单

   atp-----------------程序目录

    bin-----------------可执行文件

      start.py---------启动文件

    cases--------------测试用例目录

      测试用例.xls------用例文件

      测试用例1.xls-----用例文件

    config--------------配置文件目录

      setting.py--------配置信息

    lib-------------------主程序(逻辑)目录

      my_request---------封装请求方法

      tools------------------封装工具

    logs------------------日志目录

      atp.log--------日志文件

    readme------------说明文件

      

lib

tools.py

import xlrd,os

#1.读取Excel所有的测试用例------xlrd模块

def readExcel(file_name):

  try:

    book = xlrd.open_workbook(file_path)    #打开Excel

  except Exception as e:

    log.error('打开用例出错,文件名为%s'%file_path)

    return[]

  else:

    all_case = []   #存放所有用例

    sheet = book.sheet_by_index(0)    #读取sheet页

    for i in range(1,sheet.nrows):

      row_data = sheet.row_values(1)

      all_case.append(row_data[4:8])   #切片顾头不顾尾

    return all_case

 

#校验结果

def check_res(res:str,check:str)

'''

  res:返回得是Json串转换成["code=200", "userId=1'],

  check:转变成一个list 然后遍历比较  判断check里的值是否存在在res里

  "product":

  "code": "200"

‘’‘

  new_res = res.replace(' “: ” ’,'=‘).replace(' ": ','=')

  #check.split(',')       #code=200,userId=1  变为list ['code=200', 'userId=1']

  for c in check.split(','):

    if c not in new_res:

      return '失败'

  return ’成功‘

 

from xlutils.copy import copy        #3.结果报告写入Excel    ---------    xlutils

###res_list= {'code :200,userId :1’,'通过'}

def write_res(file_name,res_list):

  book = xlrd.open_workbook(file_name)

  new_book = copy(book)

  sheet = new_book.get_sheet(0)

  for row, data in enumerate(res_list,1):

    res,status = data

    sheet.write(row,8,res)

    sheet.write(row,9,status)

  new_book.save(file_name)

 

def str_to_dict(s:str, seq = '&'):

  #username=niuhanyang&password=123456

  #['username : niuhanyang','password : 123456' ]

  d = {}

  if s: 

    for tmp in s.split(seq):  #username=niuhanyang,password = 123456

      user,passwd = tmp.split('=')       #username:niuhanyang, password:123456

      d[user] = passwd    #加入字典

    return d

 

def run_case(all_case):

  all_res = []   #好多条用例存在list里返回

  for case in all_case:

    log.info('正在运行%s'%log)

    url, method,data,check = case   #传过来的case有四个值

    data = str_to_dict(data)    #把EXCEL里得字符串转换成字典再进行判断

    if method.upper() == 'POST':

     res =   my_requests.post(url,data)    #requests调取接口post,get

    else:

     res = my_requests.get(url, data)

    status = check_res(res,check)

    all_res.append([res,status])

import yagmail

def send_mail(content,files):   #附件

  mail = yagmail.STMP(**MAIL_INFO)

  subject = '%s_接口测试报告'%time.strftime('%Y-%m-%d %H:%M:%S')

  #连接上邮箱

  mail.send(to = TO, cc = CC, content = content, subject = subject, attachments = files)

 

  

#2.调用接口--requests

my_requests.py

from config.settings import log

def my_Requests(post(url, data, header = none, cookies = none, is_Json = Flase)):

   try:

  if is_Json:

    res = requests.post(url = url, json = data, header = header, cookies = cookies).text    #.json返回为字典  .text返回为字符串

  else:

    res = requests.post(url = url, data = data, header = header, cookies = cookies).text

 except Exception as e:

    log.error('接口请求失败,失败原因%s'%e)

    res = str(e)

    return res

 

def get(url, data, header = None, cookies = None):
    try:
        res = requests.get(url, params = data, headers = header, cookies = cookies).text
    except Exception as e:
        my_log.error('接口请求出错,%s'%e)
        res = str(e)
    return res

   

 bin

start.py

import os,sys

BATH_PATH = os.path.dirname(os.name.dirname(os.path.abspath(__file__)))

sys.path.insert(0,BATH_PATH)

from lib firm tools

from config.setting import CASE_PATH

import glob   #listdir  要和循环配合使用找到自己想要的文件

def main():

  all_count = 0

  all_pass_count = 0

  files = []

  for file in glob.glob(os.path.join(CSAE_PATH,'*xls')):

    all_case = tools.readExcel(file)    #读取用例

    all_res  = tools.run_case(all_case)   #执行用例

    tools.write_res(file,all_res)     #4.写回到原来的文件里write_res()

    case_count = len(all_case)    #5.所有用例得个数 case_count

    pass_count = str(all_res).count('通过')     #6.通过用列得个数

    all_count += case_count     #7.累加每个文件里面的用例

    all_pass_count += pass_count      #8.累加通过得用例数

    files.append(file)    #返回一个执行完的Excel文件,很多用例执行,9.附件加入

 

msg='''

    本次运行%s条用例,通过%s条用例,失败%s条用例,请见详细信息。

'''%(all_count,all_pass_count, all_count-all_pass_count)

  tools.send.mail('mgs',files)   #发邮件

 5.生成报告,发送邮件  yagmail

 

 

config

settings.py

import os,nnlog

BATH_PATH = os.path.dirname(os.name.dirname(os.path.abspath(__file__)))    #程序目录路径atp;dirname上级目录  abspath 绝对路径   __file__当前路径

LOG_NAME = 'atp.log'

ABS_FILE_PATH = BATH_PATH,'logs',LOG_NAME

log = log.Logger('ABS_FILE_PATH')   #实例化

CASES_PATH = BATH_PATH,‘case’

MAIL_INFO = {

    'user':'    ',

    'password':'   ',

      ’host‘:' smtp.163.com'

}  #邮箱信息

TO = [   ]   #发送

CC = [   ]   #抄送

#写完配置文件make source root 添加到环境变量中以备使用 from config.settings import log

    

 

118.24.3.40/api/product/all

118.24.3.40/api/user/login    niuhanyang    aA123456

 

字典,集合,json串区别

集合:{’1,2,3,4‘}

字典:{'key‘;’value‘}

Json串:{“key”:"value"}

 

pip install pyyaml

 

posted @ 2018-10-17 20:23  是哲哲啊  阅读(377)  评论(0编辑  收藏  举报