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

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以戳这里获取

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

2、学习路径:

三、框架流程及逻辑

框架理念:使用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”:{                            – 该条测试用例的断言条件

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以戳这里获取

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

(img-MbBk4cik-1715826420445)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以戳这里获取

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

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python的unittest库提供了一种基于单元测试的测试框架,是一个方便易用的Python测试框架。使用unittest库进行接口自动化测试可以提高测试效率和质量,本文将分享如何使用Python unittest库搭建接口自动化测试框架。 第一步:安装Python unittest库 首先需要安装Python unittest库,Python unittest库是默认安装在Python中的,无需单独安装。 第二步:安装requests模块 接口自动化测试需要使用requests模块来发送HTTP请求、获取响应等操作,因此需要安装requests模块。使用pip安装requests命令如下: pip install requests 第三步:编写测试用例 使用unittest框架编写测试用例,首先需要导入unittest库并创建测试类,编写测试方法,方法名必须以test开头,并使用assert断言方法进行验证。例如: import unittest import requests class TestApi(unittest.TestCase): def test_get_users(self): url = 'http://localhost:8080/api/users' res = requests.get(url) self.assertEqual(res.status_code, 200) self.assertIsNotNone(res.json()) 第四步:执行测试用例 使用unittest框架执行测试用例,使用unittest.main()方法运行所有测试用例。例如: if __name__ == '__main__': unittest.main() 执行测试用例后,将输出测试结果,包括测试用例总数、成功数、失败数等。 第五步:持续集成 持续集成可以帮助实现自动化测试,可以将上述步骤集成到自动化测试框架中,提高测试效率和质量。使用持续集成工具,例如Jenkins,可以实现自动化测试的调度和执行,定期输出测试报告,是测试自动化化的不二选择。 在以上步骤中,请求地址和验证方法需要根据具体需求进行更改,但是编写测试用例的方法是类似的,熟练掌握unittest库可以快速搭建接口自动化测试框架,提高测试效率和质量。 ### 回答2: Python unittest requests 接口自动化测试框架搭建教程博客是指一篇博客文章,介绍如何使用Python unittest与requests搭建接口自动化测试框架。该教程博客有如下几个方面: 1. 简单介绍Python unittest与requests库,以及它们在接口自动化测试中的使用; 2. 详细讲解如何安装Python unittest和requests库,并编写测试用例; 3. 讲解如何通过使用Python unittest的setUp()和tearDown()方法,在测试用例执行前后进行一些操作,以便更好地进行测试; 4. 介绍如何运行测试用例,并查看测试结果,以及如何进行测试报告生成; 5. 提供一些实例,展示如何使用Python unittest与requests搭建接口自动化测试框架。 通过这篇教程博客,读者可以学习如何使用Python unittest与requests搭建接口自动化测试框架,并且能够快速了解并掌握这种接口自动化测试方法的流程和基本方法。此外,该教程博客也提供一些实例,帮助读者更好地理解和应用这种方法。因此,这篇教程博客对于想要学习接口自动化测试以及深入了解Python unittest和requests库的读者来说,是一篇非常有价值的文章。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值