Python_自动化_ATP

Python自动化

apt缺点:

1、excel格式不灵活,操作excel代码比较繁琐

2、不适合有关联关系的接口测试

1 作业思路

1、获取excel获取所有的case--xlrd

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

3、校验结果--if

4、结果写入excel--xlutil

5、生成报告,发送邮件--yagmail

2 解决方案

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

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

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

框架:一堆工具的集合

初期:适用于用例较多,用例独立无关联,批量运行时。如下代码

问题:数据存在mongodb、redis里,用例有关联时无法测试,无法加cookie,加header

解决:加2列(加请求头,是否为json)、使用另外的框架

 

3 程序清单

# 程序清单如下: apt-------------------程序目录     
            bin---------------可执行文件
              start.py------启动文件
            cases-------------测试用例目录
              测试用例.xls---用例文件
              测试用例1.xls--用例文件
            config------------配置目录
              setting.py----配置信息
            lib---------------主程序目录
              my_request.py-封装请求方法
             tools.py------封装工具
            logs--------------日志目录
               apt.log-------日志文件
            readme.txt--------说明文件

4 程序

4.1 start.py

复制代码
 1 #!/usr/bin/python
 2 # -*- coding:utf-8 -*-  3 # Author:hwm  4 import os,glob  5 from config.setting import CASE_PATH  6 from lib import tools  7 BASE_PATH = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))  8 sys.path.insert(0,BASE_PATH)  9 def main(): 10 all_count = 0 #存放所有文件用例的个数 11 all_pass_count = 0 #存放所有文件用例通过的个数 12 files = [] #存放运行过的所有用例文件 13 for file in glob.glob(os.path.join(CASE_PATH,'*.xls')):#glob支持正则 14 case_abs_path = os.path.join(CASE_PATH,file) 15 all_case = tools.readExcel(case_abs_path) #获取所有的用例 16 all_res = tools.run_case(all_case) #获取所有的执行结果 17 tools.write_res(case_abs_path,all_res) #将执行结果写入文件 18 case_count = len(all_res) #当前用例总数 19 pass_count = str(all_res).count('通过') #当前通过用例总数 20 all_count += case_count #累加每个用例文件的用例数 21 all_pass_count += pass_count #累加每个用例文件通过的用例数 22 files.append(file) #加入每个附件 23 msg=''' 24  各位好: 25  本次运行%s条用例,通过%s条,失败%s条,详细信息见附件。 26 '''%(all_count,all_pass_count,all_count-all_pass_count) 27  tools.send_email(msg,files) 28 main()
复制代码

 

4.2 setting.py

复制代码
 1 #!/usr/bin/python
 2 # -*- coding:utf-8 -*-  3 # Author:hwm  4 import nnlog,os,sys  5 BASE_PATH = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))  6 LOG_FILE_NAME = 'atp.log'  7 ABS_FILE_PATH = os.path.join(BASE_PATH,'logs',LOG_FILE_NAME)  8 my_log = nnlog.Logger(ABS_FILE_PATH) #日志信息  9 CASE_PATH = os.path.join(BASE_PATH,'cases') #存放用例的目录 10 MAIL_INFO = { 11 'user':'925441532@qq.com',#邮箱账号 12 'password':'kiujkguxiwdcbbhj',#邮箱密码 13 'host':'smtp.qq.com'#邮箱服务器 14 }#邮箱信息 15 TO = ['925441532@qq.com']#发送人 16 CC = ['357017152@qq.com']#抄送人
复制代码

4.3 my_request.py

复制代码
 1 #!/usr/bin/python
 2 # -*- coding:utf-8 -*-  3 # Author:hwm  4 import requests  5 from config.setting import my_log  6 def post(url,data,headers=None,cookies=None,is_json=False):  7 try:  8 if is_json:  9 res = requests.post(url,json=data,headers=headers,cookies=cookies).text 10 else: 11 res = requests.post(url, data=data, headers=headers, cookies=cookies).text 12 except Exception as e: 13 my_log.error('接口请求出错,%s'%e) 14 res = str(e) 15 return res 16 def get(url,data,headers=None,cookies=None): 17 try: 18 res = requests.get(url, params=data, headers=headers, cookies=cookies).text 19 except Exception as e: 20 my_log.error('接口请求出错,%s'%e) 21 res = str(e) 22 return res
复制代码

4.4 tools.py

复制代码
 1 #!/usr/bin/python
 2 # -*- coding:utf-8 -*-  3 # Author:hwm  4 import xlrd,requests,xlutils,yagmail,time  5 from xlutils.copy import copy  6 from config.setting import my_log,MAIL_INFO,TO,CC  7 from lib import my_request  8 def readExcel(file_path):  9 try: 10 book = xlrd.open_workbook(file_path) 11 except Exception as e: 12 my_log.error('打开用例出错,文件名是%s'%file_path) 13 return [] 14 else: 15 all_case = [] #存放所有的用例,二维list 16 sheet = book.sheet_by_index(0) 17 for i in range (1,sheet.nrows): 18 row_data=sheet.row_values(i) #每一行数据,list 19 all_case.append(row_data[4:8]) 20 return all_case 21 def check_res(res:str,check:str):#str只是说明,但并不强制类型 22 new_res = res.replace('": "','=').replace('": ','=') 23 for c in check.split(','): 24 if c not in new_res: 25 return '失败' 26 return '通过' 27 def str_to_dict(s:str,seq='&'): 28 d = {} 29 if s.strip(): 30 for tmp in s.split(seq): 31 k,v = tmp.split('=') 32 d[k]=v 33 return d 34 def run_case(all_case): 35 all_res = [] 36 for case in all_case: 37 url,method,data,check = case 38 my_log.info('正在运行:%s'%url) 39 data = str_to_dict(data) #把请求参数转成字典 40 if method.upper() == 'POST': 41 res = my_request.post(url,data) 42 else: 43 res = my_request.get(url,data) 44 status = check_res(res,check) 45  all_res.append([res,status]) 46 return all_res 47 def write_res(file_name,res_list): 48 book = xlrd.open_workbook(file_name) 49 new_book = copy(book) 50 sheet = new_book.get_sheet(0) 51 for row,data in enumerate(res_list,1): 52 res,status=data #取小List的两个元素 53 sheet.write(row,8,res) #写入响应报文 54 sheet.write(row,9,status) #写入测试结果 55  new_book.save(file_name) 56 def send_email(content,files): 57 mail = yagmail.SMTP(**MAIL_INFO) 58 subject = '%s_接口测试报告' % time.strftime('%Y-%m-%d %H:%M:%S') 59 # 连接上邮箱了 60 mail.send(to=TO, 61 cc=CC, 62 subject=subject, 63 contents=content, 64 attachments=files)
复制代码

4.5 测试用例

转载于:https://www.cnblogs.com/zhezhezhe/p/9797379.html

本课程是接口测试的基础+进阶+高阶的实战精品课程。 老师从多角度、多方位基于Demo进行讲解,力求做到认真细致讲好课程的每一要点。 全方位助力学员掌握接口测试的技术要领,快速跃升为接口测试方面的高手。 Demo具备很好的通用性及移植性,可以快速运用于实际接口测试中。 主讲老师为资深高级技术专家。毕业于电子科技大学。先后工作于多家知名外企,知名通信民企,知名IT公司。◇ 具备区块链领域高级测试解决方案设计、专家级测试开发、团队管理培训经验。◇ 具备专家级自动化测试解决方案、自动化测试平台框架设计开发、自动化测试团队管理培训经验。◇ 具备专家级的功能专项测试、性能专项测试经验及丰富的渗透测试经验。◇ 具备丰富的持续集成/持续交付(CI/CD)开发、实施及运维经验。◇ 具备丰富的C#/Java/Delphi/VB/C++/Python/Tcl/Groovy/Shell等开发及脚本开发经验◇ 具备20年的IT互联网工作经验。先后担任过项目经理,测试技术经理,测试总监以及专家级技术顾问等职务。独立开发完成有如下自动化测试框架及平台◇ GUI自动化测试框架(TSL)◇ ATF自动化测试框架(Tcl/Tk)◇ ATP自动化测试平台(C#/Java)◇ SoapUI接口自动化测试框架(Groovy/华为)◇ 持续集成自动化打包框架(Java/华为)◇ 区块链性能测试框架(Python)等。擅长框架/平台设计开发、团队管理、团队技能提升培训,技术瓶颈突破等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值