robotest接口自动化测试之参数传递so easy

为什么要把参数进行传递呢?是的,要用!

robotest接口自动化测试之参数传递so easy_第1张图片

这不是废话吗!

对测试数据参数化,而参数是可以被其他需要使用到的,比如,c=1+2,我们可以设置a=1,b=2,公式就可以使用c=a+b代替。我们a、b就可以填写其他数据代进去。我们软件测试也是一样的不管是UI/接口测试都是一样的,url、查询入参、请求方式:get、post,如果是post请求的body,登录后获取到的cookie、token,还有其他数据等等,一切不固定的都可以做参数化,但是不是一切都要做参数化。postman可以设置为全局变量或者环境变量,而其他需要使用的地方可以通过{ {变量名}}去调用。而jmeter可以通过设置用户变量然后通过${变量名}去调用,其他工具也同理,一法通万法通。那么我们这里怎么做呢,我们之前使用过了配置文件base.ini传入参数,还有把参数先写在excel文件,yaml文件然后通过读取文件的方法读取然后传入需要用到的地方,那我们不是可以把获取到的数据保存到我们的文件中吗?是的可以!

先来看下文件操作的模式

 

r(读取)

w(写入)

a(追加)

 

存在:读取

存在:删除-->创建-->写入

存在:追加写入

不存在:报错

存在:创建-->写入

不存在:创建-->写入

+(可读写)

存在:读写

存在:删除-->创建-->读写

存在:追加读写

不存在:报错

存在:创建-->读写

不存在:创建-->追加读写

b(二进制)

以二进制读取文件

以二进制方式写入文件

以二进制方式追加写入文件

直接上代码

这是先从登录接口获取返回值

yaml.dump(data, f)

保存到token.yaml文件中,然后通过

result = yaml.load(f, Loader=yaml.FullLoader)

读取yaml文件中的值

import unittest
import requests
import os
from ddt import ddt, file_data, unpack
from common.getpath import data_path
import json
import yaml

post_data = os.path.join(data_path, 'post_data.yaml')
post_path2 = os.path.join(data_path, 'post_data2.yaml')
token_path = os.path.join(data_path, 'token.yaml')


@ddt
class parameter_association(unittest.TestCase):

    @file_data(post_data)
    @unpack  # 二次分解元组
    def test_testcase1(self, **kwargs):
        url = kwargs['url']
        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) \
            AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36"}
        data = {"name": kwargs['name'],
                "pwd": kwargs['pwd']
                }
        # 发送post请求
        response = requests.post(url=url, headers=headers, data=data)
        # 因为返回值是一个json字典一样的字符串:{"code": 200, "message": "登录成功", "token": "@R_r18sQ8#"}
        # 使用json.loads()就可以自动转为最符合的数据类型,然后从转换后的字典中取token 的值
        token = json.loads(response.text)['token']
        # 把需要存的数据结构定义好 我需要保存成- token: '@R_r18sQ8#'
        data = [{'token': token}]
        # 需要获取一个文件句柄,往文件中写入数据,然后关闭文件句柄使用,使用with as就不用file.close()
        # w 写入模式 ,数据中有中文要加上编码encoding='utf-8'
        with open(token_path, "w", encoding="utf-8") as f:
            #
            yaml.dump(data, f)
        print(url)
        print(response.text)

    @file_data(post_path2)
    @unpack  # 二次分解元组
    def test_testcase2(self, **kwargs):
        url = kwargs['url']
        # r 读取模式
        with open(token_path, "r+", encoding="utf-8") as f:
            # 读取时要加上:Loader=yaml.FullLoader
            result = yaml.load(f, Loader=yaml.FullLoader)
            token = result[0]['token']
        data = {"name": kwargs['name'],
                "token": token
                }
        response = requests.post(url=url, data=data)
        print(url)
        print(data)
        print(response.text)


if __name__ == '__main__':
    unittest.main()

这是我们使用的一种方式,下期我们使用@classmethod操作一下

我就是那个我,不一样的烟火,你看懂了吗?没有?反复敲一百遍你就懂了

另外别忘了扫码支持一下

robotest接口自动化测试之参数传递so easy_第2张图片

 

你可能感兴趣的:(接口自动化测试,Python,软件测试)