3、接口测试 - 测试架构规划及用例设计

一、 测试架构规划

四文件夹:

  • docs : 主要用于存放 和项目相关的文件;
  • logo : 主要用于存放 项目执行的日志;
  • report : 用于存放报告的 原始数据;
  • data : 用于存放 测试数据;

四包文件 :

  • libs : 用于存放 基本的 代码;
  • configs : 用于存放 配置文件;
  • test_case : 用于存放 测试用例;
  • tools : 用于存放 封装的 工具;

二、接口测试用例设计

  • 编号
  • 模块
  • 接口名称
  • 优先级
  • 标题
  • URL
  • 前置条件
  • 请求方式
  • 请求头
  • 请求参数
  • 预期结果
  • 响应预期结果
  • 实际结果

三、自动化结合excel用例执行

配置:

1
2
3
# configs/confing.py

HOST = 'http://121.41.14.39:8082'

登录:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# libs/login.py

import requests
import hashlib
from configs.config import HOST


def get_md5(password):
# 1- 实例化加密对象
md5 = hashlib.md5()
# 2- 进行加密操作
md5.update(password.encode('utf-8'))
# 3- 返回加密后的结果
return md5.hexdigest()


class Login: # 登录类
def login(self, inData, getToken=False):
url = f'{HOST}/account/sLogin'
# 请求体----字典格式编辑
# 调用加密函数 字典修改值: 字典名【键名】 = 新的值
inData['password'] = get_md5(inData['password'])
payload = inData # 可以不写
resp = requests.post(url, data=payload)
if getToken: # 获取token
return resp.json()['data']['token'] # token值
else:
return resp.json() # 接口的响应数据

读取、写入文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# tools/excelControl.py

import xlrd # 要安装的第三库 pip install xlrd
import json

def get_excelData(sheetName, caseName):
resList = [] # 存放结果
excelDir = '../data/外卖系统接口测试用例-V1.5.xls'
# formatting_info=True 保持原表样式
workBook = xlrd.open_workbook(excelDir, formatting_info=True)
workSheet = workBook.sheet_by_name(sheetName)
idx = 0 # excel第0行数据
for one in workSheet.col_values(0): # 6次
if caseName in one: # 运行你需要运行的测试用例
reqBodyData = workSheet.cell(idx, 9).value # cell(行号,列号).value
respData = workSheet.cell(idx, 11).value # cell(行号,列号).value
resList.append((json.loads(reqBodyData), json.loads(respData)))
idx += 1 # 轮询下一行数据
return resList


# 新建空的excel xlwt
from xlutils.copy import copy # 拷贝函数

def set_excelData(sheetIndex):
excelDir = '../data/外卖系统接口测试用例-V1.5.xls'
# formatting_info=True 保持原表样式
workBook = xlrd.open_workbook(excelDir, formatting_info=True)
workBookNew = copy(workBook)
workSheetNew = workBookNew.get_sheet(sheetIndex) # 打开复制的excel其中一个表--登录模块
return workBookNew, workSheetNew

执行测试用例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# test_case/test_login.py

# 1、读取excel数据
from tools.excelControl import get_excelData, set_excelData
from lib.apiLib.login import Login

workBookNew, workSheetNew = set_excelData(0) # 复制出来的表文件对象,子表对象
resList = get_excelData('登录模块', 'Login')
for one in resList: # [(body1,resp1),(),()]
print(one)
# 2- 把excel读取的数据关联到请求代码里

for one in range(0, len(resList)): # one---012345
res = Login().login(resList[one][0]) # 传入对应行的body
print(res)
# 3-实际与预期相对比,结果写入测试结果到excel----做判断--断言
if res['msg'] == resList[one][1]['msg']:
# 写入成功!
workSheetNew.write(one + 1, 12, 'pass') # workSheetNew.write(行号,列号,值)
else:
# 写入没有成功!
workSheetNew.write(one + 1, 12, 'fail') # workSheetNew.write(行号,列号,值)
workBookNew.save('./res.xls')

四、 扩展操作 —- 增加脚本模板

1
2
3
4
5
6
7
8
"""
-*-coding : UTF-8 -*-
@File : ${NAME}.py
@Time : ${DATE} ${TIME}
@Author : Pupper
@Email : Pupper.cheng@gmail.com
@Software : ${PRODUCT_NAME}
"""