在假设函数中执行数据库查询时列表索引超出范围

Posted

技术标签:

【中文标题】在假设函数中执行数据库查询时列表索引超出范围【英文标题】:list index out of range when performing database queries in Hypothesis function 【发布时间】:2019-09-19 22:39:51 【问题描述】:

我正在使用 Python Hypothesis 为数据库编写随机测试。 在将给定值插入表的 1-2 次循环后,我得到列表索引超出范围并@seed 重现。 没有什么会失败,我还没有断言任何事情。 我该如何调试呢?

谢谢

        run_statement("create table t (x int)")
        @given(st.integers(1,10), st.integers(1,10))
        def insert_select(x):
            assume(x)
            run_statement("insert into t values ()".format(x))
            select_results = run_statement_with_results("select * from t")
            print select_results

        insert_select()

结果:

You can add @seed(257907719204305935240373390472712621009) to this test to reproduce this failure.
timeout
error: list index out of range

【问题讨论】:

【参考方案1】:

不幸的是,这个测试从根本上被破坏了:

您正在测试用例的执行之间共享数据库状态,这不得发生,否则您的测试将无法重现。 您向@given 提供了两个参数,但测试函数只接受一个。 assume(x) 调用毫无意义,因为x 永远不会是假的

一旦解决了这些问题,问题很可能就会消失。

【讨论】:

以上是关于在假设函数中执行数据库查询时列表索引超出范围的主要内容,如果未能解决你的问题,请参考以下文章

当我遍历我的列表时,返回列表索引超出范围

csv,IndexError:列表索引超出范围

创建任务时列出索引超出范围异常

刷新时数组索引超出范围

滚动时将新项目添加到列表时出现数组索引超出范围异常

Python中子进程中的列表索引超出范围