步骤:
需求:从excel读取测试用例 + ddt数据驱动 + 通过unittest运行测试用例 + 生成测试报告
1、读取测试用例
2、写测试用例
3、数据驱动加载测试用例到测试套件
4、测试用例执行
5、对测试结果进行断言
6、生成测试报告
main.py
import os
import unittest
from BeautifulReport import BeautifulReport
dir_path = os.path.dirname(__file__)
suite = unittest.defaultTestLoader.discover(dir_path)
br = BeautifulReport(suites=suite)
br.report(description='py39期DDT学习',filename='testReport1')
test_case.py
import unittest
from functions import *
import ast
from ddt import ddt,data,unpack #unpack 二次解压
case_list = HandleEcxel(filepath='testCase.xlsx', sheet='sheet1').get_data_dict()
login = LoginCase()
@ddt
class Test_login(unittest.TestCase):
@data(*case_list)
def test_login(self,case):
response = login.user_login(url=case['url'], data=ast.literal_eval(case['data']))
response_data = {'code': response['code'], 'msg': response['msg']}
self.assertEqual(ast.literal_eval(case['expected_data']), response_data)
functions.py
import requests
from openpyxl import load_workbook
class LoginCase:
def __init__(self):
self.headers = {"X-Lemonban-Media-Type": "lemonban.v1", "Content-Type": "application/json"}
# 用户登陆
def user_login(self, url, data):
"""
:param url: 接口地址
:param data: 接口参数
:return:
"""
# url = 'http://api.lemonban.com/futureloan/member/login'
# data = {'mobile_phone': '18820992515', 'pwd': 'Aa123456'}
res = requests.post(url=url, json=data, headers=self.headers)
# print(res.json())
return res.json()
# 登陆断言
def login_check(self, expected_data, response_data):
"""
:param expected_data: 预期结果
:param response_data: 响应结果
:return:
"""
# actual_data ={'code':response_data['code'],'msg':response_data['msg']}
if expected_data == response_data:
return 'Pass'
else:
return 'Failed'
class HandleEcxel:
# 初始化excel表名和sheet名
def __init__(self, filepath, sheet):
self.filepath = filepath
self.workbook = load_workbook(filename=filepath)
self.sheetname = self.workbook[sheet]
# 获取data
def get_data(self):
all_datas = list(self.sheetname.iter_rows(values_only=True)) # 返回的值需要转成list
# 将title和数据分开
title = all_datas[0]
datas = all_datas[1:]
return title, datas
# 把data拼接成对应的字典
def get_data_dict(self):
title, datas = self.get_data()
res_list = []
for case in datas:
data_dict = dict(zip(title, case))
res_list.append(data_dict)
self.__close_excel()
return res_list
def write_result(self, row, column, result=None):
self.sheetname.cell(row=row, column=column).value = result
self.__save_excel()
self.__close_excel()
def __save_excel(self):
self.workbook.save(filename=self.filepath)
def __close_excel(self):
self.workbook.close()