Python3+requests搭建接口自动化测试框架_python3 import requests

框架理念:使用json文件编写测试用例,建一个脚本循环读取测试用例并执行,然后对比返回的接口和用例中的期望结果。将测试结果写入到一个excel表格中生成测试报告,最后使用发送邮件功能将测试报告发送到指定邮箱。其中对所有公共方法进行封装并放在common公共文件目录下。        

四、各模块介绍

----interface_test                             项目文件夹目录

----common                                存放公共方法目录

----__init__.py                    初始化文件

----conf.py                          操作配置文件相关方法

----excelaction.py                Excel文件相关操作方法

----jsonaction.py                 Json文件相关操作方法

----logger.py                       记录日志的相关方法

----newfile.py                      获取最新文件的相关方法

----sendmail.py                   发送报告到指定邮箱的相关方法

----signture.py                    对数据进行签名的相关方法

----userinfo.py                    获取用户信息的相关方法

----config_test.conf             基本配置文件

----logs                                       存放日志的目录

----report                                    存放测试报告的目录

----test_data                                存放测试用例数据的目录

----login-1.json                    登录接口的测试用例数据

----logout-2.json                  退出登录接口的测试用例数据

----execute_test.py                       读取测试用例并执行测试用例

----test.bat                                    运行测试项目的批处理文件

execute_test.py 主要程序

1 # -- coding: utf-8 --
2 #!/usr/bin/env python
3 import os
4 import json
5 import requests
6 import common.conf as conf
7 import common.excelaction as excelaction
8 from common.sendemail import sendreport
9 from common.signture import sign
10 import common.userinfo as userinfo
11 import common.logger as logger
12 import sys
13 import time
14
15 #data_path = os.path.dirname(file) + ‘\test_data\’ # 测试用例数据文件所在目录
16 data_path = conf.testdata_path
17
18 test_reports = [] # 添加一个数组用来存储测试结果
19 for file in os.listdir(data_path): # 循环读取目录下的文件
20 child = os.path.join(‘%s%s’%(data_path,file)) # 将文件名和路径拼接好
21 logger.info(“当前打开的文件:”+child)
22 fl = open(child) # 打开文件
23 try:
24 cases = json.load(fl)
25 for key in cases: # 循环读取文件中的测试用例(case)
26 start_time = time.clock()
27 case = cases[key]
28 url = conf.get_conf(‘module’,case[‘module’]) + case[‘url’]
29 data = case[‘data’]
30 data[‘Platform’] = conf.get_conf(‘params’,‘Platform’)
31 data[‘Terminal’] = conf.get_conf(‘params’,‘Terminal’)
32 data[‘UserIP’] = conf.get_conf(‘params’,‘UserIP’)
33 data[‘Version’] = conf.get_conf(‘params’,‘Version’)
34 if “UserToken” in data and data[‘UserToken’] == ‘’:
35 data[‘UserToken’] = userinfo.get_token()
36 hope_result = case[‘assert’]
37 method = case[‘method’]
38 test_report = {
39 “case_id”:case[‘id’],
40 “t_name”:case[‘name’],
41 “method”:method,
42 “url”:url,
43 “params”:data,
44 “hope_result”:hope_result,
45 “actual_result”:[],
46 “test_result”:“”
47 }
48 try:
49 if method == ‘post’:
50 addsign_data = sign(data,conf.get_conf(‘sign’,‘api_key’))
51 r = requests.post(url,data=json.dumps(addsign_data),headers=conf.header)
52 response = r.json()
53 s = True
54 for k in hope_result:
55 ar = str(k) + “:” + str(response[k])
56 test_report[“actual_result”].append(ar)
57 if type(hope_result[k]) == type(‘’):
58 if hope_result[k] in response[k]:
59 s = s&True
60 else:
61 s = s&False
62 else:
63 if hope_result[k] == response[k]:
64 s = s&True
65 else:
66 s = s&False
67 if s:
68 test_report[“test_result”] = “PASS”
69 else:
70 test_report[“test_result”] = “Fail”
71
72 elif method == ‘get’:
73 addsign_data = sign(data,conf.get_conf(‘sign’,‘api_key’))
74 r = requests.get(url,params=addsign_data,headers=conf.header)
75 response = r.json()
76 s = True
77 for k in hope_result:
78 ar = str(k) + “:” + str(response[k])
79 test_report[“actual_result”].append(ar)
80 if type(hope_result[k]) == type(‘’):
81 if hope_result[k] in response[k]:
82 s = s&True
83 else:
84 s = s&False
85 else:
86 if hope_result[k] == response[k]:
87 s = s&True
88 else:
89 s = s&False
90 if s:
91 test_report[“test_result”] = “PASS”
92 else:
93 test_report[“test_result”] = “Fail”
94
95 else:
96 print(u’暂不支持该请求方式’)
97 test_reports.append(test_report)
98 end_time = time.clock()
99 str_time = ‘当前执行的用例:’ + key + ‘_’*4 + ‘用例执行所用时间:’ + str(end_time- start_time) + ‘s’
100 logger.info(str_time)
101 except:
102 error_msg = sys.exc_info()
103 logger.error(error_msg)
104 continue
105 except:
106 error_msg = sys.exc_info()
107 logger.error(error_msg)
108 continue
109
110 excelaction.creat_report(test_reports) #生成测试报告
111 sendreport() #发送测试报告

五、具体使用

1、在配置文件做对应项目的基础配置

[email] – 邮箱相关配置

sender = ***@163.com – 发件邮箱

receiver = ***@163.com – 收件邮箱

smtpserver = smtp.163.com – 发件邮箱服务器

username = ***@163.com – 发件邮箱账户名

password = **** – 发件邮箱密码(用于第三方登录的秘密)

[module] – 模块相关接口域名配置

passport = http://passport.XXX.com/ – 对应模块接口域名

[sign] – 签名相关的配置

api_key = XXX-XXX – 生成签名的key(填写项目对应的key)

[params] – 接口参数配置(配置公共参数)

Platform = 1 – 根据对应项目配置对应的公共参数和对应值

2、在test_data文件夹内用json文件写测试用例和对应参数

“case1”:{
“name”:“登录接口_测试正常登录”,        – 接口名称(或者接口简介)
“module”:“passport”,                – 接口所属模块
“url”:“/api/Passport/Login”,            – 接口地址(完整地址由模块对应域名+该地址拼接)
“method”:“post”,                    – 接口请求方式
“id”:“1-001”,                        – 用例ID
“data”:{                            – 接口请求参数(请求时由该参数加公共参数)
“UserName”:“XXX”,                – 接口请求参数(根据具体接口补充,如果接口需要token则需要加token关键字(值为空就行),接口请求时会自动根据参数生成Sign,如果想自己定义则需要加Sign关键字(值填写自己定义的))
},
“assert”:{                            – 该条测试用例的断言条件
“Status”:200,                    – 具体的断言条件,需要返回状态为200
“Message”:“登录成功”            – 具体的断言条件
}
}
3、配置好基础配置和编写完测试用例后,运行项目中的test.bat文件。运行完成后会在report文件夹内生成测试报告文件,在logs文件夹内会生成测试运行过程中的记录日志和报错日志(如果有)。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数软件测试工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年软件测试全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上软件测试开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注软件测试)
img

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注软件测试)
[外链图片转存中…(img-FSenzixP-1712908750731)]

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值