• 接口自动化测试之数据依赖


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

    两个接口,一个接口(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()

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

  • 相关阅读:
    hdu 3085
    hdu 3295 模拟过程。数据很水
    hdu 2181 水搜索
    pku ppt some problem
    2-sat
    The 2014 ACM-ICPC Asia Mudanjiang Regional First Round
    nenu contest3
    The 10th Zhejiang Provincial Collegiate Programming Contest
    最小费用最大流
    多源最短路
  • 原文地址:https://www.cnblogs.com/wakey/p/13510695.html
Copyright © 2020-2023  润新知