ddt实战

步骤:
需求:从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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值