今天我要和大家分享如何用Python实现一个简单但实用的自动化测试工具。
作为一名测试工程师,我深知手动测试的繁琐和inefficient。
通过这篇文章,我将带领大家一步步构建一个基础的自动化测试框架,让测试工作事半功倍!
1. 项目概述与环境准备
首先我们需要安装以下依赖:
pip install pytest
pip install requests
pip install PyYAML
2. 核心框架设计
我们的测试框架将包含以下核心功能:
测试用例管理
HTTP接口测试
测试报告生成
让我们先创建基础框架结构:
from typing import Dict
import pytest
import requests
import yaml
class TestRunner:
def __init__(self):
self.test_cases = []
self.results = []
def load_test_cases(self, yaml_file: str):
“”“从YAML文件加载测试用例”“”
with open(yaml_file) as f:
self.test_cases = yaml.safe_load(f)
def run_test(self, test_case: Dict):
“”“执行单个测试用例”“”
try:
response = requests.request(
method=test_case['method'],
url=test_case['url'],
headers=test_case.get('headers', {}),
json=test_case.get('body', {})
)
return self._verify_response(response, test_case['expect'])
except Exception as e:
return False, str(e)
3. 测试用例配置
我们使用YAML格式来管理测试用例,更直观易读:
- name: “测试登录接口”
method: “POST”
url: “http://api.example.com/login”
headers:
Content-Type: “application/json”
body:
username: “test_user”
password: “password123”
expect:
status_code: 200
response:
code: 0
msg: “success”
- name: “测试获取用户信息”
method: “GET”
url: “http://api.example.com/user/info”
headers:
Authorization: “Bearer {token}”
expect:
status_code: 200
4. 结果验证与报告生成
添加验证响应和生成报告的功能:
def _verify_response(self, response, expect):
“”“验证响应结果”“”
if response.status_code != expect['status_code']:
return False, f“状态码不匹配,期望{expect['status_code']},实际{response.status_code}”
if 'response' in expect:
for key, value in expect['response'].items():
if response.json().get(key) != value:
return False, f“响应内容不匹配: {key}”
return True, “测试通过”
def generate_report(self):
“”“生成测试报告”“”
total = len(self.results)
passed = len([r for r in self.results if r['result']])
failed = total - passed
report = f“”“
测试报告
====================
总用例数: {total}
通过数: {passed}
失败数: {failed}
通过率: {(passed/total)*100:.2f}%
”“”
return report
5. 使用示例
# 创建测试运行器实例
runner = TestRunner()
# 加载测试用例
runner.load_test_cases('test_cases.yaml')
# 执行测试
for case in runner.test_cases:
runner.results.append({
'name': case['name'],
'result': result,
'message': message
})
# 生成报告
print(runner.generate_report())
小贴士:
测试用例编写时要注意覆盖各种场景,包括正常流程和异常情况
可以使用环境变量来管理不同环境的配置
建议加入日志记录功能,方便问题定位
总结
今天我们完成了一个基础的自动化测试框架,它虽然简单,但包含了自动化测试的核心要素。你可以在这个基础上扩展更多功能,比如:
添加数据库验证
支持更多协议测试
实现并发执行
集成CI/CD
小伙伴们,今天的Python学习之旅就到这里啦!记得动手实践,把代码跑起来,遇到问题随时在评论区问我。祝大家测试开发之路一帆风顺!
点赞分享
每天学习新知识
领取专属 10元无门槛券
私享最新 技术干货