美文网首页
测试框架优化-参数化+测试数据建立

测试框架优化-参数化+测试数据建立

作者: Rainbow想喝奶茶 | 来源:发表于2021-09-16 14:20 被阅读0次

在文章可能这就是我应用pytest搭建的第一个测试框架吧中,已经建立了一个小小的测试框架,但其中根url以及测试数据是直接在代码中写死的。如果想测试不同的数据,或者在不同的测试脚本中均可以调用框架的类,则需要进行读参(这会让这个框架看起来高级一些,而且更像一个框架,我可真是个虚荣的孩子)。

根url的读取

查资料发现有很多种方法,比如存储在环境变量、ini文件或者yaml文件,我目前的做法是把诸多根url均存储在一个yaml文件中。

#config.yaml
host:
  test_01: https://www.****.com/test_01
  test_02: https://www.****.com/test_02

对于原来写死根目录的类,需要改写成以参数的形式传入。

#bridge.py
from interface import demand
class params():

    def __init__(self,api_root_url,**kwargs):
        self.api_root_url=api_root_url
        self.demand=demand(self.api_root_url,**kwargs)

改写完成后,下一步需要做到的是从config.yaml中拿出对应的url并且传递给params()类,在这里,新建立一个文件env.py,目的是存储以及传递url。

#env.py
from birdge import params

class env:
    def __init__(self,api_root_url,**kwargs):
        self.transit = params(api_root_url["test01"],**kwargs)

为了能让env类拿到url,在conftest.py这个配置文件中建立一个会话级的配置,读取想要进行测试的根url,并存储在返回值当中。

#conftest.py
import pytest
import os
import yaml
from env.py import env
@pytest.fixture(scope="session")
def url(request):
    config_path=os.path.join(request.config.rootdir,'config','config.yaml')
    with open(config_path) as f:
        data=yaml.safe_load(f)
    api_root_url=data["host"]
    return env(api_root_url)

在上方代码中,需要注意的是api_root_url=data["host"],获取yaml文件中host下方的全部url,在env.py文件中会获取具体的url值。

接下来则是改写测试脚本,引用fixture拿到url发起请求,完成参数获取的过程。

#test_project.py
import pytest
#from birdge import params
#test_data=params().demand

def test_name(url):
    name_res=url.transit.demand.name()
    assert name_res.status_code==200

def test_age(url):
    age_res=url.transit.demand.age("18")
    assert age_res.status_code==201

参数化后,整个框架的调用过程如下所示,与此前相比主要变化的是前两个步骤。


框架执行流程

测试数据的获取

测试数据如果很少,其实可以直接在脚本中列举,但如果过多,则可以存储在excel中,然后通过读取,在其中随机或全部取值。

建立一个读取excel的文件。

#read_excel.py
import os
import xlrd
path=os.path.abspath(os.path.pardir)

class readExcel():
    def get_xls(self,xls_name):
        xls_path = os.path.join(path,"data",xls_name)
        file = xlrd.open_workbook(xls_path)
        sheet = file.sheet_by_index(0)
        rows = sheet.nrows
        cls = []
        for i in range(rows):
            if sheet.row_values(i)[0] != 'age':
                cls.append(sheet.row_values(rowx=i, start_colx=0, end_colx=None))
        return cls

然后,改写测试脚本,从excel中录入age接口的测试数据。

#test_project.py
import pytest
import random
from read_excel import readExcel
age=readExcel().get_xls('age.xls')
test_age_data=random.choice(age)
#from birdge import params
#test_data=params().demand

def test_name(url):
    name_res=url.transit.demand.name()
    assert name_res.status_code==200

def test_age(url):
    age_res=url.transit.demand.age(test_age_data[0])
    assert age_res.status_code==201

至此,参数化及测试数据的读取优化完成,还是有很多不完美的地方等待去完善,接下来尽量努力学习吧,也有可能是看缘分~

下面是搭建框架用到的一部分细节知识集结,有一步步用到自己之前学习到的东西,十分开心。

这两天的更新让自己这个小白非常满意,导致会频繁的打开看看阅读量或者有没有点赞呀涨粉呀,非常容易让自己心浮气躁了。但是有一个好处是,原来是为了记录学习日常来这里,现在变成了为了有更好的数据就要更新有用的东西然后促进自己去学习,也是一种进步。

不过还是不在意那些比较好,容易有些小失落,日子艰难,还是快乐比较重要~~

希望看到这里的你天天开心,天天向上哦~~

自我记录,有错误欢迎指正~

相关文章

  • 测试框架优化-参数化+测试数据建立

    在文章可能这就是我应用pytest搭建的第一个测试框架吧[https://www.jianshu.com/p/0f...

  • 使用python参数化测试

    思路 1)使用parameterized工具进行参数化(将测试数据传递给参数)2)使用selenium框架操作浏览...

  • 数据驱动测试—定义,思路,步骤

    定义: 使用数据数字/测试数据文件或者数据库等方式作为测试过程输入的自动化测试框架,可讲所有测试数据在自动化测试执...

  • [JM_05]JMeter常用的4种参数化方式-操作解析

    目录结构 一、JMeter参数化简介 1.JMeter参数化的概念 当使用JMeter进行测试时,测试数据的准备是...

  • TestNG+HttpClient+Excel数据驱动测试

    数据驱动测试 数据驱动测试的核心是:测试数据与测试脚本分离,实现测试脚本参数化,提高测试脚本的可重用性。在自动化功...

  • python ddt

    简介:Data Driven Testing,数据驱动,简单来说就是测试数据的参数化 安装 基本使用 @data(...

  • 自动化框架设计

    自动化设计的框架如下图所示 框架的说明 data:excel表格存放测试数据 log:记录执行日志 page:主要...

  • 自动化测试之数据驱动与关键字驱动

    一、概述 数据驱动的自动化测试 从数据文件读取输入数据,通过变量的参数化,将测试数据传入测试脚本,不同的数据文件对...

  • python缺少必须的位置参数:self问题

    最近捣鼓接口自动化测试过程,遇到好些问题,其中在对测试数据进行参数化时,执行后总是提示:TypeError: ge...

  • task3

    过拟合、欠拟合及其解决方案 训练集和测试集 测试数据集不可以用来调整模型参数,如果使用测试数据集调整模型参数,可能...

网友评论

      本文标题:测试框架优化-参数化+测试数据建立

      本文链接:https://www.haomeiwen.com/subject/kprrgltx.html