Package: yapairwise-testing
Visão geralA Análise de Par de Combinações, também conhecida como Pairwise Testing, é uma técnica de teste de software que busca reduzir a quantidade de cenários de testes por meio da exploração da interação efetiva entre pares de variáveis de entrada. Esta abordagem baseia-se no princípio empírico de que a maioria dos defeitos do software é causada pela interação de apenas dois fatores. Portanto, ao invés de testar todas as combinações possíveis de entradas (que pode ser impraticável para sistemas complexos), a técnica Pairwise Testing testa todas as possíveis combinações de pares de entradas, reduzindo significativamente a quantidade de testes necessários.UsoPara usar a funçãopairwise_testing, importe-a da seguinte maneira:from pairwise_testing import pairwise_testingA função pairwise_testing recebe três argumentos:input_variables: um dicionário onde as chaves são os nomes das variáveis e os valores são listas dos possíveis valores que as variáveis podem assumir.
results_rules: um dicionário onde as chaves são os nomes dos resultados e os valores são funções que calculam os resultados com base nos valores das variáveis.
csv_file: uma string que especifica o nome do arquivo CSV onde os casos de teste devem ser salvos.
A função retorna um DataFrame do pandas que contém os casos de teste.Aqui está um exemplo de como usar a função:variables = {
"Peso": [50, 70, 90],
"Altura": [150, 170, 190]
}def calculate_imc(test_case):
height_m = test_case["Altura"] / 100
return test_case["Peso"] / (height_m ** 2)results_rules = {
"IMC": calculate_imc,
}df = pairwise_testing(variables, results_rules, 'test_cases.csv')Vamos a outro exemplo:Este exemplo demonstra o uso da bibliotecapairwise_testingpara um sistema de delivery que oferece descontos com base no valor da compra, no tipo de produto e no dia da semana.Primeiro, as variáveis de entrada são definidas. OValor da compraé um valor numérico positivo que representa o valor total da compra realizada pelo cliente. OTipo de produtopode ser "comida", "bebida" ou "outros". ODia da semanapode ser qualquer dia, de "segunda-feira" a "domingo".A seguir, são definidas as regras para o desconto com base nas variáveis de entrada. Há descontos específicos para diferentes faixas de valor da compra, diferentes tipos de produto, e diferentes dias da semana.A funçãototal_discountcalcula o desconto total, aplicando todas as regras de desconto e limitando o desconto total a 25% se a soma dos descontos for maior do que isso.Finalmente, a funçãopairwise_testingé chamada com as variáveis de entrada e as regras de desconto, e os casos de teste são gerados e salvos em um arquivo CSV.Essa abordagem garante que todas as combinações possíveis de pares de valores das variáveis apareçam pelo menos uma vez nos casos de teste, proporcionando uma cobertura eficiente com um número gerenciável de testes.from pairwise_testing import pairwise_testingDefinindo as variáveis de entradavariables = {
"Valor da compra": [50, 150, 250, 350],
"Tipo de produto": ["comida", "bebida", "outros"],
"Dia da semana": ["segunda-feira", "terça-feira", "quarta-feira", "quinta-feira", "sexta-feira", "sábado", "domingo"]
}Definindo a regra para Desconto por valor da compradef discount_by_value(test_case):
value = test_case["Valor da compra"]
if value > 300:
return min(20, 25)
elif value > 200:
return min(15, 25)
elif value > 100:
return min(10, 25)
else:
return 0Definindo a regra para Desconto por tipo de produtodef discount_by_product_type(test_case):
product_type = test_case["Tipo de produto"]
if product_type == "comida":
return min(5, 25)
elif product_type == "bebida":
return min(3, 25)
else:
return 0Definindo a regra para Desconto por dia da semanadef discount_by_day_of_week(test_case):
day_of_week = test_case["Dia da semana"]
if day_of_week == "segunda-feira":
return min(7, 25)
elif day_of_week == "terça-feira":
return min(6, 25)
elif day_of_week == "quarta-feira":
return min(5, 25)
elif day_of_week == "quinta-feira":
return min(4, 25)
elif day_of_week == "sexta-feira":
return min(3, 25)
elif day_of_week == "sábado":
return min(2, 25)
else:
return 0Calculating total discountdef total_discount(test_case):
discounts = [discount_by_value(test_case), discount_by_product_type(test_case), discount_by_day_of_week(test_case)]
return min(sum(discounts), 25)results_rules = {
"Desconto por valor da compra": discount_by_value,
"Desconto por tipo de produto": discount_by_product_type,
"Desconto por dia da semana": discount_by_day_of_week,
"Desconto total": total_discount
}Chamando a funçãodf = pairwise_testing(variables, results_rules, 'test_cases.csv')Este script demonstra o uso da biblioteca pairwise_testing para um sistema de bilheteria que oferece descontos com base no tipo de ingresso, idade do cliente e categoria do cliente.Regra de Negócio: Sistema de Bilheteria com Desconto por Categoria de ClienteVariáveis:Tipo de ingresso (tipo_ingresso): Representa o tipo de ingresso que está sendo adquirido. Pode ser "inteiro", "meia-entrada" ou "VIP".Idade do cliente (idade_cliente): Representa a idade do cliente que está adquirindo o ingresso.Categoria do cliente (categoria_cliente): Representa a categoria do cliente, como "estudante", "idoso", "criança", "adulto", entre outras.Possíveis Valores:tipo_ingresso: "inteiro", "meia-entrada" ou "VIP".idade_cliente: Qualquer valor numérico inteiro positivo.categoria_cliente: Valor que represente a categoria do cliente (pode ser uma string ou um código).Regras para o Desconto:Desconto por tipo de ingresso:Tipo_ingresso "meia-entrada": 50% de desconto.Tipo_ingresso "VIP": 20% de desconto.Desconto por categoria de cliente:Categoria_cliente "estudante": 30% de desconto.Categoria_cliente "idoso": 40% de desconto.Categoria_cliente "criança": 20% de desconto.Categoria_cliente "adulto": Sem desconto.Desconto por faixa etária:Idade_cliente abaixo de 12 anos: 15% de desconto.Idade_cliente entre 12 e 18 anos: 10% de desconto.Idade_cliente acima de 60 anos: 25% de desconto.Observações:Os descontos podem ser cumulativos, ou seja, caso o cliente se enquadre em mais de uma regra de desconto, os descontos serão somados.O desconto máximo total é de 50%. Caso a soma dos descontos seja maior, o desconto será limitado a 50%.O sistema deve aplicar os descontos automaticamente com base nas variáveis fornecidas.Saída
O script gera um conjunto de casos de teste que cobre todas as combinações possíveis de pares de valores das variáveis tipo_ingresso, idade_cliente e categoria_cliente. As regras de desconto são aplicadas para calcular o desconto para cada caso de teste. O desconto total é limitado a 50%, mesmo que a soma dos descontos seja maior. Os casos de teste são salvos em um arquivo CSV para referência futura.from pairwise_testing import pairwise_testingDefinindo as variáveis de entradavariables = {
"tipo_ingresso": ["inteiro", "meia-entrada", "VIP"],
"idade_cliente": [5, 15, 25, 35, 45, 55, 65, 75],
"categoria_cliente": ["estudante", "idoso", "criança", "adulto"]
}Definindo a regra para o desconto do tipo de ingressodef discount_ticket_type(test_case):
if test_case["tipo_ingresso"] == "meia-entrada":
return 50
elif test_case["tipo_ingresso"] == "VIP":
return 20
else:
return 0Definindo a regra para o desconto pela categoria do clientedef discount_customer_category(test_case):
if test_case["categoria_cliente"] == "estudante":
return 30
elif test_case["categoria_cliente"] == "idoso":
return 40
elif test_case["categoria_cliente"] == "criança":
return 20
else:
return 0Definindo a regra para o desconto pela idade do clientedef discount_customer_age(test_case):
if test_case["idade_cliente"] < 12:
return 15
elif 12 <= test_case["idade_cliente"] < 18:
return 10
elif test_case["idade_cliente"] >= 60:
return 25
else:
return 0Definindo a regra para o desconto totaldef total_discount(test_case):
total = discount_ticket_type(test_case) + discount_customer_category(test_case) + discount_customer_age(test_case)
return min(total, 50)  # O desconto máximo é 50%results_rules = {
"Desconto Ingresso": discount_ticket_type,
"Desconto Categoria": discount_customer_category,
"Desconto Idade": discount_customer_age,
"Desconto Total": total_discount
}Chamando a funçãopairwise_testing(variables, results_rules, 'test_cases.csv')