pytest+request+allure 接口自动化
"""
实现思路:
1.使用excel文件管理接口自动化测试用例 ----涉及技术点:excel文件内容的读与写;
2.使用pytest.mark.parametrize 将excel中读到的数据参数化后,传入接口请求中
3.调用接口把接口运行后的结果,一次性写入到excel列表中
4.jenkins上集成接口自动化用例并生成allure报告
"""
1.提前准备好excel文件的接口自动化用例,类似如下所示:
2.定义读写excel文件的基础类(read_excel_util.py),代码如下所示:
注意:在读取excel 接口用例数据时,只需要从第二行开始
read_excel_util.py:
1 import xlrd 2 from testcase.basic import get_project_path 3 import pytest 4 from xlutils.copy import copy 5 6 project_path = get_project_path.get_project_path() # 获取项目根目录路径 7 filename = project_path + '/data/' + 'login.xls' # 接口测试用例路径 8 9 10 def read_excel(): 11 work_book = xlrd.open_workbook(filename) 12 work_sheet = work_book.sheet_by_name('login_request') 13 cols = work_sheet.ncols # 每列 14 rows = work_sheet.nrows # 每行 15 list_data = [] 16 for row in range(1, rows): 17 col_list = [] 18 for col in range(1, cols - 1): # cols - 1:表示excel中最后一列”测试结果“的字段为空,不用获取 19 row_value = work_sheet.cell_value(row, col) 20 col_list.append(row_value) 21 list_data.append(col_list) 22 return list_data 23 24 25 def write_excel(col, row, text): 26 ''' excel坐标从(0,0)开始 27 @param col: 行坐标 28 @param row: 行坐标 29 @param text: 内容 30 @return: 31 ''' 32 excel = xlrd.open_workbook(filename, formatting_info=True) # formatting_info=True保留原有的数据格式 33 new_excel = copy(excel) # 将xlrd对象拷贝转换成xlwt对象 34 sheet = new_excel.get_sheet('login_request') # 通过sheet名称获取表格 35 sheet.write(col, row, text) 36 new_excel.save(filename) 37 38 39 @pytest.mark.parametrize('url,method,header,param,respons,excepted', read_excel()) 40 def test(url, method, header, param, respons, excepted): 41 print(url, method, header, param, respons, excepted)
3.接口测试用例(test_requset.py)主体实现:
使用pytest.mark.parametrize 将excel中读到的数据参数化后,传入接口请求中,接口每次运行后均记录运行结果,最后统一一次性将接口运行的结果写入到excel中。
1 import requests 2 import pytest 3 import json 4 import allure 5 from testcase.basic import logging_basic 6 from testcase.request import read_excel 7 8 execl_data = read_excel.read_excel() # 获取接口自动化测试用例数据 9 10 11 @allure.description('用户登录接口测试') 12 @allure.feature('用户登录接口') 13 @pytest.mark.parametrize('url,method,headers,param,respons,excepted', execl_data) 14 class TestRequestCase(object): 15 @allure.title('初始化') 16 def setup_class(self): 17 self.logger = logging_basic.get_logger() 18 # 存放接口运行的结果 19 self.test_result = [] 20 # # 获取基础URL 21 self.base_url = 'http://192.168.10.232:9000' 22 23 @allure.story("用户登录接口用例") 24 @allure.title('登录接口测试用例') 25 def test_request(self, url, method, headers, param, respons, excepted): 26 # 根据不同的接口请求方式,获取对应数据并进行发送请求 27 if method == 'GET': 28 with allure.step('发送Get接口请求'): 29 rs = requests.get(url=self.base_url + url) 30 try: 31 with allure.step('断言响应文本与预期结果'): 32 if rs.status_code == '200': 33 self.logger.info("***测试通过***") 34 self.test_result.append('通过') 35 self.logger.info(self.test_result) 36 else: 37 self.logger.info("***测试失败***") 38 self.test_result.append('失败') 39 self.logger.info(self.test_result) 40 except AssertionError: 41 self.test_result.append('接口异常') 42 self.logger.info(self.test_result) 43 raise self.logger.exception("异常捕获:%s", AssertionError) 44 elif method == 'POST': 45 with allure.step('发送Get接口请求'): 46 rs = requests.post(url=self.base_url + url, json=json.loads(param), 47 headers=json.loads(headers)) 48 resposes_result = rs.json() 49 try: 50 with allure.step('断言响应文本与预期结果'): 51 if resposes_result == json.loads(respons): 52 if resposes_result['msg'] == excepted: 53 self.logger.info("***测试通过***") 54 self.test_result.append('通过') 55 self.logger.info(self.test_result) 56 else: 57 self.logger.info("***测试失败***") 58 self.test_result.append('失败') 59 self.logger.info(self.test_result) 60 except AssertionError: 61 self.test_result.append('接口异常') 62 self.logger.info(self.test_result) 63 raise self.logger.exception("异常捕获:%s", AssertionError) 64 65 # 将接口运行后的结果统一写的到excel表“测试结果”列表中,位于表格中的第七列 66 with allure.step('接口运行结果写入excel表格'): 67 for i in range(len(self.test_result)): 68 read_excel.write_excel(i + 1, 7, self.test_result[i]) # 从第二行开始写,第一行为表头 69 70 71 if __name__ == '__main__': 72 pytest.main(['-vs', 'test_request_case.py']
4.allure生成报告效果图:
本文来自博客园,作者:别摸我的马甲线,转载请注明原文链接:https://www.cnblogs.com/a-wyw/p/16194184.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)