zoukankan      html  css  js  c++  java
  • 接口自动化测试之数据依赖

    接口测试中,有些场景接口间存在着数据依赖的问题,比如说提交订单前需要用户先登录等等,下面就用两个小案例说说数据依赖的问题。

    两个接口,一个接口(project_add)用来创建测试项目,一个接口(env_add)用来创建测试环境,env_add接口需依赖project_add接口返回的project_id字段数据。

    一、Postman解决数据依赖的问题

     

     第一步,project_add接口,Tests中写js代码,将需依赖的字段添加到环境变量中

     第二步:在env_add接口的Pre-request Script 中写js代码,把第一个接口拿到的参数赋值

     第三步:再将project_id配置到Body中prj_id字段中

     这样数据依赖的问题就搞定了

    二、用python代码实现接口数据依赖

    用代码解决数据依赖的方法有多种,下面用反射来解决数据依赖的问题。

    反射它可以把字符串映射到实例的变量或者实例的方法然后,可以去执行调用、修改等操作。

    它有四个重要的方法:

    • getattr 获取指定字符串名称的对象属性
    • setattr 为对象设置一个对象
    • hasattr 判断对象是否有对应的对象(字符串)
    • delattr 删除指定属性
    class RelyData(object):
        project_id = None
    
    
    print(RelyData.project_id)
    setattr(RelyData, "project_id", "111")
    print(getattr(RelyData, "project_id"))

    定义了一个RelyData()类,里面设置了一个类属性,project_id=None,然后再用setattr函数为对象RelyData里面project_id属性设置了新值,最后再用getattr函数取出里面的值,这是个属性值替换的过程。

    class Test(unittest.TestCase):
        def setUp(self):
            pass
    
        def test_1(self):
            """添加项目接口"""
            url = "http://127.0.0.1:8000/base/project_add/"
            headers = {'Content-Type': 'application/x-www-form-urlencoded'}
            datas = {"prj_name": "baidu search", "description": "百度搜索"}
            response = requests.post(url, data=datas, headers=headers)
            print("response: ", response.json())
            result = response.json()
            # 给RelyData里面的project_id=None的类属性设置新的属性
            setattr(RelyData, "project_id", result.get("project_id"))
    
        def test_2(self):
            """添加环境接口,需依赖添加项目接口返回的project_id字段数据"""
            url = "http://127.0.0.1:8000/base/env_add/"
            headers = {'Content-Type': 'application/x-www-form-urlencoded'}
            datas = {
                "env_name": "百度测试环境",
                "url": "www.baidu.com",
                # getattr(RelyData,'project_id'),取出里面的属性值
                "prj_id": getattr(RelyData, "project_id"),
                "description": "SIT测试环境"
            }
            response = requests.post(url, data=datas, headers=headers)
            print("response: ", response.json())
    
    
    if __name__ == '__main__':
        unittest.main()

    关注公众号,分享更多自动化测试内容

  • 相关阅读:
    欧拉公式
    isap的一些想法
    错误合集
    Hello World
    PAT (Advanced Level) Practice 1068 Find More Coins
    PAT (Advanced Level) 1087 All Roads Lead to Rome
    PAT (Advanced Level) 1075 PAT Judge
    PAT (Advanced Level) 1067 Sort with Swap(0, i)
    PAT (Advanced Level) 1017 Queueing at Bank
    PAT (Advanced Level) 1025 PAT Ranking
  • 原文地址:https://www.cnblogs.com/wakey/p/13510695.html
Copyright © 2011-2022 走看看