第三节 Pytest实现数据驱动

文章介绍了如何在Python测试框架Pytest中使用`@pytest.mark.parametrize`进行参数化测试,包括单个参数和多个参数的用法。同时,展示了如何读取Excel数据并应用于测试用例中。在测试用例执行过程中,使用Selenium进行网页操作,Login页面的登录功能被测试,并通过Allure生成测试报告。当测试失败时,程序会保存错误截图并添加到报告中。
摘要由CSDN通过智能技术生成

方法:@pytest.mark.prameterize(args_name,arge_value)

args_name:参数名

args_value:参数值(一般为list,tuple,字典列表,字典元组等)有多少个值,用例执行多少次。

import pytest


class TestLoge:

    @pytest.mark.parametrize('args', ['admin', 'ceshi', 'test'])
    # 一个变量
    def test_loging1(self, args):
        print(args)
    # 多个变量
    @pytest.mark.parametrize('name1, name2, name3', [['admin1', 'ceshi1', 'test1'], ['admin2', 'ceshi2', 'test2']])
    def test_loging2(self, name1, name2, name3):
        print(name1, name2, name3)

Excel读取:xlrd,openpyxl

import openpyxl


def read_excel(excel_url, sheet_name):
    # 加载Excel
    wb = openpyxl.load_workbook(excel_url)
    # 获取sheet的数据
    sheet = wb[sheet_name]
    # print(sheet)
    # 打印sheet最大行数和列数
    # print(sheet.max_row, sheet.max_column)
    # 读取Excel数据,组成列表格式的数据。
    # 行数循环
    row_list = []
    # 从第二行开始获取Excel数据:2, sheet.max_row + 1
    for row in range(2, sheet.max_row + 1):
        # print(row)
        col_list = []
        if sheet.cell(row, 5).value == 'y':
        # 获取每一行数据
            for col in range(1, sheet.max_column + 1):
                # print(' '+str(col))
                # 把每行数据按照列组成列表
                col_list.append(sheet.cell(row, col).value)
            # print(col_list)
            # 把每一行数据按照列组成嵌套列表
            row_list.append(col_list)
    print(row_list)
    return row_list


if __name__ == '__main__':
    read_excel('./testcase.xlsx', 'test_01_login')

用例层代码修改:

import time
import allure
import pytest
from selenium import webdriver
from login_page import LoginPage
from excel_util import read_excel
# import unittest


class TestLogin:

    def setup_class(self):
        self.driver = webdriver.Chrome()
        self.driver.implicitly_wait(3)

    def tearDown(self) -> None:
        time.sleep(1)

    @pytest.mark.parametrize('caseinfo', read_excel('./Utest/testcase.xlsx', 'test_01_login'))
    def test_01_login(self, caseinfo):
        try:
            lp = LoginPage(self.driver)
            lp.login_ecshop(caseinfo[2], caseinfo[3])

            # 断言 1 =2
            # assert 1 == 2
        except Exception as e:
            # 报存错误截图
            file_path = r".\error_image\login.png"
            self.driver.save_screenshot(file_path)
            # 把错误截图加入到allure报告
            with open(file_path, mode='rb') as f:
                allure.attach(f.read(), 'login.png', allure.attachment_type.PNG)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值