接口测试 获取接口参数我写了七层 for 循环

Alex · 2020年07月16日 · 最后由 测试老憨 回复于 2020年07月21日 · 2660 次阅读

业务逻辑

  • 我们的系统查询有级联关系,必填输入框有 8 个(下拉选择式),选填另算,根据不同的维度会查到不同的数据
  • 需要对查询条件做遍历,将查询到的结果记录下来(返回状态码、返回结果是否为空、返回不为空的结果判断是否正确)

具体实现

  • 根据级联关系,将第一个下拉框的结果作为第二个下拉框的输入···以此类推,遍历了 8 个下拉框的内容,对内容进行全对偶的匹配,得到 8 个参数值作为一组测试用例,保存至文件,然后再读取文件获取用例做数据驱动

代码逻辑

# 获取参数
def get_data(host, file_name):
    tru_file(file_name)
    data = {}
    factoryTypes = get_factoryType()
    cutType = get_cutType()
    data["cutType"] = cutType
    for factotyType in factoryTypes:
        data["factoryType"] = factotyType
        ProductGroups = get_ProductGroup(host, factotyType)
        stepGroups = get_StepGroup(host, factotyType)
        for ProductGroup in ProductGroups:
            data["productGroup"] = ProductGroup
            productIDS = get_ProductID(host, factotyType, ProductGroup)
            for productID in productIDS:
                data["productId"] = productID
                for stepGroup in stepGroups:
                    data["stepGroup"] = stepGroup

                    stepIds = get_StepId(host, factotyType, productID, stepGroup)
                    for stepID in stepIds:
                        data["stepId"] = stepID

                        ItemTypes = get_ItemType(host, factotyType, stepID)
                        for ItemType in ItemTypes:
                            data["itemType"] = ItemType
                            items = get_Item(host, factotyType, stepID, ItemType)
                            for item in items:
                                data["item"] = item["key"]

                                param = get_param(data)
                                with open(file_name, "a", encoding="utf-8") as f:
                                    f.write(str(param) + "\n")

问题

  • 代码属实不好看,想要优化却又不知道怎么合理优化,请教下有没有好的方法呢
共收到 14 条回复 时间 点赞

优化的方式都可以通过增加一层中间层来解决

Alex #2 · 2020年07月16日 Author

意思是再针对每个参数写一个函数类似(获取 1)(获取 1/2)(获取 1/2/3)…
这样优化有什么好处么

假如第一个就出错了,后面的不就都废了

是否可以做等价类、边界值和异常入参分析呢,遍历确实可以发现问题,但覆盖的代码语句和逻辑分支很可能都是重复的…分析过后可能只需保留几类代表性的用例就可以了

Alex #5 · 2020年07月16日 Author
Pactortester 回复

是这样的,所以我想再优化一下

看看 PICT 加上约束语句是不是来得快点

Alex #7 · 2020年07月16日 Author
JokerFuPei 回复

这个偏数据验证的测试,很可能存在只有一个条件不一致其他一致接口就报错的情况,所以想的还是最好做一下遍历,功能测试还是抽测了几个维度的数据

把所有的 for 去掉,你就明白什么叫软件测试了

itertools 里的 combinations 和 permutations 看看满足你不

Alex #10 · 2020年07月16日 Author
ola嘿嘿 回复

不太行,我需要上一层循环里面的参数作为这一层的请求 param 获取到结果后作为下一层循环的参数,就是每层循环里面都会有一个接口请求,单纯的组合没办法满足😂

实在看不下去,后面的几层抽个函数出来?

我觉得拆开好一点吧,一个条件 一个函数,出了问题也好定位

Alex #13 · 2020年07月17日 Author
leapon 回复

确实,实在没有其他方法了,一个循环定义一个函数这么优化吧

按照等价类的思想,从第一个列表开始取一个随机的元素,再获取列表再取随机元素,以此类推,这样就不用循环了!

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册