美文网首页
pytest-如何做到测试数据与脚本相分离

pytest-如何做到测试数据与脚本相分离

作者: Rainbow想喝奶茶 | 来源:发表于2021-08-11 14:22 被阅读0次

我以为今天的工作时间要结束了,看了眼时间,就竟然距离下班还有一个多小时,没有其它的工作内容,索性在码一篇,我在下午看这个部分的教程时候几度感觉昏睡过去而且头疼,但最后实在是没事情做,照着样例一行一行写下来,发现也没有那么难懂了,这个行业不知道是不是只有我,没有什么技术背景也不爱研究,然后还在测试行业努力的生长着。
这篇可以说是结合别人的案例在按照自己所测试的接口来完成的,因为我在写完上一篇然后实践过后,不知道接下来该怎么做了。所以搜索了一下发现“测试数据与脚本相分离”这一个概念。但其实,写完之后感觉反而麻烦,对于现有工作而言增加工作量,但如果之后是一个体系化的系统,可能会有帮助吧。我不确定,但是反正都是学习...当没有什么具体目标的时候,就开始干现在看到的吧,毕竟,不然就是啥也不干了...废话结束。

测试数据与脚本相分离,三个步骤:

  • 存储测试数据--->存储于yaml文件中
  • 读取测试数据--->专门写一个文件来读取yaml
  • 执行测试数据--->pytest执行测试用例

存储测试数据到yaml中

我看到有介绍说yaml是为了方便人类读写,我第一次写,败在了空格上。


空格的重要性

如图,如果在键值对中,冒号后不加空格,就不会有特殊颜色标识,在读取时也会报错。
更多yaml的知识有待后续继续补充。
总之,yaml中对应的一份测试数据主要包括三个部分:

  • case :测试数据用途
  • http:关于请求所用到的一些参数,比如方法、路径、参数、headers等等。
  • expected:响应数据
    对比教程,写下了如下yaml文件。


    test_data.yaml

读取yaml中的测试数据

这个部分的函数也可以直接写到测试用例执行文件中,不过也是说为了之后更改不互相影响,就也分离开写一个文件。
首先需要下载yaml

pip3 install pyyaml

读取yaml需要用到yaml.load方法,可以把权键值变成类字典。然后就是在这个类字典中一层层剥离,拿到case、http以及expected中包含的键值。
中间用到了zip函数,将对应的元素打包成元组,具体的剥离步骤,就靠print解决了。

import os
import yaml
path=os.path.dirname(__file__)#获取到除了当前文件以外的路径
data_path=os.path.join(path,'test_data.yaml')#获取到yaml路径
def get_test_data(data_path):
    case=[]
    http=[]
    expected=[]
    with open(data_path) as f:
        data=yaml.load(f.read(),Loader=yaml.SafeLoader)#把权键值变成类字典
        print("data:",data)#包括tests在内的字典
        test=data['tests']#剥离出tests
        print("tests:",test)
        for td in test:
            case.append(td.get('case',''))#剥离出case
            http.append(td.get('http',{}))#剥离出http
            expected.append(td.get('expected', {}))#剥离出expected
    print("case:",case)
    print("http:",http)
    print("expected:",expected)
    parameters=zip(case,http,expected)#将case、http、expected合并成一个tuple
    list_params=list(parameters)##zip变成一个list
    print(list_params)#是一个list
    print(list_params[0])#是一个tuple
    print(list_params[0][0])#case部分
    print(list_params[0][1])#http部分
    print(list_params[0][2]) #expected部分
    return list_params

get_test_data(data_path)#验证获取数据

执行测试数据

利用之前获取到的数据,进行各项值的传递。

import requests
import os
import commlib
path=os.path.dirname(__file__)
data_path=os.path.join(path,'test_data.yaml')
url='https://xxx'
class Test_rps:

    def test_statistics(self):
        list_params=commlib.get_test_data(data_path)
        now_url=url+list_params[0][1]["path"]
        params=list_params[0][1]["params"]
        response=requests.get(now_url,params=params)
        res=list_params[0][2]["response"]["statuscode"]
        assert response.status_code==res

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

相关文章

  • pytest-如何做到测试数据与脚本相分离

    我以为今天的工作时间要结束了,看了眼时间,就竟然距离下班还有一个多小时,没有其它的工作内容,索性在码一篇,我在下午...

  • Jmeter的接口测试与数据驱动

    简介 数据驱动测试,即是分离测试逻辑与测试数据,通过如excel表格的形式来保存测试数据,用测试脚本读取并执行测试...

  • Jmeter的数据驱动

    一、简介 数据驱动测试,即是分离测试逻辑与测试数据,通过如excel表格的形式来保存测试数据,用测试脚本读取并执行...

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

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

  • 2021-12-01 JAVA TestNG 数据驱动:csv文

    2数据驱动是什么 相同的测试脚本使用不同的测试数据,将测试数据与测试行为完全分离,这样的设计模式称为数据驱 动,如...

  • selenium3 web自动化测试框架 五: 数据驱动简介及基

    1.数据驱动概述 相同的测试脚本使用不同的测试数据来执行,测试数据和测试行为完全分离,这样的测试脚本设计模式称为数...

  • selenium3 web自动化测试框架 : 数据驱动简介及基础

    1.数据驱动概述 相同的测试脚本使用不同的测试数据来执行,测试数据和测试行为完全分离,这样的测试脚本设计模式称为数...

  • JMeter测试接口数据驱动

    背景 数据驱动测试,就是分离测试逻辑和测试数据,通过Excel脚本来读取数据,用JMeter脚本读取并执行测试的过...

  • 接口自动化2018-08-11

    如何造一个java的接口测试框架呢?想达成的目标:测试数据脚本分离;练习java的使用,虽然用java写过网管的测...

  • Soapui接口功能测试参数化

    按照自动化测试分层实现的原理,每一层的脚本实现都要进行参数化,自动化的目标就是要实现脚本代码与测试数据分离。 当测...

网友评论

      本文标题:pytest-如何做到测试数据与脚本相分离

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