Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
大海捞针(Python)_Python_Pytest - Fatal编程技术网

大海捞针(Python)

大海捞针(Python),python,pytest,Python,Pytest,我有一个功能,用于在应用程序的搜索功能中查找错误,这是非常有用的。在这个函数上运行pytest迭代,提交用于搜索的随机UTF-8字符串大约每500次搜索生成一次调试错误 由于我可以获取导致错误的每个字符串,所以我想确定这些字符串中真正引起错误的最小字符子序列是什么。换句话说,(在pytest循环中): 我是否应该将字符串切成两半,并将每一面都削短,然后重新提交,直到失败,然后从其(len()-1)中选择随机字符,如果没有发生错误,则进行备份?蛮力组合?最好的办法是什么 谢谢。 如果有两个字符序列

我有一个功能,用于在应用程序的搜索功能中查找错误,这是非常有用的。在这个函数上运行pytest迭代,提交用于搜索的随机UTF-8字符串大约每500次搜索生成一次调试错误

由于我可以获取导致错误的每个字符串,所以我想确定这些字符串中真正引起错误的最小字符子序列是什么。换句话说,(在pytest循环中):

我是否应该将字符串切成两半,并将每一面都削短,然后重新提交,直到失败,然后从其(len()-1)中选择随机字符,如果没有发生错误,则进行备份?蛮力组合?最好的办法是什么


谢谢。

如果有两个字符序列导致失败,则将字符串拆分为一半将失败,并且该序列正好位于中间。每一半都成功,但组合字符串失败

这里有一个算法可以找到局部最小值:

尝试依次删除每个字符

  • 如果删除字符仍然会导致失败,请保留新的较短字符串,并在此新字符串上重复算法
  • 如果删除字符不再导致失败,请将其放回原处,然后尝试删除下一个字符。继续,直到没有更多的字符可以尝试。当到达字符串末尾时,您知道删除任何一个字符都会导致搜索成功
我会使用“两边削”的方法。拆分字符串将始终冒着拆分导致错误的子字符串的风险。我的做法是:

  • 从字符串左侧弹出尽可能多的字符,同时确保字符串导致错误
  • 对右侧执行同样的操作
  • 从理论上讲,您只剩下导致错误的最小子字符串

  • 希望有帮助

    首先,值得注意的是,解决方案可能不是唯一的,即可能存在两个或多个断开的子字符串


    另一个建议(对于Xavier和Mark的正确答案)是运行递归方法。对导致错误的有限字符串子集重复采样。一旦发现另一个错误,重复此操作,直到达到最小的子字符串。这种方法足够健壮,可以处理更复杂的用例,其中错误可能存在于两个不相邻的条目中。我不认为这里是这种情况,但是有一个通用的purpose方法很好。

    我说“理论上”最小,因为它不能保证。假设
    *A.*B.*
    格式的所有字符串都会导致错误。因此,给定
    abcAdefBghi
    ,此方法将找到
    AdefB
    ,而不是真正最小的
    AB
    。但至少你知道触发器在最左边和最右边。今天就实现了。效果很好。谢谢
    def fumble_towards_ecstasy(string_that_breaks):
        # iterate over both length and content of the string
            nugget = # minimum series of characters that break the search
            return nugget