微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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:

import xlrd
from testcase.basic import get_project_path
import pytest
from xlutils.copy import copy

project_path = get_project_path.get_project_path() # 获取项目根目录路径
filename = project_path + '/data/' + 'login.xls' # 接口测试用例路径


def read_excel():
work_book = xlrd.open_workbook(filename)
work_sheet = work_book.sheet_by_name('login_request')
cols = work_sheet.ncols # 每列
rows = work_sheet.nrows # 每行
list_data = []
for row in range(1, rows):
col_list = []
for col in range(1, cols - 1): # cols - 1:表示excel中最后一列”测试结果“的字段为空,不用获取
row_value = work_sheet.cell_value(row, col)
col_list.append(row_value)
list_data.append(col_list)
return list_data


def write_excel(col, row, text):
''' excel坐标从(0,0)开始
@param col: 行坐标
@param row: 行坐标
@param text: 内容
@return:
'''
excel = xlrd.open_workbook(filename, formatting_info=True) # formatting_info=True保留原有的数据格式
new_excel = copy(excel) # 将xlrd对象拷贝转换成xlwt对象
sheet = new_excel.get_sheet('login_request') # 通过sheet名称获取表格
sheet.write(col, row, text)
new_excel.save(filename)


@pytest.mark.parametrize('url,method,header,param,respons,excepted', read_excel())
def test(url, method, header, param, respons, excepted):
print(url, method, header, param, respons, excepted)

3.接口测试用例(test_requset.py)主体实现:

使用pytest.mark.parametrize 将excel中读到的数据参数化后,传入接口请求中,接口每次运行后均记录运行结果,最后统一一次性将接口运行的结果写入到excel中。

import requests
import pytest
import json
import allure
from testcase.basic import logging_basic
from testcase.request import read_excel

execl_data = read_excel.read_excel() # 获取接口自动化测试用例数据


@allure.description('用户登录接口测试')
@allure.feature('用户登录接口')
@pytest.mark.parametrize('url,method,headers,param,respons,excepted', execl_data)
class TestRequestCase(object):
@allure.title('初始化')
def setup_class(self):
self.logger = logging_basic.get_logger()
# 存放接口运行的结果
self.test_result = []
# # 获取基础URL
self.base_url = 'http://192.168.10.232:9000'

@allure.story("用户登录接口用例")
@allure.title('登录接口测试用例')
def test_request(self, url, method, headers, param, respons, excepted):
# 根据不同的接口请求方式,获取对应数据并进行发送请求
if method == 'GET':
with allure.step('发送Get接口请求'):
rs = requests.get(url=self.base_url + url)
try:
with allure.step('断言响应文本与预期结果'):
if rs.status_code == '200':
self.logger.info("***测试通过***")
self.test_result.append('通过')
self.logger.info(self.test_result)
else:
self.logger.info("***测试失败***")
self.test_result.append('失败')
self.logger.info(self.test_result)
except AssertionError:
self.test_result.append('接口异常')
self.logger.info(self.test_result)
raise self.logger.exception("异常捕获:%s", AssertionError)
elif method == 'POST':
with allure.step('发送Get接口请求'):
rs = requests.post(url=self.base_url + url, json=json.loads(param),
headers=json.loads(headers))
resposes_result = rs.json()
try:
with allure.step('断言响应文本与预期结果'):
if resposes_result == json.loads(respons):
if resposes_result['msg'] == excepted:
self.logger.info("***测试通过***")
self.test_result.append('通过')
self.logger.info(self.test_result)
else:
self.logger.info("***测试失败***")
self.test_result.append('失败')
self.logger.info(self.test_result)
except AssertionError:
self.test_result.append('接口异常')
self.logger.info(self.test_result)
raise self.logger.exception("异常捕获:%s", AssertionError)

# 将接口运行后的结果统一写的到excel表“测试结果”列表中,位于表格中的第七列
with allure.step('接口运行结果写入excel表格'):
for i in range(len(self.test_result)):
read_excel.write_excel(i + 1, 7, self.test_result[i]) # 从第二行开始写,第一行为表头


if __name__ == '__main__':
pytest.main(['-vs', 'test_request_case.py']

4.allure生成报告效果图:

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐