美文网首页
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-如何做到测试数据与脚本相分离

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