一、接口自动化测试框架

二、项目
2.1 配置层
2.1.1 环境变量:通过加载.env的方式
建议数据库相关配置、base_url、常用用户数据等配置在环境变量中
- 在自动化测试项目的根目录中,创建 .env 文件,将敏感数据信息放置到其中,存储采用 name=value 的格式
DB_HOST=×××
DB_USER=×××
DB_PASSWORD=×××
USERNAME=×××
BASE_URL=×××
- 引用方式分为两种,一种是直接在yaml中引用,一种在debugtalk.py中引用
# 直接在yaml中引用
config:
name: ×××
variables:
username: ${ENV(USERNAME)}
base_url: ${ENV(BASE_URL)}
teststeps:
- name: checkUserRole
request:
json:
oaAccount: $username
method: POST
url: ×××
# 配置在debugtalk中
def base_url():
"""
base_url
:return:
"""
return os.environ['BASE_URL']
2.1.2 测试数据
秉持维护成本最小的原则,测试数据要与测试用例分离,后续如果接口api不发生变化,直接修改测试数据即可
- 测试数据可以和测试用例分开存放,测试用例放在testcase下,测试数据建议放在testdata下
- 测试数据建议通过redis、数据库或者上下级用例关联获取,不要写死
2.2 用例层
官方文档给出的用例模板如下所示,建议在此基础上进行优化,按照数据分离的原则,参数化配置用例,维护成本越小越好。
config:
name: xxx
variables: # config variables
varA: "configA"
varB: "configB"
varC: "configC"
parameters: # parameter variables
varA: ["paramA1"]
varB: ["paramB1"]
teststeps:
-
name: step 1
variables: # step variables
varA: "step1A"
request:
url: /$varA/$varB/$varC # varA="step1A", varB="paramB1", varC="configC"
method: GET
extract: # extracted variables
varA: body.data.A # suppose varA="extractVarA"
varB: body.data.B # suppose varB="extractVarB"
-
name: step 2
varialbes:
varA: "step2A"
request:
url: /$varA/$varB/$varC # varA="step2A", varB="extractVarB", varC="configC"
method: GET
优化后:
config:
name: xxx
base_url: ${base_url()} # 为方便后续多环境配置
variables:
varA: "configA" # 建议此处的数据通过debugtalk.py读取,不要写死
teststeps:
- name: xxx
request:
method: POST
url: xxx
json:
field: $varA
setup_hooks:
- ${headers($request)} # 建议此处的数据通过debugtalk.py读取,方面后续灵活配置
extract: # 提取返回结果
varB: body.data.B # suppose varB="extractVarB"
validate: # 断言
- eq: ["status_code", 200]
- eq: [json.code, "200"]
- eq: [json.message, 查询成功]
- name: step 2
varialbes:
varA: "step2A"
request:
url: /$varA/$varB/$varC # varA="step2A", varB="extractVarB", varC="configC"
method: GET
validate: # 断言
- eq: ["status_code", 200]
2.3 测试报告
2.3.1 pytest内置html测试报告
使用方法: --html=path create html report file at given path.
# 终端执行
hrun testcases --html==/report/0422.html

2.3.2 allure测试报告
终端执行
hrun testcases --alluredir=allure_results
allure generate --clean allure_results -o report/html
或者创建run.py文件
# _._ coding: utf-8 _._
import subprocess
subprocess.call("hrun testcases --alluredir=allure_results", shell=True)
subprocess.call("allure generate --clean allure_results -o report/html", shell=True)

三、最后附上项目的目录结构图及说明

网友评论