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生成报告效果图:

 

posted @   别摸我的马甲线  阅读(416)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示