Pytest+requests+allure+excel+log+mail如何实现接口自动化
时间: 2023-07-27 13:06:23 浏览: 189
要实现接口自动化,可以按照以下步骤进行:
1. 安装pytest、requests、allure、openpyxl、logbook、smtplib等Python库。
2. 创建一个测试用例文件,使用pytest框架编写测试用例,使用requests库发送接口请求,使用openpyxl库读取Excel文件中的测试数据。
3. 使用allure框架生成测试报告,可以通过命令行或pytest.ini配置文件进行配置。
4. 使用logbook库记录测试过程中的日志信息,可以将日志保存到文件或发送到邮件。
5. 使用smtplib库发送测试结果邮件,可以将测试报告、日志等信息一并发送。
下面是一个简单的示例代码,可以根据自己的需求进行修改:
```
import pytest
import requests
import openpyxl
import allure
import logbook
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
# 创建日志记录器
logger = logbook.Logger('API Test')
# 读取Excel文件中的测试数据
def read_test_data(filename, sheetname):
wb = openpyxl.load_workbook(filename)
sheet = wb[sheetname]
data = []
for row in sheet.iter_rows(min_row=2):
case = {}
case['name'] = row[0].value
case['url'] = row[1].value
case['method'] = row[2].value
case['headers'] = eval(row[3].value)
case['params'] = eval(row[4].value)
case['expected'] = eval(row[5].value)
data.append(case)
return data
# 发送接口请求
def send_request(url, method, headers, params):
if method == 'get':
res = requests.get(url, headers=headers, params=params)
elif method == 'post':
res = requests.post(url, headers=headers, json=params)
else:
logger.error('Invalid request method')
res = None
return res
# 编写测试用例
@allure.feature('API Test')
@pytest.mark.parametrize('case', read_test_data('test_data.xlsx', 'Sheet1'))
def test_api(case):
logger.info(f"Test case: {case['name']}")
with allure.step(f"Send {case['method'].upper()} request to {case['url']}"):
res = send_request(case['url'], case['method'], case['headers'], case['params'])
with allure.step('Verify response'):
assert res.json() == case['expected']
# 生成测试报告
@pytest.fixture(scope='session', autouse=True)
def attach_report():
yield
allure_cmd = 'allure generate allure-results --clean -o allure-report'
os.system(allure_cmd)
# 发送邮件
def send_mail():
# 邮件内容
msg = MIMEMultipart()
msg['Subject'] = 'API Test Report'
msg['From'] = 'sender@example.com'
msg['To'] = 'receiver@example.com'
text = MIMEText('Please check the attachment for API test report')
msg.attach(text)
with open('allure-report.zip', 'rb') as f:
report = MIMEApplication(f.read(), 'zip')
report.add_header('Content-Disposition', 'attachment', filename='API Test Report.zip')
msg.attach(report)
# 发送邮件
smtp_server = 'smtp.example.com'
smtp_port = 25
smtp_user = 'sender@example.com'
smtp_password = 'password'
server = smtplib.SMTP(smtp_server, smtp_port)
server.login(smtp_user, smtp_password)
server.sendmail('sender@example.com', 'receiver@example.com', msg.as_string())
server.quit()
# 在测试结束后发送邮件
def pytest_terminal_summary(terminalreporter):
if terminalreporter.failed:
logger.error('API Test failed')
else:
logger.info('API Test passed')
send_mail()
```
这个示例代码中,使用了pytest框架编写测试用例,使用allure框架生成测试报告,使用logbook库记录日志信息,使用smtplib库发送邮件。在编写测试用例时,使用了openpyxl库读取Excel文件中的测试数据,使用requests库发送接口请求。在测试结束后,通过pytest_terminal_summary钩子发送邮件,将测试报告、日志等信息发送给指定的邮箱。
阅读全文