目录
前言:
一、框架介绍
本框架包含两个部分:
本框架的构建目标是:
二、框架目录结构
三、规范YAML测试用例封装步骤
四、框架使用
五、总结
前言:
本文介绍了一个基于Python和PyTest的接口自动化框架封装项目实战,重点是如何规范YAML测试用例的封装。在这个项目中,我们将介绍如何使用PyTest和YAML文件来管理和执行接口测试用例,并结合Python编写的封装HTTP请求的库进行测试用例执行,从而实现一个简单易用的接口自动化测试框架。
一、框架介绍
本框架包含两个部分:
1. PyTest测试框架:PyTest是Python中非常流行的一个测试框架,它非常容易上手,支持自定义的fixture、测试用例的参数化等,能够满足大多数测试需求。使用PyTest可以提高测试的可读性、可运行性和可维护性。
2. 封装HTTP请求的库:本框架使用Python requests库来封装HTTP请求,它是Python中常用的HTTP库,使用方便,提供了多种发送HTTP请求的方式,可以轻松地实现GET、POST、PUT、DELETE等HTTP请求。
本框架的构建目标是:
1. 提高测试用例的可读性和可维护性;
2. 优化测试用例的运行效率;
3. 封装HTTP请求,让测试用例的编写变得更加简单。
二、框架目录结构
1. tests目录:用于存放测试用例;
2. common目录:封装了HTTP请求的代码和其他共享的辅助代码;
3. config目录:存放配置文件;
4. report目录:存放测试报告,以HTML格式生成。
三、规范YAML测试用例封装步骤
本框架使用YAML文件来管理和执行测试用例,YAML文件是一种简单的文本格式,易于阅读和编写。下面是实现规范的YAML测试用例封装的步骤:
1. 编写config.py文件,定义基础url等配置参数
class Config:
base_url = 'http://127.0.0.1:5000'
2. 编写封装HTTP请求的库common/http_request.py,使用requests库封装HTTP请求和响应
import requests
class HTTPRequest:
def __init__(self, url, method, headers=None, params=None, json=None, data=None, files=None):
self.response = None
if method.upper() == 'GET':
self.response = requests.get(url, headers=headers, params=params)
elif method.upper() == 'POST':
self.response = requests.post(url, headers=headers, json=json, data=data, files=files)
elif method.upper() == 'PUT':
self.response = requests.put(url, headers=headers, json=json, data=data, files=files)
elif method.upper() == 'DELETE':
self.response = requests.delete(url, headers=headers, json=json, data=data, files=files)
# 不同的报错信息打印不同的内容
try:
self.response.raise_for_status()
except requests.exceptions.HTTPError:
print(f"HTTP请求返回码错误,错误码为{self.response.status_code}")
except requests.exceptions.Timeout:
print("HTTP请求超时")
except requests.exceptions.ConnectionError:
print("HTTP请求连接失败")
def json(self):
return self.response.json()
def text(self):
return self.response.text
3. 编写common/utils.py文件,定义一些共用的方法,比如日志输出、响应结果断言等
import logging
class Assert:
@staticmethod
def assert_code(response, expected_code):
try:
assert response.status_code == expected_code
except AssertionError:
logging.error(f"预期结果为 {expected_code}, 实际结果为 {response.status_code}")
raise
@staticmethod
def assert_in_text(response, expected_str):
try:
assert expected_str in response.text
except AssertionError:
logging.error(f"string:{expected_str} not in {response.text}")
raise
def get_logger():
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
handler = logging.StreamHandler()
handler.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
return logger
4. 编写tests/conftest.py文件,定义pytest fixture
import pytest
from common.http_request import HTTPRequest
from config.config import Config
@pytest.fixture(scope='session')
def url():
return Config.base_url
@pytest.fixture(scope='session')
def http():
return HTTPRequest
5. 编写测试用例YAML文件,以下是一个简单的例子:
- testcase: "测试获取产品列表API"
url: "/api/products"
method: "GET"
params:
current_page: 1
page_size: 10
expect:
- code: 200
- in_text: "成功"
6. 编写tests/test_products.py文件,测试用例文件
import pytest
import allure
from common.utils import get_logger, Assert
from config.config import Config
@pytest.mark.usefixtures("http", "url")
class TestProducts:
@allure.title("测试获取产品列表API")
@pytest.mark.smoke
def test_get_products(self, http, url):
case_path = Config.test_data_path.joinpath("get_products.yml")
# 读取YAML测试用例
case = http.load_yaml(case_path)
# 发送HTTP请求
response = http(url=url+case['url'], method=case['method'], params=case['params'])
# 响应结果断言
Assert.assert_code(response, case['expect'][0]['code'])
Assert.assert_in_text(response, case['expect'][1]['in_text'])
7. 编写common/http_request.py文件中的load_yaml方法,用于从YAML文件中读取测试用例
import yaml
class HTTPRequest:
...
@staticmethod
def load_yaml(file_path):
with open(file_path, encoding='utf-8') as f:
test_data = yaml.safe_load(f)
return test_data
四、框架使用
在项目根目录下运行以下命令:
1. 安装必要的Python库
pip install -r requirements.txt
2. 执行测试用例
pytest --html=./report/report.html
运行成功后,在report目录下会生成测试报告。
五、总结
本文介绍了一个基于Python和PyTest的接口自动化框架封装项目实战,主要介绍了如何规范YAML测试用例的封装。
该框架具有以下几个优点:
1. 提高测试用例的可读性和可维护性;
2. 优化测试用例的运行效率;
3. 封装HTTP请求,让测试用例的编写变得更加简单。
但是该框架也存在一些缺点,比如使用YAML文件来管理和执行测试用例的时候有一定的入门门槛,需要花费一定的时间和精力去学习。
总体来说,该框架非常适用于中小型接口自动化测试项目,可快速构建一个简单易用的接口自动化测试框架。
作为一位过来人也是希望大家少走一些弯路,在这里我给大家分享一些自动化测试的经验必须品,如果你用得到的话可以直接拿走,希望能对你带来帮助。(包括Python编程、WEB自动化测试、app自动化测试、接口自动化测试、持续集成、自动化测试开发、性能测试、安全测试、大厂面试真题、简历模板等等),相信能使你更好的进步!
获取方式:留言【自动化测试】即可获取
【自动化测试交流】:574737577(进群备注ccc)http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=Dp4NVlFJbLm9cvGksiqeMjMqUah9R5dO&authKey=IUKh2O1tDD1pJQwar9eC6X%2BC9Fgmzyg%2FwoITLtMgqEkcmCHhr6lM8kL3o8dS6vSu&noverify=0&group_code=574737577