生成智能合约测试案例的方法和装置制造方法及图纸

技术编号:26259166 阅读:46 留言:0更新日期:2020-11-06 17:53
本说明书实施例提供一种生成智能合约测试案例的方法和装置,该方法包括:首先从当前的测试案例中选取至少一个待变异结构化参数,并保证所选出的待变异结构化参数能够被待测试智能合约中的至少一个接口识别;接着针对每一个待变异结构化参数,得到该待变异结构化参数对应的参数结构;接着针对每一个待变异结构化参数,根据该待变异结构化参数对应的参数结构,对该待变异结构化参数进行变异,获得变异后结构化参数;接着生成包括有各变异后结构化参数的测试案例,作为输入待测试智能合约的测试案例。

【技术实现步骤摘要】
生成智能合约测试案例的方法和装置
本说明书一个或多个实施例涉及区块链
,尤其涉及用于对区块链系统中智能合约进行测试的测试案例的生成方法和装置。
技术介绍
区块链系统中的智能合约是一套以数字形式定义的承诺,其中包括了合约参与方执行所定义承诺的协议,通过智能合约可以在没有中心化第三方介入的情况下自动使互不信任的参与方实现约定的协议。智能合约对于区块链系统的参与方来说是完全透明的,而且一旦部署很难被更改,为此在智能合约部署之前需要对智能合约进行测试,以确保所部署智能合约的安全性和正确性。在对智能合约进行测试时,需要生成一系列测试案例作为智能合约的输入,使得智能合约在执行各测试案例时能够覆盖到不同的程序路径,以对智能合约进行较全面的测试。由于智能合约上的接口仅能解析具有特定格式的数据,所以难以高效地生成能够被智能合约解析的测试案例。因此,希望能有改进的方案,可以更高效的生成能够通过智能合约数据解析的测试案例。
技术实现思路
本说明书一个或多个实施例描述了一种生成智能合约测试案例的方法和装置,能够更高效地生成能够通过智能合约数据解析的测试案例。第一方面,本说明书提供了一种生成智能合约测试案例的方法,包括:针对当前的测试案例,从该测试案例包括的各结构化参数中选取至少一个待变异结构化参数,其中,所述待变异结构化参数能够被待测试智能合约中的至少一个接口识别;针对每一个所述待变异结构化参数,得到该待变异结构化参数对应的参数结构,其中,所述参数结构通过对预先构建的样本结构化参数进行分析而确定,且所述样本结构化参数能够被所述待测试智能合约中的至少一个接口识别;针对每一个所述待变异结构化参数,根据该待变异结构化参数对应的参数结构,对该待变异结构化参数进行变异,获得变异后结构化参数;生成包括各所述变异后结构化参数的测试案例,并将该测试案例作为输入所述待测试智能合约的测试案例。一种可能的实施方式,每个结构化参数包括至少一个原始类型数据,且所述参数结构包括原始类型数据的数据类型,在这样情况下,所述根据该待变异结构化参数对应的参数结构,对该待变异结构化参数进行变异,包括:从该待变异结构化参数包括的各原始类型数据中选取至少一个待变异原始类型数据;根据该待变异结构化参数对应的参数结构确定每个所述待变异原始类型数据的数据类型;根据每个所述待变异原始类型数据的数据类型,对该待变异原始类型数据进行参数值变异,以改变该待变异结构化参数的参数值。一种可能的实施方式,所述根据每个所述待变异原始类型数据的数据类型,对该待变异原始类型数据进行参数值变异,包括:如果一个所述待变异原始类型数据的数据类型为未限制长度的数据类型,则对该待变异原始类型数据执行修改字节值、删除字节、插入字节和对字节进行移位中的至少一项;如果一个所述待变异原始类型数据的数据类型为限制长度的数据类型,则对该待变异原始类型数据执行修改字节值和对字节进行位移中的至少一项。一种可能的实施方式,所述未限制长度的数据类型包括:字符串类型;所述限制长度的数据类型包括:64位整数类型或者256位Hash类型。一种可能的实施方式,每个结构化参数包括至少一个原始类型数据,且所述参数结构包括原始类型数据的起始位置或结束位置,在这种情况下,所述根据该待变异结构化参数对应的参数结构,对该待变异结构化参数进行变异,包括:根据所述参数结构包括的原始类型数据的起始位置或结束位置,确定该待变异结构化参数中每个原始类型数据的起始位置或结束位置;在该待变异结构化参数包括的至少一个原始类型数据的起始位置之前或结束位置之后,新增至少一个原始类型数据,以改变该待变异结构化参数的参数结构。一种可能的实施方式,每个结构化参数包括至少两个原始类型数据,且所述参数结构包括原始类型数据的起始位置或结束位置,在这种情况下,所述根据该待变异结构化参数对应的参数结构,对该待变异结构化参数进行变异,包括:根据所述参数结构包括的原始类型数据的起始位置或结束位置,确定该待变异结构化参数中每个原始类型数据的起始位置或结束位置;根据待变异结构化参数中每个原始类型数据的起始位置或结束位置,删除其中的至少一个原始类型数据,以改变该待变异结构化参数的参数结构。一种可能的实施方式,每个结构化参数包括至少两个原始类型数据,且所述参数结构包括各原始类型数据之间的顺序,在这种情况下,所述根据该待变异结构化参数对应的参数结构,对该待变异结构化参数进行变异,包括:根据该待变异结构化参数对应的参数结构,确定该待变异结构化参数中各原始类型数据之间的顺序;改变该待变异结构化参数中的各原始类型数据在该待变异结构化参数中的顺序,以改变该待变异结构化参数的参数结构。一种可能的实施方式,在所述针对当前的测试案例,从该测试案例包括的各结构化参数中选取至少一个待变异结构化参数之前,进一步包括:将此前已被所述待测试智能合约执行过的一个测试案例确定为所述当前的测试案例。一种可能的实施方式,在所述针对当前的测试案例,从该测试案例包括的各结构化参数中选取至少一个待变异结构化参数之前,进一步包括:将人工生成的一个测试案例确定为所述当前的测试案例。一种可能的实施方式,所述将此前已被所述待测试智能合约执行过的一个测试案例确定为所述当前的测试案例,包括:将上一次输入所述待测试智能合约的测试案例确定为第一测试案例;判断所述待测试智能合约执行所述第一测试案例时是否覆盖到了新的程序路径;如果是,则将所述第一测试案例确定为所述当前的测试案例;如果否,则将第二测试案例确定为所述当前的测试案例,其中,所述第二测试案例满足:已被输入所述待测试智能合约,且所述第一测试案例是通过对所述第二测试案例中的结构化参数进行变异而获得的。第二方面,本说明书还提供了一种生成智能合约测试案例的装置,包括:参数选取单元,配置为针对当前的测试案例,从该测试案例包括的各结构化参数中选取至少一个待变异结构化参数,其中,所述待变异结构化参数能够被待测试智能合约中的至少一个接口识别;结构识别单元,配置为针对所述参数选取单元选取出的每一个所述待变异结构化参数,得到该待变异结构化参数对应的参数结构,其中,所述参数结构通过对预先构建的样本结构化参数进行分析而确定,且所述样本结构化参数能够被所述待测试智能合约中的至少一个接口识别;参数变异单元,配置为针对每一个所述待变异结构化参数,根据所述结构识别单元得到的该待变异结构化参数对应的参数结构,对该待变异结构化参数进行变异,获得变异后结构化参数;案例生成单元,用于生成包括所述参数变异单元所获得的各所述变异后结构化参数的测试案例,并将该测试案例作为输入所述待测试智能合约的测试案例。一种可能的实施方式,每个结构化参数包括至少一个原始类型数据,且所述参数结构包括原始类型数据的数据类型,在这种情况下,所述参数变异单元包括:本文档来自技高网...

【技术保护点】
1.一种生成智能合约测试案例的方法,包括:/n针对当前的测试案例,从该测试案例包括的各结构化参数中选取至少一个待变异结构化参数,其中,所述待变异结构化参数能够被待测试智能合约中的至少一个接口识别;/n针对每一个所述待变异结构化参数,得到该待变异结构化参数对应的参数结构,其中,所述参数结构通过对预先构建的样本结构化参数进行分析而确定,且所述样本结构化参数能够被所述待测试智能合约中的至少一个接口识别;/n针对每一个所述待变异结构化参数,根据该待变异结构化参数对应的参数结构,对该待变异结构化参数进行变异,获得变异后结构化参数;/n生成包括各所述变异后结构化参数的测试案例,并将该测试案例作为输入所述待测试智能合约的测试案例。/n

【技术特征摘要】
1.一种生成智能合约测试案例的方法,包括:
针对当前的测试案例,从该测试案例包括的各结构化参数中选取至少一个待变异结构化参数,其中,所述待变异结构化参数能够被待测试智能合约中的至少一个接口识别;
针对每一个所述待变异结构化参数,得到该待变异结构化参数对应的参数结构,其中,所述参数结构通过对预先构建的样本结构化参数进行分析而确定,且所述样本结构化参数能够被所述待测试智能合约中的至少一个接口识别;
针对每一个所述待变异结构化参数,根据该待变异结构化参数对应的参数结构,对该待变异结构化参数进行变异,获得变异后结构化参数;
生成包括各所述变异后结构化参数的测试案例,并将该测试案例作为输入所述待测试智能合约的测试案例。


2.根据权利要求1所述的方法,其中每个结构化参数包括至少一个原始类型数据,且所述参数结构包括原始类型数据的数据类型;
所述根据该待变异结构化参数对应的参数结构,对该待变异结构化参数进行变异,包括:
从该待变异结构化参数包括的各原始类型数据中选取至少一个待变异原始类型数据;
根据该待变异结构化参数对应的参数结构确定每个所述待变异原始类型数据的数据类型;
根据每个所述待变异原始类型数据的数据类型,对该待变异原始类型数据进行参数值变异,以改变该待变异结构化参数的参数值。


3.根据权利要求2所述的方法,其中,所述根据每个所述待变异原始类型数据的数据类型,对该待变异原始类型数据进行参数值变异,包括:
如果一个所述待变异原始类型数据的数据类型为未限制长度的数据类型,则对该待变异原始类型数据执行修改字节值、删除字节、插入字节和对字节进行移位中的至少一项;
如果一个所述待变异原始类型数据的数据类型为限制长度的数据类型,则对该待变异原始类型数据执行修改字节值和对字节进行位移中的至少一项。


4.根据权利要求3所述的方法,其中,
所述未限制长度的数据类型包括:字符串类型;
所述限制长度的数据类型包括:64位整数类型或者256位Hash类型。


5.根据权利要求1至4中任一所述的方法,其中每个结构化参数包括至少一个原始类型数据,且所述参数结构包括原始类型数据的起始位置或结束位置;
所述根据该待变异结构化参数对应的参数结构,对该待变异结构化参数进行变异,包括:
根据所述参数结构包括的原始类型数据的起始位置或结束位置,确定该待变异结构化参数中每个原始类型数据的起始位置或结束位置;
在该待变异结构化参数包括的至少一个原始类型数据的起始位置之前或结束位置之后,新增至少一个原始类型数据,以改变该待变异结构化参数的参数结构。


6.根据权利要求1至4中任一所述的方法,其中每个结构化参数包括至少两个原始类型数据,且所述参数结构包括原始类型数据的起始位置或结束位置;
所述根据该待变异结构化参数对应的参数结构,对该待变异结构化参数进行变异,包括:
根据所述参数结构包括的原始类型数据的起始位置或结束位置,确定该待变异结构化参数中每个原始类型数据的起始位置或结束位置;
根据待变异结构化参数中每个原始类型数据的起始位置或结束位置,删除其中的至少一个原始类型数据,以改变该待变异结构化参数的参数结构。


7.根据权利要求1至4中任一所述的方法,其中每个结构化参数包括至少两个原始类型数据,且所述参数结构包括各原始类型数据之间的顺序;
所述根据该待变异结构化参数对应的参数结构,对该待变异结构化参数进行变异,包括:
根据该待变异结构化参数对应的参数结构,确定该待变异结构化参数中各原始类型数据之间的顺序;
改变该待变异结构化参数中的各原始类型数据在该待变异结构化参数中的顺序,以改变该待变异结构化参数的参数结构。


8.根据权利要求1至4中任一所述的方法,其中,在所述针对当前的测试案例,从该测试案例包括的各结构化参数中选取至少一个待变异结构化参数之前,进一步包括:
将此前已被所述待测试智能合约执行过的一个测试案例确定为所述当前的测试案例;
或者,
将人工生成的一个测试案例确定为所述当前的测试案例。


9.根据权利要求8所述的方法,其中,所述将此前已被所述待测试智能合约执行过的一个测试案例确定为所述当前的测试案例,包括:
将上一次输入所述待测试智能合约的测试案例确定为第一测试案例;
判断所述待测试智能合约执行所述第一测试案例时是否覆盖到了新的程序路径;
如果是,则将所述第一测试案例确定为所述当前的测试案例;
如果否,则将第二测试案例确定为所述当前的测试案例,其中,所述第二测试案例满足:已被输入所述待测试智能合约,且所述第一测试案例是通过对所述第二测试案例中的结构化参数进行变异而获得的。


10.一种生成智能合约测试案例的装置,包括:
参数选取单元,配置为针对当前的测试案例,从该测试案例包括的各结构化参数中选取至少一个待变异结构化参数,其中,所述待变异结构化参数能够被待测试智能合约中的至少一个接口识别;
结构识别单元,配置为针对所述参数选取单元选取出的每一个所述待变异结构化参数,得到该待变异结构化参数对应的参数结构,其中,所...

【专利技术属性】
技术研发人员:邬萌王海军
申请(专利权)人:支付宝杭州信息技术有限公司
类型:发明
国别省市:浙江;33

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1