Есть ли в Python Pytest что-то похожее на Java TestNG DataProvider? Как Pytest обрабатывает данные Excel? - PullRequest
0 голосов
/ 01 июня 2019

Обновил вопрос и код еще раз, чтобы отразить последние изменения.Amit Я попробовал ваше предложение и обнаружил ошибку.Попытка заставить openpyxl считывать дату из каждого листа Excel в рабочей книге, передавая имя теста, но он продолжает терпеть неудачу с не может найти фикстуру имени теста.Можете ли вы посоветовать, где я ошибся?Благодарю.

  import pytest
  from base.webdriverFactory import WebDriverFactory
  from pages.webpages.login.login_page import LoginPage
  from utilities.excel_utils import ExcelUtils as excelutils

@pytest.fixture(scope="class")
def get_excel_data(testName):
    datafile = "../testdata/TestData.xlsx"
    data = excelutils.get_input_rows(datafile, testName)
    for row in data:
        yield row

     from base.webdriverFactory import WebDriverFactory
from pages.webpages.login.login_page import LoginPage
from utilities.teststatus import TestStatus
from utilities.read_excel import ReadExcel
import unittest, pytest
import utilities.custom_logger as cl
import logging
import inspect


@pytest.mark.usefixtures("setUp", "get_excel_data")
class LoginTests(unittest.TestCase):
    log = cl.customLogger(logging.DEBUG)
    data=""

    @pytest.fixture(autouse=True)
    def classSetup(self, setUp, get_excel_data):
        self.wdf = WebDriverFactory(self.browser, self.os, self.thisdir)
        self.lp = LoginPage(self.driver)
        self.ts = TestStatus(self.driver)
        self.ex = ReadExcel(self.driver)
        data = self.get_excel_data(testName="test_invalidLoginWrongEmail")

    @pytest.mark.run(order=1)
    def test_invalidLoginBlank(self):
        self.log.info("++++++++++++++++++++++++++++++++++++STARTING test_invalidLoginBlank++++++++++++++++++++++++++++++++++++")
        self.lp.clickSignInLink()
        self.lp.blankLogin()
        result = self.lp.verifyBlankLogin()
        assert result == True #Verify login failed is true
        self.ts.markFinal("test_invalidLoginBlank", result, "Verify Can't Login with Blank Fields")
        self.log.info("++++++++++++++++++++++++++++++++++++ENDING test_invalidLoginBlank++++++++++++++++++++++++++++++++++++")

    @pytest.mark.run(order=2)
    @pytest.mark.parametrize("email, password", data)
    def test_invalidLoginWrongEmail(self, email, password):
        self.log.info("++++++++++++++++++++++++++++++++++++STARTING test_invalidLoginWrongEmail++++++++++++++++++++++++++++++++++++")
        self.lp.wrongLogin(email, password)
        browser1 = self.wdf.browser
        result = self.lp.verifyWrongLogin(testbrowser=browser1)
        assert result == True # Verify login failed is True
        self.ts.markFinal("test_invalidLoginWrongEmail", result, "Verify Can't Login with Wrong Email")
        self.log.info("++++++++++++++++++++++++++++++++++++ENDING test_invalidLoginWrongEmail++++++++++++++++++++++++++++++++++++")




from openpyxl import load_workbook

class ExcelUtils():

def __init__(self, driver):
    self.driver = driver

def get_input_rows(self, datafile, testName):

    wb = load_workbook(filename=datafile)

    sheet = wb.active

    # List sheets available
    sheets = wb.get_sheet_names()
    for i in sheets:
        if i == testName:
            sheet = i
    self.log.info("Got active sheet.")

    row_list = []

    # Get second row as the headers' values
    rows2 = sheet.iter_rows(min_row=2, max_row=2)
    secondrowvalues = next(rows2)
    for d in secondrowvalues:
        row_list.append(d.value)

    return row_list

1 Ответ

0 голосов
/ 01 июня 2019

Вы можете создать другую функцию (или прибор), в которой вы можете прочитать Excel и получить элементы словаря.Затем вы можете использовать @pytest.mark.parametrize для запуска теста для каждого элемента в словаре.

Вот аналогичный пример, где функция возвращает строки из Excel, затем тест запускается для каждой строки с использованием @pytest.mark.parametrize

** 1006
...