CN112154420B - 自动智能云服务测试工具 - Google Patents

自动智能云服务测试工具 Download PDF

Info

Publication number
CN112154420B
CN112154420B CN201980033992.9A CN201980033992A CN112154420B CN 112154420 B CN112154420 B CN 112154420B CN 201980033992 A CN201980033992 A CN 201980033992A CN 112154420 B CN112154420 B CN 112154420B
Authority
CN
China
Prior art keywords
test
requests
sequence
test request
service
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201980033992.9A
Other languages
English (en)
Other versions
CN112154420A (zh
Inventor
P·歌德弗洛伊德
M·波利舒克
E·阿特利达基斯
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Technology Licensing LLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Technology Licensing LLC filed Critical Microsoft Technology Licensing LLC
Publication of CN112154420A publication Critical patent/CN112154420A/zh
Application granted granted Critical
Publication of CN112154420B publication Critical patent/CN112154420B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3664Environments for testing or debugging software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

在经由服务的编程接口自动测试服务的方法中,获取描述由服务支持的一组操作的一组操作描述。该组操作描述包括对与该组操作中的相应操作相关联的请求和响应于请求而被预期的响应的相应描述。基于该组操作描述确定与相应操作相关联的请求之间的依赖性,并且生成满足所确定的依赖性的一组测试请求序列。执行该组测试请求序列中的测试请求序列以经由服务的编程接口测试服务。

Description

自动智能云服务测试工具
技术领域
本公开总体上涉及测试工具,并且更具体地涉及用于测试服务或应用的工具。
背景技术
诸如Web服务应用或其他应用等服务已经变得普遍用于托管软件应用,提供用于数据存储和分析的平台,提供基础设施应用,等等。这样的服务通常被托管在云中,并且可以经由服务接口(诸如应用程序编程接口(API))可访问和/或编程,该服务接口可以例如符合代表性状态转移(REST)协议(例如,RESTful API)。服务的接口可以由与服务相关联的计算机可读规范来描述。这样的规范通常可以描述由服务支持的请求和可以预期来自服务的响应。最近,已经开发了用于描述应用接口的标准化格式。例如,Swagger(或“OpenAPI”)是一种通常用于描述RESTful API的标准化格式。
为了提供功能的和可靠的服务,测试这样的服务以发现错误、发现安全漏洞等可能是重要的。当前用于测试这样的服务的自动测试工具通常捕获实时API业务(例如,第三方应用与服务之间的业务),并且然后可以解析、模糊化和重放业务以发现服务中的漏洞和/或安全漏洞。但是,这样的工具不是系统性的,并且可能不是有效的。
发明内容
在一个实施例中,一种用于经由服务的编程接口自动测试服务的方法包括:在一个或多个硬件处理器处获取描述由服务支持的一组操作的一组操作描述,其中该组操作描述包括对i)与该组操作中的相应操作相关联的请求,以及ii)响应于请求而被预期的响应的相应描述。该方法还包括:利用一个或多个硬件处理器基于该组操作描述确定与相应操作相关联的请求之间的依赖性。该方法还包括:利用一个或多个硬件处理器生成满足所确定的依赖性的一组测试请求序列。该方法还包括:利用一个或多个硬件处理器执行该组测试请求序列中的测试请求序列以经由服务的编程接口测试服务。
在另一实施例中,一种测试系统包括规范分析器,该规范分析器被配置为解析描述服务的编程接口的计算机可读规范以生成描述由服务支持的一组操作的一组操作描述,其中该组操作描述包括对i)与该组操作中的相应操作相关联的请求,以及ii)响应于请求而被预期的响应的相应描述。该测试系统还包括测试引擎,该测试引擎被配置为:基于该组操作描述确定与相应操作相关联的相应请求之间的依赖性,基于该组操作描述和所确定的依赖性生成满足所确定的依赖性的一组测试请求序列,以及执行该组测试请求序列中的测试请求序列以经由服务的编程接口测试服务。
在又一实施例中,一种或多种存储机器可读指令的有形计算机可读介质,该机器可读指令在由一个或多个处理器执行时使一个或多个处理器:获取描述由服务支持的一组操作的一组操作描述,其中该组操作描述包括i)与该组操作中的相应操作相关联的请求和ii)响应于请求而预期的响应的相应描述;基于该组操作描述确定与相应操作相关联的相应请求之间的依赖性;基于该组操作描述和所确定的依赖性生成满足所确定的依赖性的一组测试请求序列;以及使该组测试请求序列中的测试请求序列被执行以经由服务的编程接口测试服务。
附图说明
图1是根据一个实施例的可以被配置为测试服务的示例测试系统的框图;
图2是示出根据一个实施例的可以与图1的测试系统一起使用的示例服务规范的图;
图3A是示出根据一个实施例的可以被包括在由图1的测试系统基于图2的服务规范而生成的一组操作描述中的示例操作描述的图;
图3B示出了根据一个实施例的基于图3A的操作描述而生成的请求的跟踪以及响应于执行该请求而接收的响应;
图4是根据一个实施例的用于测试服务的过程的流程图;
图5是根据一个实施例的用于检查在图4的过程中生成的测试请求序列中的依赖性的过程的框图;
图6是根据一个实施例的图4的过程的示例实现;
图7是根据一个实施例的可以由图1的测试系统实现以经由服务的编程接口来测试服务的方法的流程图;以及
图8是根据一个实施例的适合于实现图1的测试系统的一个或多个组件的计算机系统的框图。
具体实施方式
在下面描述的各种实施例中,用于测试诸如云服务等服务的自动测试工具基于对描述该服务的编程接口的计算机可读规范的分析来生成用于系统地测试该服务的智能测试。基于对规范的分析,测试工具可以确定服务支持哪些特定请求、以及可以预期来自该服务的响应是什么,并且可以生成用于确定由规范支持的特定请求之间的依赖性的依赖性信息。基于依赖性信息,测试工具可以推断出某些请求组合无效或不受支持。作为示例,测试工具可以推断出不应当在请求A之前执行请求B,因为请求B将响应于请求A的执行而返回的变量(例如,资源ID)作为输入。基于对规范的分析,测试工具可以生成、执行和处理用于测试服务的测试请求序列的响应。在至少一些实施例中,测试工具可以利用内部依赖性来自动避免在测试服务时执行无效的请求序列,从而减少测试的复杂度和执行服务的测试所需要的时间。在至少一些实施例中,本文中描述的这些技术和其他技术可以允许测试工具彻底和有效地执行服务,而无需执行可以系统地生成以用于测试服务的所有可能的测试请求序列。
图1是根据一个实施例的示例测试系统100的框图。测试系统100包括通信地耦合到服务104的测试工具102。服务104通常可以是可以通过网络访问的服务或应用,诸如可以通过互联网访问的云服务或应用。服务104可以例如是作为软件即服务提供的软件应用(例如,电子邮件应用、博客托管应用、办公工具应用等)、作为平台即服务提供的平台(例如,数据挖掘应用、数据分析应用、软件开发工具等)、作为基础设施即服务提供的基础设施(例如,计算基础设施)等。服务104可以提供编程接口,诸如应用程序编程接口(API),编程接口可以包括用户、第三方应用、其他服务等可访问的一组例程、对象、操作、函数等,并且编程接口可以允许用户或其他服务或应用以与服务或应用104交互、利用和定制服务或应用104。在一个实施例中,服务104可以符合代表性状态转移(REST)架构,并且可以提供符合REST架构的编程接口。例如,服务104可以是RESTful web服务,其可以提供RESTful API。例如,服务104的RESTful API例如可以允许其他服务或应用使用超文本传输协议(HTTP)通过互联网与服务104交互,并且可以允许其他服务或应用使用通过互联网使用HTTP传输的请求来访问和操纵服务104。服务104的RESTful API通常可以使用标准操作来显露(expose)服务104的各种功能、模块等,诸如用于检索资源(例如,所存储的数据)的GET操作、用于更新或以其他方式改变资源的状态的PUT操作、用于创建资源的POST操作、用于删除资源的DELETE操作等。
测试工具102可以被配置为生成、执行和处理测试请求序列的响应以测试服务104,以发现服务104中的安全漏洞、软件错误等。测试工具102可以包括规范分析器106和测试引擎108。规范分析器106可以接收可以描述服务104的编程接口(例如,REST API)的规范110作为输入。规范110可以是Swagger或OpenAPI规范,该规范可以利用Swagger或OpenAPI接口描述语言来描述由服务104支持的请求的格式以及可以由服务104提供的响应的格式。在其他实施例中,规范110可以是利用与Swagger或OpenAPI接口描述语言不同的接口描述语言的合适的规范。基于对规范110的分析,规范分析器106可以生成一组操作描述112,其用于标识并且提供对由服务104支持的操作的描述。该组操作描述112可以包括请求生成语法,该请求生成语法用于生成要被提供给服务104以执行由服务104支持的相应操作的请求,以及可以预期来自服务104的对应响应的格式。该组操作描述112还可以包括用于确定由服务104支持的请求之间的依赖性的信息。例如,对于由服务104支持的每个请求,规范分析器106可以指示需要作为用于生成请求的输入的任何参数(例如,动态对象,诸如资源标识符)以及由对请求的响应返回的任何参数(例如,动态对象,诸如资源标识符)。基于该组操作描述112中的这样的依赖性信息,测试工具102可以推断由服务104支持的请求之间的依赖性。例如,测试工具102可以推断不应当在请求A之前执行请求B,因为请求B将采取响应于请求A的执行而返回的变量(例如,资源ID)作为输入。在至少一些实施例中,测试工具102可以利用所推断的依赖性自动避免在测试服务104时执行不满足依赖性的无效测试请求序列,从而减少测试的复杂度和执行服务104的测试所需要的时间。
继续参考图1,该组操作描述112可以被提供给测试引擎108。测试引擎108可以使用该组操作描述112生成并且执行测试请求序列114以测试服务104,并且可以动态地分析从服务104接收的响应116。为了执行智能测试,而无需执行包含所有可能的请求组合的测试序列,测试引擎108可以通过自动消除被确定为无效的测试请求序列来仅执行被确定为有效的测试序列。例如,如果测试请求序列不满足可以从该组操作描述112中推断出的一个或多个依赖性,则测试引擎108可以确定测试请求序列无效。例如,通过基于该组操作描述112中的依赖性信息确定需要作为测试请求序列中的请求的输入的一个或多个参数没有由测试请求序列中的任何先前请求产生,测试引擎108可以确定测试序列不满足一个或多个依赖性。响应于确定测试请求序列不满足一个或多个依赖性,测试引擎108可以丢弃该测试请求序列而不执行测试请求序列。作为另一示例,测试引擎可以通过分析响应于执行测试请求序列而接收的响应来确定测试请求序列无效,例如,如果该响应没有指示测试请求序列的成功完成。响应于基于响应于执行测试请求序列而接收的响应而确定测试请求序列无效,测试引擎108可以丢弃该测试序列,使得在生成后续测试序列用于另外的测试服务104时不使用该测试请求序列。在至少一些实施例中,本文中描述的这些和其他技术可以允许测试工具102彻底有效地使用服务104并且发现服务104中的错误,而无需执行可能为了测试服务104而系统性地生成的所有可能的测试请求序列。
图2是示出根据一个实施例的示例服务规范200的图。服务规范200可以对应于图1所示的服务规范110,并且为了便于解释,下面参考图1的测试系统100描述服务规范200。在一些实施例中,服务规范200可以与不同于图1的测试系统100的合适的测试系统一起使用。类似地,在一些实施例中,图1的测试系统100可以利用与服务规范200不同的合适的服务规范。
服务规范200描述博客托管服务的编程接口,并且可以在作为博客托管服务的服务104的上下文中提供。在其他实施例中,服务规范200可以描述其他合适服务的接口。博客托管服务的编程接口可以是RESTful API,也可以是另一合适类型的编程接口。服务规范200可以定义可以由博客托管服务支持的一组操作202。在所示示例中,一组操作202包括五个操作,包括:i)GET操作202-1,该操作返回针对用户的当前由博客托管服务托管的博客列表,ii)POST操作202-2,该操作创建新的博客文章,iii)DELETE操作202-3,该操作删除博客文章,iv)GET操作202-4,该操作返回特定博客文章,以及v)PUT操作202-5,该操作更新特定博客文章。在其他实施例中,服务规范200可以定义其他合适的各组操作,包括具有少于五个操作或大于五个操作的各组操作。
对于操作202中的每个,服务规范200指定由针对对应操作的博客托管服务预期的请求的格式以及响应于执行操作而从博客发布服务可以预期的对应响应的格式。图2示出了根据一个实施例的用于POST操作202-2的示例操作规范210。操作202中的其他操作可以具有相似的操作规范。如在所示实施例中,操作规范210可以以YALM格式提供,或者可以以另一合适的机器可读格式提供。操作规范210可以包括定义部分212和路径部分214。定义部分212可以包括一个或多个参数(例如,对象)的定义,这些参数对于生成针对对应操作的请求可能是必需的或可选的。例如,在所示实施例中,定义部分212指示针对POST操作的请求要求字符串(string)类型的名称为body的对象,而整数(integer)类型的名称为id的对象是可选的(未指示为必需)。路径部分214可以指定用于生成请求的语法,例如用于生成请求的句法(syntax)。路径部分214可以指定用于请求的HTTP句法,如图2所示,或者可以指定另一合适格式的句法。
图1的测试系统100的测试工具102(例如,规范分析器106)可以分析服务规范200,并且可以基于服务规范200自动生成该组操作描述112。图3A是示出根据一个实施例的可以被包括在基于规范200而生成的该组操作描述112中的示例操作描述300的图。规范分析器106可以基于服务规范200的POST操作规范210来生成操作描述300。规范分析器106可以类似地分析规范200的其他操作202的操作规范,并且可以针对规范200的每个操作202生成该组操作描述112以包括诸如操作描述300的相应操作描述。
操作描述300可以被编码为可执行代码,诸如可执行的python代码,并且可以可执行以自动生成针对该操作的请求并且处理响应于服务104对请求的执行而接收的响应。操作描述300包括请求生成部分302和响应处理部分304。请求生成部分302可以包括可以用于生成请求的一组静态和可模糊参数310。静态和可模糊参数310可以以用于生成请求的适当的顺序列出。静态参数310可以指示要附加到先前参数310的字符串,而无需在附加到先前参数310之前进行修改。另一方面,可模糊参数310可以指示要附加到先前参数310的对象的类型。随后,可以将可模糊参数的类型的指示替换为对应类型的值。对应类型的值可以选自类型的值的字典,这将在下面更详细地说明,或者可以以其他合适的方式确定。请求生成部分302可以被执行以生成POST请求,该POST请求然后可以被传输到服务104。图3B简要地示出了根据示例实施例的可以基于操作描述300生成的POST请求350的跟踪。在示例实施例中,图3B还示出了可以响应于执行POST请求350而接收的响应352。
再次参考图3A,操作描述300的响应处理部分304可以包括用于解析预期响应于在请求生成部分302中指定的请求的执行而接收的响应的代码。响应的解析可以包括提取在响应中返回的一个或多个参数的值。例如,解析针对POST请求的响应可以包括提取响应于发布请求而返回的id的值(例如,在图3B所示的实施例中,“id”:5889)。在响应中返回的一个或多个参数的值可以被存储(例如,存储在存储器中),使得这些值随后可以用于生成例如参数是其必需或可选输入的请求。
图4是根据一个实施例的用于测试服务的示例过程400的流程图。在一个实施例中,过程400由图1的测试工具102(例如,模糊测试工具102的测试引擎108)实现。过程400可以利用该组操作描述112来生成、执行用于测试服务104的测试请求序列和处理其响应。在一个实施例中,过程400可以执行生成、执行长度增加的测试请求序列和分析其响应的一个或多个迭代,直到达到最大长度n。每次迭代可以在框402处开始,在框402处,可以将初始设置为0的变量n递增1。在框404处,可以生成一组长度为n的有效测试请求序列(即,包括n个请求),其中n是大于0的整数。测试引擎108可以通过以下方式来生成该组有效测试请求序列:通过向长度为(n-1)的测试请求序列附加选自该组操作描述112的新的请求,扩展在先前迭代中生成并且保留的每个长度为(n-1)的测试请求序列,并且通过检查针对附加请求的依赖性是否满足,来确定新生成的长度为n的测试请求序列是否有效。如果针对附加请求的依赖性满足,则测试引擎108可以将新生成的测试请求序列保留在该组长度为n的测试请求序列中。另一方面,如果针对附加请求的依赖性不满足,则测试引擎108可以从该组长度为n的测试序列中省略新生成的测试请求序列。
图5是根据一个实施例的当特定的新的请求被附加到先前生成的一组长度为n-1的测试请求序列中的测试请求序列时,用于检查长度为n的新生成的测试请求序列中的依赖性的过程500的框图。在一个实施例中,测试引擎108在框404处实现过程500以检查针对附加请求的依赖性是否满足。在框502处,确定需要作为附加请求的输入的一组动态对象。例如,测试引擎108可以通过从该组操作描述112中与附加请求相对应的操作描述中获取所需要的输入对象的指示,来确定需要作为附加请求的输入的该组动态对象。在框504处,确定由测试请求序列中的先前请求(如果有)产生的一组动态对象。例如,测试引擎108可以通过从该组操作描述112中与先前请求相对应的相应操作描述中获取返回对象的指示,来确定由测试请求序列中的先前请求产生的该组动态对象。在框506处,确定需要作为附加请求的输入的该组动态对象中的所有动态对象(在框502处确定)是否被包括在由先前请求产生的该组动态对象(在框504处确定)中。如果在框506处确定在框502处确定的该组动态对象中的每个所需要的动态对象都被包括在在框504处确定的所产生的该组动态对象中,则表明针对附加请求的依赖性满足。在这种情况下,过程500可以进行到框508,在框508处,将新生成的测试请求序列保留在(例如,添加到)该组长度为n的测试请求序列中。另一方面,如果在框506处确定在框502处确定的该组动态对象中的至少一个动态对象未被包括在在框504处确定的所产生的该组动态对象中,则表明针对附加请求的依赖性不满足。在这种情况下,过程500可以进行到框510,在框510处,丢弃新生成的测试请求序列。
再次参考图4的框404,在框406处,具体化并且执行在框404处生成的该组长度为n的有效测试序列中的相应测试请求序列。为了具体化测试请求序列,测试引擎108可以将测试请求序列中的最后新近附加的请求中的任何可模糊参数替换为对应对象类型的具体值。用于替换可模糊参数的具体值可以从对应对象类型的预定值的字典中获取。字典例如可以是用户定义的。测试引擎108可以基于特定的有效的测试请求序列来生成多个具体化测试请求序列,以包括在对应对象类型的字典中提供的所有可模糊对象值的所有可能组合。为了限制这样的测试序列的数目,在一些实施例中,为相应对象类型而提供的字典可以相对较小。例如,每个提供的字典可能仅包括一个或几个条目。仅作为示例,用于整数类型的字典可以仅包括一个或几个整数(例如,由0、1和-10组成的字典),用于字符串类型的字典可以仅包括一个或几个字符串(例如,由一个非常长的示例字符串和一个空字符串组成的字典),用于布尔类型的字典可以包括“真”和“假”,等等。在一些实施例中,例如,当提供相对较大的字典时,可以使用采样技术,使得并非所有字典条目都被利用。例如,测试引擎108可以从字典中随机选择一个或多个条目的子集以具体化请求中的可模糊对象,并且使用所选择的一个或多个条目的子集来具体化请求中的可模糊对象。替代地,测试引擎108可以实现合适的组合技术以执行全对(all-pairs)(在本文中也称为“成对(pairwise)”)测试,或更一般地,执行N向(N-wise)测试,使得针对序列中的可模糊对象的每对或N元组的字典条目的所有可能的离散组合被利用。这样的技术通常可以减少随后被执行以测试对应服务的具体化测试请求序列的数目。
继续参考图4,框406可以另外包括执行每个具体化测试请求序列,并且处理响应于具体化测试请求序列的执行而从服务104接收的响应。为了执行具体化测试请求序列,测试引擎108可以顺序地执行具体化测试请求序列中的请求,分析响应于执行请求而接收的响应,提取并且存储在响应中返回的任何动态对象,并且根据需要将所存储的动态对象包括在具体化测试请求序列中的后续请求中。基于处理响应,测试引擎108可以确定具体化测试请求序列是否有效。例如,如果响应指示具体化测试请求序列成功完成(例如,如果最后的响应包含200范围内的HTTP代码),则测试引擎108可以确定具体化序列是有效的,而如果响应未指示成功完成(例如,如果最后的响应包含不在200范围内的HTTP代码),则可以确定具体化序列是无效的。如果确定具体化测试请求序列无效,则测试引擎108可以将错误日志记录在错误日志中(例如,日志记录所执行的具体化测试序列和对应的HTTP代码),该错误日志可以存储在耦合到测试引擎108的存储器中。在一个实施例中,测试引擎108可以丢弃无效的具体化测试请求序列,使得在生成后续扩展测试请求序列时不使用该具体化测试请求序列。
在框404处日志记录错误可以包括聚类(例如,桶化)某些类型的错误(error)(例如,程式错误(bug))。例如,测试引擎108可以对基于测试请求序列而发现的程式错误进行聚类,针对这些错误,在对应响应中接收到500范围内的HTTP代码(“内部服务器错误”)。这样的错误可能是由请求的相同组合引起的,这些请求可能会重复地被包括在更大长度的测试请求序列中。因此,所接收的响应实际上可能不会发现新的错误,而是可能对应于在过程400的先前迭代中日志记录的已经发现的错误。在一个实施例中,为了支持用户分析错误日志,测试引擎108可以在错误日志中聚类这样的重复错误。例如,每次接收到具有这样的代码(例如,500范围内的HTTP代码)的响应时,测试引擎108可以计算对应测试序列的所有非空后缀,并且可以搜索错误日志以确定错误日志中是否已经记录一个或多个非空后缀。如果测试引擎108找到包含已经记录在错误日志中的特定后缀的现有条目,则测试引擎108可以将新错误添加到日志错误中的现有条目的簇或存储桶中。另一方面,如果测试引擎108在错误日志中未找到包含特定后缀的现有条目,则测试引擎108可以创建新的条目,并且可以在新条目中存储测试序列及其相关联的错误代码。
仍然参考图4,在框408处,测试引擎108可以确定是否已经达到最大测试序列长度(max)。在各种实施例中,最大长度max可以是预先配置的,或者可以是用户可配置的。如果在框408处确定尚未达到最大长度max(例如,如果n<max为真),则过程400可以返回到框402,并且过程400的另一迭代可以被发起。另一方面,如果在框408处确定已经达到最大长度max(例如,如果n<max为假),则过程400可以完成,并且因此,过程400可以终止。
回到框404,在一个实施例中,在过程400的每次迭代中,测试引擎108生成长度为n的测试序列的所有可能的组合,以试图通过搜索长度为n的有效测试序列的所有可能的组合来发现错误。换言之,在该实施例中,测试引擎108通过探索过程400的每次迭代中的所有可能的测试序列来实现广度优先搜索(BFS)。在其他实施例中,测试引擎108实现其他合适的搜索策略。例如,在一个实施例中,测试引擎108可以实现BFS快速搜索。在该实施例中,在过程400的每次迭代中,测试引擎108可以在框404处生成一组有效序列,其中长度为n-1的每个序列被附加从在该组操作描述212中提供的该组请求中选择的仅一个请求。因此,在该实施例中,虽然在过程400的每次迭代中,测试引擎108可以使用该组长度为n-1的序列中的每个请求来生成长度为n的新序列,但在该实施例中,并非生成所有可能的这样的序列,从而减少了在每次迭代中被生成和执行的有效测试请求序列的数目。结果,在该实施例中,测试引擎108可以更快地更深地进入更大长度的测试序列。作为又一示例,在又一实施例中,测试引擎108可以实现随机游走搜索。在该实施例中,在过程400的每次迭代中,测试引擎108可以例如通过以下方式生成仅单个(或仅几个)长度为n的有效测试请求序列:随机地选择该组长度为n-1的测试序列中的一个或多个测试请求序列,并且通过附加随机地选自在该组操作描述202中提供的请求的一个或多个请求来扩展一个或多个选择的测试序列。在一个实施例中,一旦达到最大长度n,测试引擎108可以重新启动过程400以开始使用潜在的其他随机选择的另一随机游动搜索。
简要地参考图6,根据一个实施例,示例实现600可以大体上对应于图4的过程400。在一个实施例中,示例实现600可以在图1的测试系统100的测试工具102中实现。例如,示例实现600可以部分地由图1的测试系统100的测试工具102的规范分析器106实现,并且部分地由图1的测试系统100的测试工具102的测试引擎108实现。在其他实施例中,示例实现600可以由图1的测试系统100的其他合适的组件来实现,或者可以由与图1的测试系统100不同的合适的测试系统来实现。
图7是根据一个实施例的用于经由服务的编程接口自动测试服务的方法700的流程图。在一个实施例中,方法700结合图1的测试系统100来实现。例如,在一个实施例中,方法700由图1的测试系统100的测试工具102(例如,测试模块108)实现。在其他实施例中,方法700由不同于测试工具102的合适的组件实现,和/或与不同于测试系统100的测试系统相结合实现。在框702处,获取一组操作描述。该组操作描述可以描述由服务支持的一组操作。该组操作描述可以包括例如对i)与该组操作中的相应操作相关联的请求和ii)响应于该请求而预期的响应的相应描述。该组操作描述可以从规范分析器(例如,规范分析器106)获取。规范分析器可以通过解析定义服务的编程接口的服务规范(例如,服务规范110)来生成该组操作描述。在其他实施例中,该组操作描述可以以其他合适的方式获取。例如,该组操作描述可以例如由测试工具102的用户作为对测试工具102的直接输入来提供。
在框704处,确定与相应操作相关联的请求之间的依赖性。确定依赖性可以包括:例如确定与该组操作中的第一操作相关联的第一请求不应当在与该组操作中的第二操作相关联的第二请求之前执行,因为与第二操作相关联的第二请求采取响应于与第一操作相关联的第一请求而返回的参数(例如,资源ID)作为输入。在一个实施例中,基于在框702处获取的该组操作描述来确定依赖性。例如,基于i)需要作为相应请求的输入的在该组操作描述中指示的参数以及ii)预期将响应于相应请求而返回的在该组操作描述中指示的参数来确定依赖性。在其他实施例中,以其他合适的方式基于该组操作描述来确定依赖性。
在框706处,生成一组测试请求序列。在一个实施例中,可以基于在框702处获取的该组操作描述和在框704处确定的依赖性来生成该组测试请求序列。可以生成该组测试请求序列以仅包括满足在框704处确定的依赖性的那些测试请求序列。该组测试请求序列可以省略不满足在框704处确定的依赖性的测试请求序列。在一个实施例中,可以基于可以在框702处获取的该组操作描述中提供的相应请求生成语法来生成该组测试请求序列中的相应请求。在其他实施例中,可以以其他合适的方式生成该组测试请求序列中的相应请求。
在框708处,可以执行该组测试请求序列中的测试请求序列以经由服务的编程接口来测试服务。框708可以包括:在执行测试请求序列之前,将测试请求序列中的一个或多个请求中的一个或多个可模糊参数替换为对应参数类型的值,以基于测试请求序列生成一个或多个具体化测试请求序列。在这种情况下,执行测试请求序列可以包括执行一个或多个具体化测试请求序列中的每个。一个或多个可模糊参数可以替换为选自与参数类型相对应的相应字典的值。执行测试请求序列可以包括处理从执行测试请求序列获取的响应。可以基于在框702处获取的该组操作描述中可以为对应操作提供的相应响应格式来处理响应。基于处理响应,可以检测一个或多个错误,并且可以将检测到的日志错误记录在错误日志中。日志记录一个或多个错误可以包括将引起相同错误的测试请求序列聚类在错误日志中的相同条目中。
图8是适合于实现本公开的一个或多个实施例的计算系统800的框图。在其最基本配置中,计算系统800可以包括至少一个处理器802和至少一个存储器804。计算设备800还可以包括总线(未示出)或用于在计算机系统800的各个组件之间传送信息数据、信号和信息的其他通信机制。组件可以包括输入组件810,输入组件810处理用户动作,诸如从小键盘/键盘选择键、选择一个或多个按钮或链接等、以及向至少一个处理器802将发送对应信号。组件还可以包括输出组件,诸如显示器811,输出组件可以显示例如由至少一个处理器802执行的操作的结果。收发机或网络接口806可以在计算机系统800与其他设备(诸如可以利用计算机系统800实现的处理结果的用户设备)之间传输和接收信号。在一个实施例中,传输是无线的,尽管其他传输介质和方法也可以适用。
至少一个处理器802(可以是微控制器、数字信号处理器(DSP)或其他处理组件)处理这些各种信号,诸如用于在计算机系统800上显示或经由通信链路818传输到其他设备。至少一个处理器802还可以控制诸如cookie或IP地址等信息到其他设备的传输。至少一个处理器802可以执行存储在存储器804中的计算机可读指令。计算机可读指令在由至少一个处理器802执行时可以使至少一个处理器802实现与以下各项相关联的过程:确定用户上下文,基于用户上下文生成定制转换内容,输出定制转换内容,等等,如上所述。
计算机系统800的组件还可以包括至少一个静态存储装置组件816(例如,ROM)和/或至少一个磁盘驱动器817。计算机系统800可以通过执行系统存储器组件804中包含的一个或多个指令序列来执行处理器802和其他组件的特定操作。逻辑可以在计算机可读介质中编码,该计算机可读介质可以是指参与向至少一个处理器802提供指令以供执行的任何介质。这样的介质可以采取很多形式,包括但不限于非暂态介质、非易失性介质、易失性介质和传输介质。在各种实现中,非易失性介质包括光盘或磁盘,易失性介质包括动态存储器,诸如静态存储装置组件816,并且传输介质包括同轴电缆、铜线和光纤。在一个实施例中,逻辑被编码在非暂态计算机可读介质中。在一个示例中,传输介质可以采取声波或光波的形式,诸如在无线电波、光学和红外数据通信期间生成的声波或光波。
计算机可读介质的一些常见形式包括例如软盘、柔性盘、硬盘、磁带、任何其他磁介质、CD-ROM、任何其他光学介质、打孔卡、纸带、带有孔的任何其他物理介质、RAM、PROM、EEPROM、FLASH-EEPROM、任何其他存储器芯片或盒式磁带、或者计算机适合从中读取的任何其他介质。
在本公开的各种实施例中,用于实践本公开的指令序列可以由计算机系统800来执行。在本公开的各种其他实施例中,通过通信链路818耦合到网络(例如,诸如LAN、WLAN、PTSN和/或各种其他有线或无线网络,包括电信、移动和蜂窝电话网络)的多个计算机系统800可以相互协作地执行指令序列以实践本公开。
在适用的情况下,由本公开提供的各种实施例可以使用硬件、软件或硬件和软件的组合来实现。而且,在适用的情况下,在不脱离本公开的精神的情况下,本文中阐述的各种硬件组件和/或软件组件可以组合成包括软件、硬件和/或两者的复合组件。在适用的情况下,在不脱离本公开的范围的情况下,本文中阐述的各种硬件组件和/或软件组件可以被分成包括软件、硬件或两者的子组件。另外,在适用的情况下,可以预期,软件组件可以被实现为硬件组件,反之亦然。
根据本公开的软件,诸如程序代码和/或数据可以存储在一个或多个计算机可读介质上。还预期,本文中标识的软件可以使用联网和/或以其他方式的一个或多个通用或专用计算机和/或计算机系统来实现。在适用的情况下,本文中描述的各个步骤的顺序可以改变,组合成复合步骤,和/或分成子步骤,以提供本文中描述的特征。
虽然本文中已经在“模块”或“组件”方面描述了服务测试系统的各种操作,但是应当注意,术语不限于单个单元或功能。此外,归因于本文中描述的一些模块或组件的功能可以被组合并且归因于较少的模块或组件。此外,尽管已经参考特定示例描述了本发明,但是这些示例仅旨在是说明性的,并不旨在限制本发明。对于本领域普通技术人员将很清楚的是,在不脱离本发明的精神和范围的情况下,可以对所公开的实施例进行改变、增加或删除。例如,上述方法的一个或多个部分可以以不同的顺序(或同时)执行,并且仍然实现期望的结果。

Claims (20)

1.一种用于经由服务的编程接口自动测试所述服务的方法,所述方法包括
在一个或多个硬件处理器处,获取描述由所述服务支持的一组操作的一组操作描述,其中所述一组操作描述包括对i)与所述一组操作中的相应操作相关联的请求的相应描述,以及对ii)响应于所述请求而被预期的响应的相应描述;
利用所述一个或多个硬件处理器,基于所述一组操作描述,来确定与所述相应操作相关联的所述请求之间的依赖性;
利用所述一个或多个硬件处理器,生成满足所确定的所述依赖性的一组测试请求序列,其中生成所述一组测试请求序列包括执行基于所述一组操作描述来生成长度增加的测试请求序列的多个迭代,其中执行所述多个迭代包括:在所述多个迭代中的特定迭代中,通过向在所述多个迭代中的先前迭代中被生成的至少一个测试请求序列添加一个或多个请求来生成测试请求序列;以及
利用所述一个或多个硬件处理器,执行所述一组测试请求序列中的测试请求序列,以经由所述服务的所述编程接口测试所述服务。
2.根据权利要求1所述的方法,其中获取所述一组操作描述包括:通过解析定义所述服务的所述编程接口的计算机可读服务规范,来获取所述一组操作描述。
3.根据权利要求1所述的方法,其中确定相应的所述请求之间的所述依赖性包括:基于i)被需要作为对相应的所述请求的输入的、在所述一组操作描述中被指示的参数,以及ii)被预期将响应于相应的所述请求而被返回的、在所述一组操作描述中被指示的参数,来确定所述依赖性。
4.根据权利要求1所述的方法,还包括:在执行所述一组测试请求序列中的一个测试请求序列之前,利用所述一个或多个硬件处理器,利用对应参数类型的值来替换所述一个测试请求序列中的一个或多个请求中的一个或多个可模糊参数,以基于所述一个测试请求序列来生成一个或多个具体化测试请求序列,并且其中执行所述一组测试请求序列中的测试请求序列包括:执行所述一个或多个具体化测试请求序列中的每个具体化测试请求序列。
5.根据权利要求3所述的方法,其中替换所述一个或多个可模糊参数包括:从对应参数类型的值的一个或多个字典中的相应字典选择所述值中的相应值,以用于替换所述一个或多个可模糊参数。
6.根据权利要求5所述的方法,其中替换所述一个或多个可模糊参数包括:利用从对应参数类型的值的所述相应字典选择的值的相应组合,替换请求中的多个可模糊参数,以生成多个具体化测试请求序列中的相应具体化测试请求序列,并且其中执行所述一组测试请求序列中的测试请求序列包括:执行所述多个具体化测试请求序列。
7.根据权利要求1所述的方法,其中执行基于所述一组操作描述来生成所述长度增加的测试请求序列的多个迭代包括:在所述多个迭代中的所述特定迭代中,通过向在所述多个迭代中的所述先前迭代中被生成的长度为n-1的测试请求序列附加请求来生成长度为n的测试请求序列,其中n为大于零的整数。
8.根据权利要求1所述的方法,其中执行所述多个迭代中的所述特定迭代包括:向在所述多个迭代中的所述先前迭代中被生成的所述至少一个测试请求序列附加所述一个或多个请求。
9.根据权利要求1所述的方法,其中执行所述一组测试请求序列包括
执行在多个迭代中的第一迭代中被生成的一个测试请求序列,
处理响应于执行所述一个测试请求序列而从所述服务接收的响应,以确定所述响应是否指示所述一个测试请求序列的执行的成功完成,以及
响应于确定所述响应未指示所述一个测试请求序列的执行的成功完成,i)日志记录与所述一个测试请求序列相关联的错误,以及ii)从所述一组测试请求序列丢弃所述一个测试请求序列,使得所述一个测试请求序列不被用于所述多个迭代序列的后续迭代中。
10.根据权利要求1所述的方法,还包括
利用所述一个或多个硬件处理器,基于处理响应于执行所述一组测试请求序列中的所述测试请求序列而被接收的响应,来检测多个错误;以及
利用所述一个或多个硬件处理器,在错误日志的条目中日志记录引起所述多个错误的请求序列,包括将引起相同错误的所述请求序列中的多个请求序列聚类在所述错误日志的单个条目中。
11.一种测试系统,包括:
一个或多个硬件处理器;以及
存储器存储设备,包括指令,所述指令在由一个或多个硬件处理器执行时可操作以提供:
规范分析器,被配置为解析描述服务的编程接口的计算机可读规范,以生成描述由所述服务支持的一组操作的一组操作描述,其中所述一组操作描述包括对i)与所述一组操作中的相应操作相关联的请求的相应描述,以及对ii)响应于所述请求而被预期的响应的相应描述;以及
测试引擎,被配置为基于所述一组操作描述,来确定与所述相应操作相关联的相应请求之间的依赖性,
生成满足所确定的所述依赖性的一组测试请求序列,其中生成所述一组测试请求序列包括执行基于所述一组操作描述来生成长度增加的测试请求序列的多个迭代,其中执行所述多个迭代包括:在所述多个迭代中的特定迭代中,通过向在所述多个迭代中的先前迭代中被生成的至少一个测试请求序列添加一个或多个请求来生成测试请求序列;以及
执行所述一组测试请求序列中的测试请求序列,以经由所述服务的所述编程接口测试所述服务。
12.根据权利要求11所述的测试系统,其中确定所述相应请求之间的所述依赖性包括:基于i)被需要作为对所述相应请求的输入的、在所述一组操作描述中被指示的参数,以及ii)被预期将响应于所述相应请求而被返回的、在所述一组操作描述中被指示的参数,来确定所述依赖性。
13.根据权利要求11所述的测试系统,其中
所述测试引擎还被配置为:在执行所述一组测试请求序列中的一个测试请求序列之前,利用对应参数类型的值来替换所述一个测试请求序列中的一个或多个请求中的一个或多个可模糊参数,以基于所述一个测试请求序列来生成一个或多个具体化测试请求序列,并且其中执行所述一组测试请求序列中的测试请求序列包括:执行所述一个或多个具体化测试请求序列中的每个具体化测试请求序列。
14.根据权利要求13所述的测试系统,其中
所述测试引擎还被配置为:从对应参数类型的值的一个或多个字典中的相应字典选择所述值中的相应值,以用于替换所述一个或多个可模糊参数。
15.根据权利要求11所述的测试系统,其中
所述测试引擎被配置为:在所述多个迭代中的所述特定迭代中,通过向在所述多个迭代中的所述先前迭代中被生成的长度为n-1的测试请求序列附加请求来生成长度为n的测试请求序列,其中n为大于零的整数。
16.根据权利要求11所述的测试系统,其中执行所述多个迭代中的所述特定迭代包括:向在所述多个迭代中的所述先前迭代中被生成的所述至少一个测试请求序列附加所述一个或多个请求。
17.根据权利要求11所述的测试系统,其中所述测试引擎被配置为至少通过以下操作来执行所述一组测试请求序列:
执行在多个迭代中的第一迭代中被生成的一个测试请求序列,
处理响应于执行所述一个测试请求序列而从所述服务接收的响应,以确定所述响应是否指示所述一个测试请求序列的执行的成功完成,以及
响应于确定所述响应未指示所述一个测试请求序列的执行的成功完成,i)日志记录与所述一个测试请求序列相关联的错误,以及ii)从所述一组测试请求序列丢弃所述一个测试请求序列,使得所述一个测试请求序列不被用于所述多个迭代序列的后续迭代中。
18.一种或多种有形的非暂态计算机可读介质,存储机器可读指令,所述机器可读指令在由一个或多个处理器执行时,使所述一个或多个处理器:
获取描述由服务支持的一组操作的一组操作描述,其中所述一组操作描述包括对i)与所述一组操作中的相应操作相关联的请求的相应描述,以及对ii)响应于所述请求而被预期的响应的相应描述;
基于所述一组操作描述,来确定与所述相应操作相关联的相应请求之间的依赖性;
生成满足所确定的所述依赖性的一组测试请求序列,其中生成所述一组测试请求序列包括执行基于所述一组操作描述来生成长度增加的测试请求序列的多个迭代,其中执行所述多个迭代包括:在所述多个迭代中的特定迭代中,通过向在所述多个迭代中的先前迭代中被生成的至少一个测试请求序列添加一个或多个请求来生成测试请求序列;以及
使所述一组测试请求序列中的测试请求序列被执行,以经由所述服务的所述编程接口测试所述服务。
19.根据权利要求18所述的有形的非暂态计算机可读介质,存储由所述一个或多个处理器执行时使所述一个或多个处理器执行以下操作的机器可读指令:通过解析定义所述服务的所述编程接口的计算机可读服务规范,来获取所述一组操作描述。
20.根据权利要求18所述的有形的非暂态计算机可读介质,存储由所述一个或多个处理器执行时使所述一个或多个处理器执行以下操作的机器可读指令:基于以下项来确定相应的所述请求之间的所述依赖性:i)被需要作为对相应的所述请求的输入的、在所述一组操作描述中被指示的参数,以及ii)被预期将响应于相应的所述请求而被返回的、在所述一组操作描述中被指示的参数。
CN201980033992.9A 2018-05-30 2019-05-15 自动智能云服务测试工具 Active CN112154420B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/992,727 2018-05-30
US15/992,727 US10977161B2 (en) 2018-05-30 2018-05-30 Automatic intelligent cloud service testing tool
PCT/US2019/032325 WO2019231665A1 (en) 2018-05-30 2019-05-15 Automatic intelligent cloud service testing tool

Publications (2)

Publication Number Publication Date
CN112154420A CN112154420A (zh) 2020-12-29
CN112154420B true CN112154420B (zh) 2024-04-30

Family

ID=66669138

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201980033992.9A Active CN112154420B (zh) 2018-05-30 2019-05-15 自动智能云服务测试工具

Country Status (4)

Country Link
US (1) US10977161B2 (zh)
EP (1) EP3803602B1 (zh)
CN (1) CN112154420B (zh)
WO (1) WO2019231665A1 (zh)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10938696B2 (en) 2017-12-21 2021-03-02 Apple Inc. Health status monitoring for services provided by computing devices
JP6669954B2 (ja) * 2018-08-14 2020-03-18 デジタルア−ツ株式会社 情報処理装置、情報処理方法、及び情報処理プログラム
US10698806B1 (en) * 2018-12-10 2020-06-30 Sap Se Combinatorial testing of software for multi-level data structures
US11301367B2 (en) * 2020-03-02 2022-04-12 BugPoC, LLC Automated fix verification and regression testing method derived from proof-of-concepts
CN111464380B (zh) * 2020-03-19 2022-02-08 时时同云科技(成都)有限责任公司 多个业务项目的并行测试方法、装置及系统
CN111737119A (zh) * 2020-06-12 2020-10-02 芯河半导体科技(无锡)有限公司 一种自动分发测试并收集测试结果的系统
US11822470B2 (en) * 2020-10-15 2023-11-21 Dell Products, L.P. Platform agnostic library-less intelligent test automation by reverse engineering product REST API specification

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103562923A (zh) * 2011-05-31 2014-02-05 惠普发展公司,有限责任合伙企业 应用程序安全测试
CN104980313A (zh) * 2008-10-31 2015-10-14 电子湾有限公司 测试可执行指令的系统和方法
CN106062719A (zh) * 2014-02-26 2016-10-26 微软技术许可有限责任公司 根据使用数据的结构化日志模式的服务度量分析

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8336102B2 (en) * 2007-06-01 2012-12-18 Microsoft Corporation Delivering malformed data for fuzz testing to software applications
US20130275946A1 (en) * 2012-04-16 2013-10-17 Oracle International Corporation Systems and methods for test development process automation for a test harness
US9858090B2 (en) * 2015-06-02 2018-01-02 International Business Machines Corporation Generating customized on-demand videos from automated test scripts
US10019345B2 (en) * 2016-05-16 2018-07-10 Hulu, LLC Executing multi-version tests against a multi-version application
CN109643272B (zh) * 2016-06-29 2023-03-28 新思科技有限公司 用于自动http测试的测试系统及方法
US20190294536A1 (en) * 2018-03-26 2019-09-26 Ca, Inc. Automated software deployment and testing based on code coverage correlation
US20190294531A1 (en) * 2018-03-26 2019-09-26 Ca, Inc. Automated software deployment and testing based on code modification and test failure correlation
US10437712B1 (en) * 2018-06-20 2019-10-08 Ca, Inc. API functional-test generation

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104980313A (zh) * 2008-10-31 2015-10-14 电子湾有限公司 测试可执行指令的系统和方法
CN103562923A (zh) * 2011-05-31 2014-02-05 惠普发展公司,有限责任合伙企业 应用程序安全测试
CN106062719A (zh) * 2014-02-26 2016-10-26 微软技术许可有限责任公司 根据使用数据的结构化日志模式的服务度量分析

Also Published As

Publication number Publication date
US20190370152A1 (en) 2019-12-05
US10977161B2 (en) 2021-04-13
CN112154420A (zh) 2020-12-29
WO2019231665A1 (en) 2019-12-05
EP3803602A1 (en) 2021-04-14
EP3803602B1 (en) 2024-06-26

Similar Documents

Publication Publication Date Title
CN112154420B (zh) 自动智能云服务测试工具
US9110945B2 (en) Support for a parameterized query/view in complex event processing
US11200033B2 (en) Application programming interface (API) based object oriented software development and textual analysis
US10754628B2 (en) Extracting web API endpoint data from source code to identify potential security threats
KR101719500B1 (ko) 캐싱된 플로우들에 기초한 가속
CN111090423B (zh) 一种webhook框架系统和实现主动调用、实现事件触发的方法
CN114968754A (zh) 一种应用程序接口api测试方法以及装置
US11487596B2 (en) API mashup infrastructure generation on computing systems
US11204860B2 (en) Methods and apparatuses for generating smart contract test case
EP3923155A2 (en) Method and apparatus for processing snapshot, device, medium and product
CN113360300B (zh) 接口调用链路生成方法、装置、设备及可读存储介质
CN111831536A (zh) 一种自动化测试方法和装置
US11409585B2 (en) Automatic code generation for API mashups
US11360745B2 (en) Code generation for log-based mashups
CN108959294B (zh) 一种访问搜索引擎的方法和装置
CN111538659A (zh) 业务场景的接口测试方法、系统、电子设备和存储介质
CN112052152A (zh) 一种模拟测试的方法和装置
US11768889B1 (en) Evaluating configuration files for uniform resource indicator discovery
US20220198024A1 (en) Correlation between source code repositories and web endpoints
CN113608817B (zh) 弹框处理方法及系统
US20230088655A1 (en) Automatic non-code test suite generation from api specification
CN109901997B (zh) 金融系统升级方法及装置、电子设备、存储介质
US20190196945A1 (en) Entity performance and usability analysis framework
CN117873671A (zh) 任务触发方法及装置
CN117149633A (zh) 脚本处理的方法、装置、电子设备和存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant