zoukankan      html  css  js  c++  java
  • API自动化测试笔记(二):测试数据

    (一)说明

        相信不管是GUI自动化测试,亦或者是API自动化测试,都离不开测试数据。

         这里说的测试数据我理解分为2部分:

            1、用例执行前需要的前置条件,例如我验证正确账户、密码能否成功登录,首先就需要一个已经注册的用户。

            2、测试用例本身需要的输入及预期结果。例如:调用一个API,我需要设置不同的请求参数,验证不同请求参数下的响应是否符合预期。这里的请求参数和预期结果也是我们的测试数据。

        这里主要提供个思路,在API自动化,亦或者GUI自动化中,该怎么管理我们的测试数据(这里针对的是第二种测试数据)。思路大概是:应用工厂设计模式

           1、工厂类:接受不同格式的数据,解析并处理为DataFrame格式数据

           2、将DataFrame格式的数据处理成字典或列表。

        使用工厂模式有个优点是,方便以后的扩展,例如如果有新增的文件格式,只要在工厂类中新增该文件格式的实现即可。

    (二)简单实现代码

     1 import os
     2 import pandas as pd
     3 
     4 
     5 class ParamConfigSourceFactory():
     6 
     7     def __init__(self,filename,sheet_name=None):
     8         """
     9         工厂设计模式:接受不同格式数据,解析并转换为DataFrame格式数据
    10         :param filename:
    11         :param sheet_name:
    12         """
    13         self.filename = filename
    14         self.sheet_name = sheet_name
    15         self.df = self.get_file_data()
    16 
    17     def get_file_data(self):
    18         file_type = os.path.splitext(self.filename)[1]
    19         if file_type == '.xlsx':
    20             df = pd.read_excel(io=self.filename,
    21                                sheet_name=self.sheet_name)
    22         else:
    23             raise ValueError("不支持的文件格式{},仅支持xlsx格式".format(file_type))
    24         return df
    25 
    26 
    27 class ParamConfigSource():
    28 
    29     def __init__(self,filename,sheet_name=None):
    30         self.filename = filename
    31         self.sheet_name = sheet_name
    32         self.df = ParamConfigSourceFactory(filename=self.filename,sheet_name=self.sheet_name).df
    33 
    34     def get_all_test_data_format_dict(self,flag=0):
    35         """
    36         :param flag
    37             flag=0 返回 {0:{key1:value1,key2:value2..},1:{...}}格式数据
    38             flag=1 返回 {0:[value1,value2...],1:[...]}格式数据
    39         :return:
    40         """
    41         col_name = [col for col in self.df]
    42         data = {}
    43         num = 0
    44         for indexs in self.df.index:
    45             if flag == 0:
    46                 row_data = {}
    47                 for i in range(len(self.df.loc[indexs].values)):
    48                     row_data[col_name[i]] = self.df.loc[indexs].values[i]
    49             elif flag == 1:
    50                 row_data = []
    51                 for i in range(len(self.df.loc[indexs].values)):
    52                     row_data.append(self.df.loc[indexs].values[i])
    53             else:
    54                 raise  ValueError("不支持的参数:{}".format(flag))
    55             data[num] = row_data
    56             num += 1
    57         return data
    58 
    59     def get_all_test_data_format_list(self):
    60         """
    61         返回[(value1,value2...),(...)]格式数据
    62         :return:
    63         """
    64         data = []
    65         for indexs in self.df.index:
    66             row_data = []
    67             for i in range(len(self.df.loc[indexs].values)):
    68                 row_data.append(self.df.loc[indexs].values[i])
    69             data.append(tuple(row_data))
    70         return data
    71     
    72 # 执行下看下结果
    73 pcs = ParamConfigSource(filename="./测试1.xlsx",sheet_name="Sheet1")
    74 print(pcs.get_all_test_data_format_dict())
    75 print(pcs.get_all_test_data_format_dict(flag=1))
    76 print(pcs.get_all_test_data_format_list())

  • 相关阅读:
    poj1811
    linux系统nginx如何部署vue项目(附详细步骤)
    vue中设置input输入框的值为正整数,不能为负数和小数
    nginx(windows)如何部署vue项目
    vue多个表单验证(Promise.all)
    vue 路由传递参数,刷新页面 数据变成 [Object object]
    vue中解决父组件给子组件传值,子组件拿不到值
    vue项目封装axios请求的get、post、put、delect请求
    vue代码格式化-eslint
    vue后台管理项目PC端页面自适应
  • 原文地址:https://www.cnblogs.com/simple-free/p/12805596.html
Copyright © 2011-2022 走看看