一、整体结构
- 框架组成:pytest+requests+allure
- 设计模式:
- 关键字驱动
- 项目结构:
- 工具层:api_keyword/
- 参数层:params/
- 用例层:case/
- 数据驱动:data_driver/
- 数据层:data/
- 逻辑层:logic/
二、具体步骤及代码
1、工具层
将get、post等常用行为进行二次封装。
代码(api_key.py)如下:
import allure
import json
import jsonpath
import requests
# 定义一个关键字类
class ApiKey:
# 将get请求行为进行封装
@allure.step("发送get请求")
def get(self, url, params=None, **kwargs):
return requests.get(url=url, params=params, **kwargs)
# 将post请求行为进行封装
@allure.step("发送post请求")
def post(self, url, data=None, **kwargs):
return requests.post(url=url, data=data, **kwargs)
# 由于接口之间可能相互关联,因此下一个接口需要上一个接口的某个返回值,此处采用jsonpath对上一个接口返回的值进行定位并取值
@allure.step("获取返回结果字典值")
def get_text(self, data, key):
# json数据转换为字典
json_data = json.loads(data)
# jsonpath取值
value = jsonpath.jsonpath(json_data, '$..{0}'.format(key))
return value[0]
- 其中引用allure.step()装饰器进行步骤详细描述,使测试报告更加详细。
- 使用jsonpath对接口的返回值进行取值。
2、数据层
数据采用yaml文件。
代码(user.yaml)如下:
-
user:
username: admin
password: '123456'
msg: success
title: 输入正确账号、密码,登录成功
-
user:
username: admin1
password: '1234561'
msg: 用户名或密码错误
title: 输入错误账号1、密码1,登录失败
-
user:
username: admin2
password: '1234562'
msg: 用户名或密码错误
title: 输入错误账号2、密码2,登录失败
- 其中title是为了在用例进行时动态获取参数生成标题。
3、数据驱动层
对数据进行读写。
代码(yaml.driver.py)如下:
import yaml
def load_yaml(path):
file = open(path, 'r', encoding='utf-8')
data = yaml.load(file, Loader=yaml.FullLoader)
return data
4、参数层
参数层存放公共使用的